C++:SendMessage()发送消息函数
1. 函数概述
SendMessage是一个Windows API函数,用于将指定的消息发送到一个或多个窗口。它会等待消息被处理完成后才返回,这意味着它是一种同步的消息发送方式。该函数在进程内或进程间通信中发挥重要作用,特别是在需要确保消息被目标窗口接收并处理的情况下。例如,当需要强制一个窗口立即执行某个操作(如更新显示内容)时,可以使用SendMessage发送相关消息。
2. 函数原型和参数
函数原型如下:
1 2 3 4 5 6 | LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); |
参数说明:
hWnd:目标窗口的句柄。这是消息要发送到的窗口的标识符,用于确定消息的接收者。如果是发送给主窗口,可以使用主窗口的句柄;如果是发送给某个子窗口(如对话框中的按钮),则需要使用该子窗口的句柄。
Msg:要发送的消息的标识符。这些消息标识符是Windows系统预定义的常量,用于表示各种操作或事件。例如,WM_SETTEXT消息用于设置窗口的文本内容,WM_COMMAND消息常用于通知窗口关于菜单选择、按钮点击等事件。
wParam:消息的附加信息,其具体含义取决于Msg参数所指定的消息类型。例如,对于WM_COMMAND消息,wParam的低字节可能包含控件的标识符;对于WM_KEYDOWN消息(键盘按键按下时发送),wParam包含按下的键的虚拟键码。
lParam:也是消息的附加信息,其含义同样依赖于消息类型。例如,在WM_MOUSEMOVE消息中,lParam包含了鼠标的位置信息;在WM_SETTEXT消息中,lParam指向包含新文本内容的字符串。
3. 返回值
函数返回值是LRESULT类型,返回的是目标窗口过程处理消息后的结果。返回值的具体含义取决于发送的消息类型。例如,对于WM_GETTEXT消息(获取窗口文本),返回值是实际复制到缓冲区中的字符数;对于WM_QUERYENDSESSION消息(询问是否可以结束会话),返回值非零表示允许结束会话,零表示禁止。
4. 使用示例
以下示例展示了如何使用SendMessage函数设置一个编辑框(Edit控件)的文本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <windows.h> #include <iostream> int main() { HWND hEdit = FindWindowEx(NULL, NULL, "Edit" , NULL); if (hEdit!= NULL) { const char * newText = "Hello, World!" ; // 发送WM_SETTEXT消息来设置编辑框的文本 LRESULT result = SendMessage(hEdit, WM_SETTEXT, 0, ( LPARAM )newText); if (result!= 0) { std::cout << "Text set successfully." << std::endl; } } else { std::cout << "Edit control not found." << std::endl; } return 0; } |
在这个示例中,首先使用FindWindowEx函数查找一个编辑框控件的句柄。如果找到句柄(hEdit不为NULL),就使用SendMessage发送WM_SETTEXT消息来设置编辑框的文本内容。根据SendMessage的返回值判断是否设置成功。如果返回值不为零,通常表示消息被成功处理,文本设置成功。
C++编程API库
- C++:API(仅展示平时要用的)
- C++:Win32 桌面应用程序
- C++:WinMain()函数
- C++:WNDCLASSEX 窗口类结构体
- C++:LoadIcon()函数
- C++:LoadCursor()函数
- C++:RegisterClassEx()函数
- C++:CreateWindowEx()函数
- C++:ShowWindow()函数
- C++:UpdateWindow()函数
- C++:GetMessage()函数
- C++:MSG 消息结构体
- C++:TranslateMessage()函数
- C++:DispatchMessage()函数
- C++:WndProc()窗口过程函数
- C++:GetModuleHandle()函数
- C++:DestroyWindow()函数
- C++:DefWindowProc()函数
- C++:SendMessage()发送消息函数
- C++:FindWindow()函数
- C++:FindWindowEx()函数
- C++:EnumWindows()函数
- C++:EnumWindowsProc()函数
- C++:GetWindowText()函数
- C++:SetWindowText()函数
- C++:GetDlgltem()取控件句柄函数
- C++:GetDlgCtrllD()取控件ID函数
- C++:GetDlgltemText()取对话框控件文本函数
- C++:SetDlgltemText()设置对话框控件文本函数
- C++:GetDlgltemlnt()取对话框控件整数函数
- C++:SetDlgltemlnt()设置对话框控件的整数值函数
- C++:DialogBox()模态对话框函数
- C++:DialogBoxParam()创建模态对话框函数
- C++:MessageBox()显示消息框函数
- C++:DefDlgProc()对话框过程函数
- C++:MessageBoxIndirect()显示消息框函数
- C++:EndDialog()结束模态对话框函数
- C++:OpenClipboard()打开剪贴板函数
- C++:GetClipboardData()获取剪贴板数据函数
- C++:SetClipboardData()设置剪贴板数据函数