模拟鼠标键盘输入使程式自动化 |
|
JustinShen
中階會員 發表:22 回覆:104 積分:80 註冊:2003-09-20 發送簡訊給我 |
前者有关于自动弹开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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |