如何在自己写的程序控制其他程序的操作。200分(200分)

  • 主题发起人 主题发起人 xsqxsq111
  • 开始时间 开始时间
X

xsqxsq111

Unregistered / Unconfirmed
GUEST, unregistred user!
例如、我想在我的程序中打开写字板,模拟键盘输入然后将该文件保存。
另请吃大餐一顿
 
第一步,打开记事本并模拟输入:

procedure TMainForm.Button1Click(Sender: TObject);
var
wnd: Hwnd;
s: string;
i: integer;
begin
WinExec('notepad.exe',SW_SHOW);
wnd := FindWindow('notepad', nil);
if wnd<>0 then
begin
wnd := FindWindowEx(wnd,0,'Edit',nil);
s := 'hello, world.';
for i := 1 to length(s) do
SendMessage(wnd, WM_CHAR, ord(s), 0);
end
else ShowMessage('notepad not find');
end;
 
shellapi+keybrdevent
 
//打开记事本并模拟输入'hello, world.',然后保存为 S.txt ,默认保存路径好象是桌面。

procedure TMainForm.Button2Click(Sender: TObject);
var
wnd: Hwnd;
s: string;
i: integer;
begin
WinExec('notepad.exe',SW_SHOW);

wnd := FindWindow('notepad', nil);
if wnd<>0 then
begin
wnd := FindWindowEx(wnd,0,'Edit',nil);
s := 'hello, world.';
for i := 1 to length(s) do
SendMessage(wnd, WM_CHAR, ord(s), 0);
end
else ShowMessage('notepad not find');

keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), 0, 0);
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);

wnd := FindWindow('#32770', nil);
if wnd<>0 then
begin
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), 0, 0);
keybd_event(ord('S'), MapVirtualKey(ord('S'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(13, MapVirtualKey(13, 0), 0, 0);
keybd_event(13, MapVirtualKey(13, 0), KEYEVENTF_KEYUP, 0);
end
else ShowMessage('Save Dialog not found');

end;
 
zw84611兄,请问如何模拟鼠标的操作。
如:我打开一个窗口之后,要将鼠标移到(100,100)位置,按下左键,再移鼠标到(200,200)
输入‘11111’,再移鼠标到(300,200),按鼠标左键。如何处理呢?
多谢!

 
//特定窗口的特定位置按下鼠标左键
procedure TForm1.Button2Click(Sender: TObject);
var
Wnd: HWND;
WinPos: TRect;
xy: TPoint;
begin

Wnd := FindWindow('TAppBuilder',nil); //找到Delphi IDE 的 handle
if Wnd <> 0 then
begin
SetForegroundWindow(Wnd);
GetWindowRect(Wnd,WinPos);
xy.x := WinPos.Left + 10; //(10,10)是窗口内的相对位置。
xy.y := WinPos.Top + 10;
SetCursorPos(xy.x,xy.y);
Mouse_Event(MOUSEEVENTF_LEFTDown,xy.x,xy.y,0,0);
Mouse_Event(MOUSEEVENTF_LEFTUP, xy.x,xy.y,0,0);
end
else ShowMessage('window not found');

end;
 
zw84611兄,这里先谢过了。
键盘输入和控制没有问题,但我可能将我要说的简单化了。我做了一个样例,希望能从程序
外控制按键的输入。能否请教你如何实现。
样例程序在xsqxsq111@163.com,密码为xsq0520.
再谢过




 
谢谢 zw84611
 
后退
顶部