SendMessage与PostMessage
来源:互联网 发布:图像处理算法从何学起 编辑:程序博客网 时间:2024/06/16 17:34
这个主题关注两件事
1.SendMessage 和PostMessage 的区别
2.如何用SendMessage,PostMessage使用WM_KEYDOWN消息。找到LParam 和 WParam参数的方法
为了理解SendMessage和PostMessage,请看下面的表
SendMessagePostMessage
直到窗口过程已经处理完成后才返回。在和创建特定窗口的线程相关的消息队列中放置一个消息并返回,
不等待线程处理消息顺序的非顺序的同步的异步
如何使用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
- SendMessage 与Postmessage区别
- PostMessage与SendMessage
- sendmessage 与 postmessage
- PostMessage与SendMessage
- SendMessage与PostMessage
- PostMessage 与SendMessage
- SendMessage与PostMessage
- MFC SendMessage与PostMessage
- SendMessage 与Postmessage区别
- SendMessage与PostMessage
- 【MFC】SendMessage与PostMessage
- SendMessage与PostMessage的区别?
- PostMessage 与 SendMessage 函数对比
- postmessage 与sendmessage的区别
- PostMessage与SendMessage的区别
- sendmessage与postmessage的区别
- SendMessage与PostMessage的区别
- postmessage与sendmessage的区别
- 个人笔记 js 04 把子页面把参数传递到父页面的方法
- 7个答案告诉你实时个性化营销的现状未来
- 【Android】ToolBar设置NavigationIcon不显示异常或自定义失败异常
- 安卓中为View添加动画效果(尺寸缩放、透明度渐变、旋转、移动)
- 程序员面试白皮书——互动出版网
- SendMessage与PostMessage
- centos65 folly的编译安装
- 整理一个用matrix对imageview移动和绽放图片的方法
- JAVA操作Excel文件
- nginx源码分析—内存池结构ngx_pool_t及内存管理
- 系统提供的默认activity(拨打电话,发送短信,发送彩信,打开浏览器,发邮件,拍照)...
- 开始写博客啦
- 助程序员快速成长 荐10大在线编程网站
- Mysql学习笔记之常用数据类型