将ALT-S发送到窗口

时间:2012-06-28 13:58:28

标签: delphi keyboard-events

我正在尝试将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等对我来说不起作用,因为对话框不会对焦。

我很难过会欣赏一些见解。

2 个答案:

答案 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

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