请问这样的控件句柄怎么取得并发送按键?100分求救,谢谢。(100分)

  • 主题发起人 主题发起人 liuer
  • 开始时间 开始时间
L

liuer

Unregistered / Unconfirmed
GUEST, unregistred user!
我们在查找QQ用户后,会出现一个用户列表框,我们选中其中一个用户,就可以查看他的资料<br><br>请问这个用户列表框的句柄如何取得?取得后如何让他自动选择不同的用户(向从上往下的顺序)选择?<br>谢谢了。
 
procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; Hwnd: THandle;<br>&nbsp; S: string;<br>&nbsp; Count, i: Integer;<br>begin<br>&nbsp; //假设另一个程序的窗口的类名是TForm1,ListBox的类名是TListBox,注意这里要做修改<br>&nbsp; Hwnd := FindWindowEx(FindWindow('TForm1',nil),0,'TListBox',nil);<br>&nbsp; if Hwnd = 0 then ShowMessage('not found!');<br><br>&nbsp; Count := SendMessage(Hwnd, LB_GETCOUNT, 0, 0);<br>&nbsp; for i := 0 to Count - 1 do SendMessage(Hwnd, LB_SETCURSEL, i, 0);<br>end;
 
窗口类名可以用WinSight32取得
 
Hwnd := FindWindowEx(FindWindow('TForm1',nil),0,'TListBox',nil);<br><br>如何做到程序自动判断对方窗口中控件的类名呢?比如上句中的'TForm1','TListBox',对方程序窗口中<br>的控件类名可能会不同,应该如何做出判断?
 
用SPY++或WinSight32<br>“自动判断”好象不大可能。且只针对某一个固定的程序,其类名是不会变的。<br>
 
可以试试鼠标钩子钩到句柄,然后SendMessage(Handle, WM_KEYDOWN, x, x );
 
楼上朋友,怎么钩啊?讲解一点具体的代码
 
推荐用 EnumWindows 获得主窗口句柄。<br>&nbsp;然后用 EnumChildWindows获得上面的组件句柄,<br>&nbsp;用GetWindowClass(WHandle) 判断某个组件的类名,从而找到这个窗体。<br><br>&nbsp;当然,直接用 WindowFromPoint 和Timer 更加直接,<br>&nbsp;不过要他的鼠标指向这个列表框才行。
 
楼上朋友,用 WindowFromPoint 和Timer 更加直接,<br>&nbsp;不过要他的鼠标指向这个列表框才行。<br><br><br>&nbsp;WindowFromPoint 这个api非要要鼠标指向这点才行吗?
 
不然你如何设置 点 参数呢?因为QQ窗口的位置是不定的,当然这个框的位置就不定了。<br>而我们只能用GetCursorPos来获得鼠标的位置从而找到那个框的位置,<br>然后把鼠标点的位置当成参数传入了!
 
后退
顶部