Я пытался отправить нажатия клавиш в окно блокнота в 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
срабатывает) - person lurker   schedule 08.06.2013WM_PASTE
сообщение вместо этого? - person TLama   schedule 08.06.2013SendMessage(H, WM_PASTE, 0, 0);
, но безуспешно. - person Benjamin Weiss   schedule 08.06.2013