我正在尝试将ALT-S发送到对话框提示,以便使用PostMessage保存文件:
PostMessage(h, WM_KEYDOWN, VK_MENU, 0);
PostMessage(h, WM_KEYDOWN, ord('S'), 0);
PostMessage(h, WM_KEYUP, ord('S'), 0);
PostMessage(h, WM_KEYUP, VK_MENU, 0);
但它不起作用。它发送两个键,但就好像对话框无法识别ALT条件,并将其作为普通的S字符处理。
我做了很多阅读,包括this(产生错误),似乎我需要在lparam中做一些事情来表示ALT被压抑了。一些消息来源说0x20000000,但这也不起作用。
SendInput,keybd_event等对我来说不起作用,因为对话框不会对焦。
我很难过会欣赏一些见解。
答案 0 :(得分:1)
请改为尝试:
PostMessage(h, WM_SYSKEYDOWN, VK_MENU, 0);
PostMessage(h, WM_KEYDOWN, ord('S'), 0);
PostMessage(h, WM_KEYUP, ord('S'), 0);
PostMessage(h, WM_SYSKEYUP, VK_MENU, 0);
答案 1 :(得分:0)
到目前为止,按下另一个表单上的按钮的最简单方法是发送WM_COMMAND
消息而不是伪造输入。伪造投入是一件棘手的事情,往往无法做到你想要的。
将WM_COMMAND
发送到顶级窗口。将通知代码BN_CLICKED
传递为wParam
,将按钮ID传递为lParam
。
您可以使用FindWindow
或EnumWindows
来获取顶级窗口的句柄。像Spy ++这样的程序可以让你找到目标按钮的ID。