C++ C++;printf WORD*(ToAscii)

C++ C++;printf WORD*(ToAscii),c++,keyboard,ascii,printf,C++,Keyboard,Ascii,Printf,我使用的是hook,我有一个vkCode和一个scanCode,因此我使用命令ToAscii(): 那么现在wCharacter应该包含Ascii字符了吧 我怎么能把它打印出来 我试过:printf(wCharacter)但它说:“无法将'WORD*'转换为'const char*'” 我做错了什么?如何打印单词*-还是我的ToAscii命令错了 谢谢。 Word和toasCiI.()是标准C++,所以回答这个问题有点棘手。然而,无论如何有两个问题: printf()第一个参数应该是格式字符

我使用的是hook,我有一个vkCode和一个scanCode,因此我使用命令ToAscii():

那么现在wCharacter应该包含Ascii字符了吧

我怎么能把它打印出来

我试过:
printf(wCharacter)但它说:“无法将'WORD*'转换为'const char*'”

我做错了什么?如何打印单词*-还是我的ToAscii命令错了

谢谢。

Word和toasCiI.()是标准C++,所以回答这个问题有点棘手。然而,无论如何有两个问题:

  • printf()第一个参数应该是格式字符串。你没有提供任何资料
  • 字符串是以零字节结尾的字符序列。如果要打印出作为参数传递的单个字符,假设WORD是int-ish,则可以使用“%c”格式字符串

这样做不会太远,您正在向ToAscii()传递一个未初始化的指针。正确的代码应该如下所示:

WORD wCharacter[2];
int len = ToAscii(kbdStruct.vkCode, kbdStruct.scanCode, keyboard_state, wCharacter, 0);
if (len == 1) printf("%c", wCharacter[0]);
if (len == 2) printf("%c", wCharacter[1]);

这应该在一定程度上进行编译和工作。实际上,你无法得到可靠的结果。您传递的*keyboard_state*变量应该是拥有前台窗口的进程的键盘状态。你应该注意这个过程中活跃的键盘布局(参见ToAsciiEx)。这不能与低级键盘挂钩一起使用。键盘记录器必须使用WH_CALLWNDPROC钩子来拦截WM_CHAR消息(我想,从来没有写过)更难正确,这需要一个可以注入其他进程的DLL。你当然是在发明轮子,买而不是造是最好的建议。也会让你的用户对你的意图更放心。

LPWORD-wCharacter
是指向单词的长指针。这里的单词是两个字节的整数,而不是句子中的“单词”。它基本上是一个int16。printf会把这当作一个问题来处理

printf("%hd", *wCharacter );
  • 其中h表示一个16位的值
  • d指定一个整数
  • *wCharacter是取消引用的指针或int的值
  • 如果希望打印的值将其反映为未签名

    printf("%hu", *wCharacter );
    
    无符号十六进制

    printf("%hx", *wCharacter );
    
    带大写字母的无符号十六进制

    printf("%hX", *wCharacter );
    
    现在说了所有这些,您的单词int可能是一个Unicode字符或两字节字符,相当于一个普通的8位标准字符

    在unicode中,如果仍将标准ascii字符表示为与某些阿拉伯语或汉语字符相同的字符,则可以将unicode字符转换为标准字符 通过忽略第一个字节

    LPWORD wCharacter;
    char *pChar = (char*)wCharacter;
    
    printf("%c", pChar[1]);
    
  • 将pChar声明为指向8位值(char)的指针
  • 将pChar地址设置为WORD指针
  • 将pChar指针用作数组并将其递增到第二个 字节[1]
    如果您不使用国际字符集,则此功能有效。

    我保证它不会显示“const chart*”。你在编故事。不要那样做。在您的计算机上发布实际发生的事情。对不起,是的,这是一个打字错误,更新:)@KerrekSB有些人无法复制和粘贴,所以他们手工键入错误消息并进行打字。它并不总是“编造东西”。好的,谢谢你的编译。工作也很好,除了特殊的字符,如!“£$%^&*(),shift,enter,backspace等。你知道我怎样才能把它们打印出来吗?谢谢。这就是我说的键盘状态。
    LPWORD wCharacter;
    char *pChar = (char*)wCharacter;
    
    printf("%c", pChar[1]);