发送键盘命令

时间:2010-08-05 00:46:45

标签: c++ winapi

我如何发送键盘命令,以便按“Y”,然后按Enter键。感谢

3 个答案:

答案 0 :(得分:2)

以下是关于此事的CodeProject文章:http://www.codeproject.com/KB/cpp/sendkeys_cpp_Article.aspx

一篇描述如何做的msdn文章: http://msdn.microsoft.com/en-us/library/ms171548.aspx

另一个CodeProject文章描述了如何使用keybd_event(): http://www.codeproject.com/KB/system/keyboard.aspx

不确定这是如何工作的(我不是C ++开发人员),但它应该将字母“a”发送到记事本(你需要打开一个名为“test.txt”的文件):来自Expert的交换(我在更正中添加了,但我没有尝试运行它):http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_21119534.html

#define _WIN32_WINNT 0x0501
#include <windows.h>
#include <iostream>

using namespace std;

void main()
{
char end;
HWND windowHandle = FindWindow(0, "test.txt - Notepad");
INPUT *key;
if(windowHandle == NULL)
 cout << "not found";
SetForegroundWindow(windowHandle);
Sleep(1000);

key = new INPUT;
key->type = INPUT_KEYBOARD;
key->ki.wVk = 41;
key->ki.dwFlags = 0;
key->ki.time = 0;
key->ki.wScan = 0;
key->ki.dwExtraInfo = 0;

SendInput(1,key,sizeof(INPUT));

key->ki.dwExtraInfo = KEYEVENTF_KEYUP;

SendInput(1,key,sizeof(INPUT));
cout << "key inputted";
cin >> end;
}

答案 1 :(得分:1)

  

我做一个简单的悬挂男人,当他们到达最后一个字母时,如果它们到目前为止是完美的,它会为它们输入

如果您正在尝试模拟键盘按下以实现此功能,那么这种方式会变得太复杂。

据推测,在你的代码中你有类似的东西:

void OnKeyPress(char key)
{
    // handle the key: is it correct, etc?
}

您需要做的就是在他们到达最后一个字母时直接调用该方法并且到目前为止是完美的。您根本不需要“模拟”键盘事件。

答案 2 :(得分:0)

使用类似的东西:

int main()
{
char ans;
cout << "question";
cin >> ans;
cin.get();
if(ans==y)
{
do something;
}
cin.get();
return0;
}

这将使用cin&gt;&gt;将变量'ans'设置为您的输入功能