PostMessaged 发过去没有效果可能是后面两个参数的问题 不知道怎么填
::PostMessage(CPublic::g_hwnd, WM_SETFOCUS, 0, 0); 后两个参数怎么填
::PostMessage(CPublic::g_hwnd, WM_ENABLE, 0, 0);后两个参数怎么填
::PostMessage(CPublic::g_hwnd, WM_KEYDOWN, VK_RETURN, keyData);
我这样测试过:
我在发送PostMessage前先sleep(5000)
之后手动调整整好焦点到对应的按钮上
5秒到了之后::PostMessage(CPublic::g_hwnd, WM_KEYDOWN, VK_RETURN, keyData);
这样是成功的
但是用了WM_SETFOCUS 和 WM_ENABLE 或者不用 , 都是不成功的 所以才想到后面两个参数的问题
感觉需要先把焦点弄到对应按钮上
如果不是参数问题,也是ENABLE,再SETFOCUS的先后那应该怎么弄了
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
PostMessage函数的第三个和第四个参数分别表示wParam和lParam,它们的含义取决于消息的类型。下面是对您提到的三个消息类型的解释:
1. WM_SETFOCUS
该消息用于设置窗口焦点。第三个参数应该是0,表示将焦点设置为接收消息的窗口。第四个参数应该是0,因为它不需要任何额外的信息。所以,正确的调用方式应该是:
::PostMessage(CPublic::g_hwnd, WM_SETFOCUS, 0, 0);
2. WM_ENABLE
该消息用于启用或禁用窗口。第三个参数应该是0或1,表示启用或禁用窗口。第四个参数也应该是0,因为它不需要任何额外的信息。所以,正确的调用方式应该是:
::PostMessage(CPublic::g_hwnd, WM_ENABLE, 0, 0);
3. WM_KEYDOWN
该消息用于发送一个键盘按键消息。第三个参数应该是发送的键盘按键的虚拟键码,例如VK_RETURN表示回车键。第四个参数应该是0或者一个包含一些额外信息的值。所以,正确的调用方式应该是:
::PostMessage(CPublic::g_hwnd, WM_KEYDOWN, VK_RETURN, 0);
在您的情况下,如果您想要在发送WM_SETFOCUS或WM_ENABLE消息之前先将焦点放在对应的按钮上,可以使用SendMessage函数发送WM_ACTIVATE消息来激活窗口和设置焦点。例如:
// 激活窗口并设置焦点在按钮上
::SendMessage(CPublic::g_hwnd, WM_ACTIVATE, WA_ACTIVE, 0);
::SetFocus(CPublic::g_button_hwnd);
// 发送WM_SETFOCUS消息
::PostMessage(CPublic::g_hwnd, WM_SETFOCUS, 0, 0);
// 发送WM_ENABLE消息
::PostMessage(CPublic::g_hwnd, WM_ENABLE, 1, 0);
// 发送WM_KEYDOWN消息
::PostMessage(CPublic::g_hwnd, WM_KEYDOWN, VK_RETURN, 0);
希望以上信息能够帮助您解决问题。如果您仍有疑问,请提供更多详细信息,以便更好地理解问题并提供更准确的解决方案。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
PostMessage 函数的四个参数分别是:
指定要接收消息的窗口的句柄;
指定要发送的消息类型;
指定与消息相关的附加信息,具体取决于消息类型;
指定与消息相关的附加信息,具体取决于消息类型。
对于您提供的三个消息类型,它们的第三和第四个参数的具体含义如下:
对于 WM_SETFOCUS 消息,第三个参数是未使用的,第四个参数也是未使用的;
对于 WM_ENABLE 消息,第三个参数是未使用的,第四个参数也是未使用的;
对于 WM_KEYDOWN 消息,第三个参数是按下的键的虚拟键码,第四个参数是与键盘消息一起发送的附加信息。
先ENABLE,再SETFOCUS试试