【发布时间】:2013-06-04 20:10:27
【问题描述】:
我一直在尝试将击键发送到 Delphi 中的记事本窗口。 这是我到目前为止的代码:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
windows,
messages;
var
H : HWND;
begin
H := FindWindowA(NIL, 'Untitled - Notepad');
if H <> 0 then begin
SendMessage(H, WM_KEYDOWN, VK_CONTROL, 1);
SendMessage(H, WM_KEYDOWN, MapVirtualKey(ord('v'), 0), 1);
SendMessage(H, WM_KEYUP, MapVirtualKey(ord('v'), 0), 1);
SendMessage(H, WM_KEYUP, VK_CONTROL, 1);
end;
end.
我也找到了这个例子:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
windows,
messages;
var
H : HWND;
I : Integer;
s : String;
begin
h := FindWindowA(NIL, 'Untitled - Notepad');
if h <> 0 then
begin
h := FindWindowEx(h, 0, 'Edit', nil);
s := 'Hello';
for i := 1 to Length(s) do
SendMessage(h, WM_CHAR, Word(s[i]), 0);
PostMessage(h, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(h, WM_KEYDOWN, VK_SPACE, 0);
end;
end.
如何模拟/发送 CTRL+V 到父窗口,以便它也可以与其他应用程序一起使用? 并非每个应用程序都具有与记事本相同的类名和控件。
【问题讨论】:
-
你知道手柄是否正确吗? (例如,如果您的
if触发,则会弹出一条消息) -
你为什么不发
WM_PASTE消息呢? -
它找到窗口的句柄并且它是有效的。我也试过
SendMessage(H, WM_PASTE, 0, 0);,但没有成功。
标签: delphi winapi keyboard keystroke