+ -
当前位置:首页 → 问答吧 → SendMessage没有效果,PostMessage去有效果,我哪里用错了?

SendMessage没有效果,PostMessage去有效果,我哪里用错了?

时间:2011-12-23

来源:互联网

代码如下。
C/C++ code

    CWnd *pCWnd;
    pCWnd=FindWindow(NULL,"无标题 - 记事本");        //公式
    if(hWnd)
    {
        pCWnd->SetWindowPos(NULL, 0, 0, 100, 100, SWP_NOSIZE);
        Sleep(1000);
        pCWnd->SendMessage(WM_KEYDOWN, VK_F1, 0);
        pCWnd->SendMessage(WM_KEYUP, VK_F1, 0);
    }
    else
    {
        AfxMessageBox("没有找到这个窗口");
    }



目的是在个窗口按下F1键。

另附问:
为什么VK_F1等键能用,而VK_0之类的键,发送不过去呢?还是别的原因?

作者: zjq9931   发布时间: 2011-12-23

你要先明白PostMessage和SendMessage的区别 ,一个是阻塞的一个是非阻塞的

而你说的 VK_F1 VK_0两个,一个可能是已经实现的,另一个需要自己实现消息映射

作者: hezhe1008   发布时间: 2011-12-23

VK_F1和VK_0的有区别是因为VK_0必须在记事本的EDIT子窗口下才有输入焦点,也就是说发送VK_0按键消息的窗口句柄是错误的。
发送VK_0则要先获得记事本EDIT子窗口的句柄,然后把VK_0的按键消息发送给它就可以了

作者: a7320760   发布时间: 2011-12-23

C/C++ code

#include <iostream>
#include <windows.h>
using namespace std;

int main(int argc, char *argv[])
{
    
    HWND hWnd = FindWindow(NULL, "无标题 - 记事本");
    HWND hEdit = FindWindowEx(hWnd, NULL, "Edit", NULL);
    
    
    PostMessage(hEdit, WM_KEYDOWN, 0x41, 0);
    PostMessage(hEdit, WM_KEYUP, 0x41, 0);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}


我写的一段代码,但是不知道为什么每次都是两个a(0x41的代码是a)

作者: a7320760   发布时间: 2011-12-23