对不起愚蠢的问题,但解决了这三天没有看到任何进展。
我有一个库,通过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 ++变体,但两种变体行为相同 - 在我的机器上运行良好,但在其他机器上运行不正常)
是否有人遇到类似问题并知道解决方案需要做什么?
当然,我尝试以管理员身份运行该程序,但没有什么不同。
非常感谢
答案 0 :(得分:0)
可能有一个应用程序窗口,它接收超出另一个窗口的击键,没有问题,但控件不完全可见。 帮助将目标widnow带到foregroud,使用ShowWindow应用于父窗口句柄,如下所示:
[CLANG Error] Unit3.cpp(15): no matching function for call to 'EnumWindows'
winuser.h(9766): candidate function not viable: no known conversion from '<lambda at Unit3.cpp:15:14>' to 'WNDENUMPROC' (aka 'BOOL (*)(HWND, LPARAM) __attribute__((stdcall))') for 1st argument
然后发送所需的击键。