InstallScript InstallShield中的字符ASCII代码

时间:2011-09-14 10:37:56

标签: windows-installer installshield installscript installscript-msi

我想让用户不要输入字符>安装程序中的一个密码字段中的ASCII 127。

我用谷歌搜索,但没有找到任何直接的方法,目前我正在使用:

CHAR ch;
STRING ASCII;
NUMBER nASCII;

for nCount = 0 to StrLength(sPassword)
  ch = sPassword[nCount];
  sprintf(ASCII,"%d",ch);

  StrToNum(nASCII,ASCII);

  if ( nASCII > 127 )
    MessageBox("Invalid Character in Password",INFORMATION);
  endif; 

endfor;

有没有更好的方法从字符串中获取ASCII码?

1 个答案:

答案 0 :(得分:1)

首先,我会避免转换为字符串;只需将sPassword[nCount]127直接比较即可; InstallScript存储宽字符(16位数字)。

作为替代方法,您可以尝试使用US-ASCII WideCharToMultiByte(20127)调用code page。我没有那么强大的InstallScript和没有编译器的编码,所以你可能需要修复一两个错误,但这是一个粗略的想法:

#define CP_US_ASCII 20127
extern prototype NUMBER Kernel32.WideCharToMultiByte(NUMBER, NUMBER, WSTRING, NUMBER, STRING, NUMBER, STRING, BYREF BOOL);

function BOOL IsSafeAscii(STRING szCheck)
    STRING szOut;
    BOOL bReplaced;
begin
    WideCharToMultiBute(CP_US_ASCII,          // only supports characters 0-127
                        WC_NO_BEST_FIT_CHARS, // or maybe 0; disallow turning accented to plain
                        szCheck,              // test string
                        StrLength(szCheck),   // length of test string
                        szOut,                // return buffer
                        StrLength(szOut),     // length of return buffer
                        "?",                  // replacement for unsupported characters
                        bReplaced);           // whether replacement was used
    return !bReplaced;
end;