線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1479
推到 Plurk!
推到 Facebook!

模拟鼠标键盘输入使程式自动化

 
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-13 16:50:01 IP:222.93.xxx.xxx 未訂閱
前者有关于自动弹开DatetimePicker问题的讨论,我提出了三种可能的方法,不过每种方法都有优缺点。 现在讨论的方法可以作为第四种程式自动化的方法,不过使用的前提是必须知道被控程式的控件位置,如何从外部程式获取被控程式的控件位置需要各位大大给点建议。我这里的程式是在内部控制自己的控件进行动作。请各位大大批评指正。
procedure TForm1.Button2Click(Sender: TObject);
var
  mpt: TPoint;
  mInput: tagInput;
  mi: tagMouseInput;
begin
  mpt:=DateTimePicker1.ClientToScreen(Point(DatetimePicker1.Width-5,DatetimePicker1.Height div 2));
  SetCursorPos(mpt.X,mpt.Y);
  mi.dx:=0;
  mi.dy:=0;
  mi.time:=0;
  mi.dwFlags:=MOUSEEVENTF_LEFTDOWN;
  mi.mouseData:=0;
  mInput.mi:=mi;
  mInput.Itype:=INPUT_MOUSE;
  SendInput(1,mInput,SizeOf(mInput));
  mi.dx:=0;
  mi.dy:=30;
  mi.dwFlags:=MOUSEEVENTF_MOVE;
  mInput.mi:=mi;
  SendInput(1,mInput,SizeOf(mInput));
end;
代码中给出的是模拟鼠标的输入, 如果是模拟键盘输入应该使用mInput.ki域,ki是tagKeyboardInput记录,同样需要设定ki.dwFlags,此时mInput.Itype应为INPUT_KEYBOARD。 Justin Shen ================================= 如果能帮到您,我会很开心;如果能得到您的帮助,是我的荣幸 =================================
------
====================
我为一切作努力!
Justin Shen

justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-14 20:59:34 IP:221.169.xxx.xxx 未訂閱
ok了,感謝    但是依照您的方法,滑鼠會一直保持按下的狀態 所以應該還要讓他UP才行 我是用BCB,code如下:
    TPoint p;
    p=DateTimePicker1->ClientToScreen(Point(DateTimePicker1->Width-10, DateTimePicker1->Height/2));
    SetCursorPos(p.x, p.y);
    INPUT t[2];
    MOUSEINPUT m;
    m.dx = 0;
    m.dy = 0;
    m.mouseData = 0;
    m.dwFlags = MOUSEEVENTF_LEFTDOWN;
    m.time = 0;
    m.dwExtraInfo = GetMessageExtraInfo();
    t[0].type = INPUT_MOUSE;
    t[0].mi = m;        MOUSEINPUT m2;
    m2.dx = 0;
    m2.dy = 40;
    m2.mouseData = 0;
    m2.dwFlags = MOUSEEVENTF_LEFTUP;
    m2.time = 0;
    m2.dwExtraInfo = GetMessageExtraInfo();
    t[1].type = INPUT_MOUSE;
    t[1].mi = m2;
    SendInput(2, t, sizeof(INPUT));
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-14 22:42:33 IP:222.93.xxx.xxx 未訂閱
是了,不过为了表现Click事件应该在同一个点发出连续的down/up; 幸好time=0且DatetimePicker不支持DrapDrop,否则
------
====================
我为一切作努力!
Justin Shen

系統時間:2024-11-21 21:24:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!