【发布时间】:2015-09-02 11:38:21
【问题描述】:
对不起,愚蠢的问题,但解决了这三天,没有看到任何进展。
我有一个库,它通过 Win32 API 发送有关鼠标点击和 SendInput 传递的键盘敲击序列的消息。
在我的计算机上一切正常(以及新安装的 W7 作为虚拟机),但在某些计算机上(我的客户和妻子的计算机)完全忽略 SendInput 并且不发送击键序列。
以下是部分相关代码:
extern "C" __declspec(dllexport) void __stdcall PutKeystroke(int times, BOOL isDown)
{
INPUT ip = {0};
ip.type = INPUT_KEYBOARD;
ip.ki.wVk =isDown? VK_DOWN : VK_UP;
//std::vector<INPUT> ips;
//ips.reserve((times*2)+2);
INPUT ips[100] = {0};
for(int i = 0; i < times*2; i+=2)
{
ip.ki.dwFlags = 0;
ips[i] = ip;
//ips.push_back(ip);
ip.ki.dwFlags = KEYEVENTF_KEYUP;
//ips.push_back(ip);
ips[i+1] = ip;
}
ip.ki.dwFlags = 0;
ip.ki.wVk = VK_RETURN;
ips[times*2] = ip;
//ips.push_back(ip);
ip.ki.dwFlags = KEYEVENTF_KEYUP;
ips[(times*2)+1] = ip;
//ips.push_back(ip);
SendInput((times*2)+2, &ips[0], sizeof(INPUT));
}
(注释行是 C++ 变体,但两种变体的行为相同 - 在我的机器上运行良好,但在其他机器上不行)
这里有没有人遇到过类似的问题并且知道解决方案需要做什么?
当然,我尝试以管理员身份运行程序,但没有什么不同。
非常感谢
【问题讨论】:
-
你不能使用自动化来代替伪造输入吗?
-
您可能正在寻找UI Automation。