3

我正在尝试将 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 字符处理。

我做了很多阅读,包括这个(这会产生错误),看来我需要在 lparam 中做一些事情来表明 ALT 被抑制了。一些消息来源说 0x20000000 但这也不起作用。

SendInput、keybd_event 等对我不起作用,因为对话框不会成为焦点。

我很困惑会很感激一些见解。

4

2 回答 2

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);
于 2012-06-28T19:58:56.960 回答
0

到目前为止,在另一个表单上按下按钮的最简单方法是发送WM_COMMAND消息而不是伪造输入。伪造输入是一项棘手的工作,并且经常无法按照您的意愿行事。

发送WM_COMMAND到顶层窗口。将通知代码传递BN_CLICKEDwParam并将按钮 ID 传递为lParam

您可以使用FindWindowEnumWindows来获取顶级窗口的句柄。像 Spy++ 这样的程序可以让您找出目标按钮的 ID。

于 2012-06-29T18:05:07.477 回答