c - 无法使用 GCC/Mingw32 编译器在 C 中使用 "Alt+Space"发送虚拟 key "SendInput()"?

标签 c winapi console-application mingw32 virtual-keyboard

我尝试使用 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");
}

有谁知道这段代码弹出菜单失败的原因吗?谢谢。

编译命令:

 mingw32-gcc.exe -O3 -c "Console.c" -o "Console.o"
 mingw32-gcc.exe -o "Console.exe" "Console.o"

最佳答案

虽然我没有使用 SendInput(),但 keybd_event() 与 GCC/Mingw32 完美配合。

我回答了我自己的问题,并留下它以便为遇到同样问题的人提供一些想法。

// 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);

关于c - 无法使用 GCC/Mingw32 编译器在 C 中使用 "Alt+Space"发送虚拟 key "SendInput()"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20150736/

相关文章:

vb.net - 在VB.NET中如何循环直到用户输入的变量为整数?

c - 定义为宏的标准库函数的参数类型错误

C - 这些函数会产生垃圾吗?

c++ GDI打印导致系统卡住

c++ - 来自文本字段Win32 API的整数值

.net - 什么是编译为 native Windows 代码的优秀轻量级编程语言?

c - Erlang NIF 从单个进程在内存中存储结构

在 C 中将二维数组中的单个元素复制并比较到另一个数组

java - 在 Java 控制台应用程序中执行 KeyListener

linux - gpg加密和解密