SendMessage与PostMessage

来源:互联网 发布:图像处理算法从何学起 编辑:程序博客网 时间:2024/06/16 17:34

这个主题关注两件事

1.SendMessage 和PostMessage 的区别

2.如何用SendMessage,PostMessage使用WM_KEYDOWN消息。找到LParam 和 WParam参数的方法


为了理解SendMessage和PostMessage,请看下面的表


SendMessagePostMessage向窗口发送消息。对于特定的窗口SendMessage函数调用窗口过程,
直到窗口过程已经处理完成后才返回。在和创建特定窗口的线程相关的消息队列中放置一个消息并返回,
不等待线程处理消息顺序的非顺序的同步的异步

如何使用SendMessage,PostMessage

//// ::PostMessage (HWND, WM_KEYDOWN, WPARAM, LPARAM);//
//// ::SendMessage (HWND, WM_KEYDOWN, WPARAM, LPARAM);//

参数

HWND  窗口句柄

WPARAM  参数

LPARAM  参数

如何找到LParam

首先,你必须下载微软的spy++. 如果你安装VS2012, spy++集成

我将做一个例子演示,如何得到VK_KEYDOWN 的LParam 参数值,通过一些基础步骤

现在打开 Notepad 通过 运行->notepad

打开你的 Spy++(在vs2012中)

下一步,点击菜单 Spy->FindWindows,使用红框中的十字架圆圈


拖拽这个十字圆到Notepad的编辑区域


单击 选择消息属性如下面的图片。点击OK按钮


让我们按下回车键在编辑区域,你可以轻松的看到WM_KEYDOWN 消息在Spy++控制板。然后,右击该消息并选择属性,

你可以看到LPARAM和WPARAM值

我的LPARAM 值为:0x0001C001 WPARAM值为 0x0000000D


::PostMessage(hHandle, WM_KEYDOWN, VK_RETURN, 0x001C0001);::SendMessage(hHandle, WM_KEYDOWN, VK_RETURN, 0x001C0001);

使用的源码

使用FindWindowA 和 FindWindowEx

得到句柄的API

HWND hwnd = FindWindowA("Notepad", NULL );HWND hWndChild = ::FindWindowEx(hwnd, NULL, L"Edit", NULL);

* ******************************************************************************* Developer: zidane (huuvi168@gmail.com) Last Modified: 2015-09-01 * ******************************************************************************/BOOL CReadInfomationGameDlg::OnInitDialog(){    CDialog::OnInitDialog();    // Add "About..." menu item to system menu.    // IDM_ABOUTBOX must be in the system command range.    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);    ASSERT(IDM_ABOUTBOX < 0xF000);    CMenu* pSysMenu = GetSystemMenu(FALSE);    if (pSysMenu != NULL)    {        CString strAboutMenu;        strAboutMenu.LoadString(IDS_ABOUTBOX);        if (!strAboutMenu.IsEmpty())        {            pSysMenu->AppendMenu(MF_SEPARATOR);            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);        }    }    // Set the icon for this dialog.  The framework does this automatically    // when the application's main window is not a dialog    SetIcon(m_hIcon, TRUE);   // Set big icon    SetIcon(m_hIcon, FALSE);  // Set small icon        // TODO: Add extra initialization here    CString strCommand[] =      {        L"learn-tech-tips",        L"http://learn-tech-tips.blogspot.com",        L"huuvi168@gmail.com",        L"zidane"        L"http://www.codeproject.com/Tips/1025019/Get-Server-Side-Data-time-with-Cplusplus",    };    int length = sizeof(strCommand) / sizeof(strCommand[0]);    for (int i=0; i<length; i++)        m_cbCommand.AddString(strCommand[i]);      return TRUE;  // return TRUE  unless you set the focus to a control}HWND CReadInfomationGameDlg::GetHandleOfWindow(void){     HWND hwnd = FindWindowA("Windows abc Class", NULL );     if (!hwnd)     {        MessageBox(_T("Window abc not found"), _T("Message"), MB_OK                                                     | MB_ICONINFORMATION);          return NULL;    }      return hwnd;}void CReadInfomationGameDlg::OnBnClickedButtonAddmessage(){    // TODO: Add your control notification handler code here    HWND hHandle = GetHandleOfWindow();    CString strCBText;    int nIndex = m_cbCommand.GetCurSel();     if (nIndex == -1) // cannot found text in comboBox, post NULL    {        TCHAR strTemp[255];          memset(strTemp, 0x00, sizeof(strTemp));        GetDlgItemText(IDC_COMBO_COMMAND, strTemp, sizeof(strTemp));        PostChatMessage(hHandle, strTemp);    }    else // found text in comboBox    {        m_cbCommand.GetLBText(nIndex, strCBText);         PostChatMessage(hHandle, strCBText);    }}void CReadInfomationGameDlg::PostChatMessage(HWND hHandle, LPCTSTR szChatMsg){     ::PostMessage(hHandle, WM_KEYDOWN, VK_RETURN, 0x001C0001);     ::PostMessage(hHandle, WM_KEYDOWN, VK_DOWN, 0x00500001);    while (szChatMsg[0])    {        ::PostMessage(hHandle, WM_CHAR, LOBYTE(szChatMsg[0]),0);        szChatMsg++;    }    ::PostMessage(hHandle, WM_KEYDOWN, VK_RETURN, 0x001C0001);}

示例源码:http://download.csdn.net/detail/zang141588761/9224163



0 0
原创粉丝点击