[英]Failed to sent virtual key “Alt+Space” using “SendInput()” in C with GCC/Mingw32 Compiler?
I tried to pop up the menu using Windows API
: SendInput()
, but totally failed every time. 我试图使用
Windows API
弹出菜单: SendInput()
,但是每次都完全失败。
#include <windows.h>
int main (void)
{
INPUT Alt_Space[4] = {0};
Alt_Space[0].type = INPUT_KEYBOARD; // Alt Key down
Alt_Space[0].ki.wVk = VK_MENU;
Alt_Space[1].type = INPUT_KEYBOARD; // Space Key down
Alt_Space[1].ki.wVk = VK_SPACE;
Alt_Space[2].type = INPUT_KEYBOARD; // Space Key up
Alt_Space[2].ki.dwFlags = KEYEVENTF_KEYUP;
Alt_Space[2].ki.wVk = VK_SPACE;
Alt_Space[3].type = INPUT_KEYBOARD; // Alt Key up
Alt_Space[3].ki.dwFlags = KEYEVENTF_KEYUP;
Alt_Space[3].ki.wVk = VK_MENU;
SendInput ( 4, Alt_Space, sizeof(INPUT));
system ("pause");
}
Can anyone know why this code failed to pop up the menu? 谁能知道为什么此代码未能弹出菜单? Thanks.
谢谢。
Compile Command: 编译命令:
mingw32-gcc.exe -O3 -c "Console.c" -o "Console.o"
mingw32-gcc.exe -o "Console.exe" "Console.o"
Though I didn't use SendInput()
, keybd_event()
works perfectly with GCC/Mingw32. 尽管我没有使用
SendInput()
,但keybd_event()
与GCC / Mingw32完美兼容。
I answered my own question, and leave it in order to provide some idea to whom have the same problem. 我回答了我自己的问题,并留下它是为了向遇到相同问题的人提供一些想法。
// Event
#define KEYEVENTF_KEYDOWN 0x0000
// ALT + SPACE
#define SCAN_CODE_ALT 0x38
#define SCAN_CODE_SPACE 0x39
keybd_event ( VK_MENU , SCAN_CODE_ALT , KEYEVENTF_KEYDOWN, 0);
keybd_event ( VK_SPACE , SCAN_CODE_SPACE, KEYEVENTF_KEYDOWN, 0);
keybd_event ( VK_SPACE , SCAN_CODE_SPACE, KEYEVENTF_KEYUP , 0);
keybd_event ( VK_MENU , SCAN_CODE_ALT , KEYEVENTF_KEYUP , 0);
// UP * 2
#define SCAN_CODE_UP 0x48
keybd_event ( VK_UP , SCAN_CODE_UP , KEYEVENTF_KEYDOWN, 0);
keybd_event ( VK_UP , SCAN_CODE_UP , KEYEVENTF_KEYUP , 0);
keybd_event ( VK_UP , SCAN_CODE_UP , KEYEVENTF_KEYDOWN, 0);
keybd_event ( VK_UP , SCAN_CODE_UP , KEYEVENTF_KEYUP , 0);
// Enter
#define SCAN_CODE_ENTER 0x1C
keybd_event ( VK_RETURN, SCAN_CODE_ENTER, KEYEVENTF_KEYUP , 0);
keybd_event ( VK_RETURN, SCAN_CODE_ENTER, KEYEVENTF_KEYDOWN, 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.