我想要将虚拟密钥转换为WideString。这就是我目前所拥有的..。
function VKeytoWideString (Key : Word) : WideString;
var
WBuff : array [0..255] of WideChar;
KeyboardState : TKeyboardState;
UResult : Integer;
begin
GetKeyBoardState (KeyboardState);
UResult := ToUnicode(key, MapVirtualKey(key, 0), KeyboardState, WBuff, 0,0);
Result := WBuff;
case UResult of
0 : Result := '';
1 : SetLength (Result, 1);
2 :;
else
Result := '';
end;
end;它总是返回0,但是为什么呢?请帮帮忙。
发布于 2012-06-01 09:58:08
您将ToUnicode()的cchBuff参数设置为0,而不是实际的缓冲区大小,因此该函数无法存储它转换的任何字符。
试着这样做:
function VKeytoWideString (Key : Word) : WideString;
var
WBuff : array [0..255] of WideChar;
KeyboardState : TKeyboardState;
UResult : Integer;
begin
Result := '';
GetKeyBoardState (KeyboardState);
ZeroMemory(@WBuff[0], SizeOf(WBuff));
UResult := ToUnicode(key, MapVirtualKey(key, 0), KeyboardState, WBuff, Length(WBuff), 0);
if UResult > 0 then
SetString(Result, WBuff, UResult)
else if UResult = -1 then
Result := WBuff;
end; https://stackoverflow.com/questions/10843429
复制相似问题