2015-11-03 108 views
1

[C++]如何将keydown事件发送到非活动窗口?如何将keydown事件发送到C++中的非活动窗口?

TAB键正常工作。但是我遇到了诸如“Z”等其他键的问题。一直在搜索这一段时间,但到目前为止还没有找到解决办法。

虚拟键0x5A应该是正确的字母Z

#include <iostream> 
#include <Windows.h> 
#include <string> 

LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name 
HWND hWindowHandle = FindWindow(NULL,Target_window_Name); 

int main() 
{ 
    //send TAB DOWN - WORKS FINE 
    SendMessage(hWindowHandle,WM_KEYDOWN,0x09,0); 
    //send TAB DOWN 
    SendMessage(hWindowHandle,WM_KEYUP,0x09,0); 

    //send Z DOWN - NOT WORKING 
    SendMessage(hWindowHandle,WM_KEYDOWN,0x5A,0); 
    //send Z UP 
    SendMessage(hWindowHandle,WM_KEYUP,0x5A,0); 

    return(0); 
} 

PS KeyDown和最多的事件都需要什么,我试图做的。 尝试从几个地方搜索,但到目前为止还没有找到解决方案。

+0

为什么不'PostMessage(hWindowHandle,WM_CHAR,0x5A,0);'? –

+0

感谢您的建议,但我会失去keydown和keyup事件的功能。 –

+0

你可以尝试'SendMessage(hWindowHandle,WM_KEYUP,VK_Z,0);'只是为了确定? –

回答

1

好的。当您按Z键时,使用记事本接收的Spy ++和挂钩消息。这样你就可以模拟/模拟完全相同的东西,所以它看起来就像用户按下键Z一样。 您还需要在记事本中找到Edit类才能发送消息。 所以我做到了这一点,我跑Spy ++,吸引消息,并写了同样的事情。现在它的工作原理:

#include <windows.h> 
#include <iostream> 
#include <string> 



int main() 
{ 
    LPCSTR Target_window_Name = "Untitled - Notepad"; //<- Has to match window name 
    HWND hWindowHandle = FindWindow(NULL,Target_window_Name); 
    HWND EditClass = FindWindowEx(hWindowHandle, NULL, "Edit", NULL); 

    SendMessage(EditClass,WM_KEYDOWN,0x5A,0x002C0001); 
    SendMessage(EditClass,WM_CHAR,0x7A,0x002C0001); 
    SendMessage(EditClass,WM_KEYUP,0x5A,0xC02C0001); 

    return(0); 
} 
+0

现在,它的工作。太糟糕了,我不得不为现在的y结构获取很多新的lparam和wparam值。至少它工作。谢谢! –

+0

没问题。这是Win API的工作方式。您可以接受答案并结束问题。 –

相关问题