如何用sendmessage发信息点击其他应用程序的Treeview中的item?(200分)

  • 主题发起人 主题发起人 smj_9547
  • 开始时间 开始时间
S

smj_9547

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个程序来控制其他的应用程序(windows程序,但是是任意的编程语言编写)的一个treeview,想用sendmessage来发信息完成,其实Treeview的item已经找到,就是不知道如何发一个点击信息给它.向大家请教,我在线等候!<br>在这里先感谢了!
 
首先被控件的程序必须有接收指定消息的处理过程(比如点击item的处理动作)才可以实现,这样从其它程序才可能根据这个程序的句柄来发送指定消息
 
问题是Treeview的Item是接收不到消息的,而且这是模拟鼠标输入的!对方是用什么<br>软件开发出来的程序,它是如何开发的,程序结构我也不知道哦!
 
这个消息应该发送给那个TreeView而不是TreeItem<br>比如选定一个Item<br>Function TreeView_SelectItem( hTreeView :THandle;HItem: THandle): Bool;
 
zjan521:<br>&nbsp; &nbsp;这个是选中那个ITEM,但是不是点击!因为item不是一个handle来的!
 
有了hTreeView hItem还有什么做不到的?我写的本来就是选定的的<br>点击可以<br>TreeView_GetItemRect得到Rect然后发送鼠标信息
 
能否给一个源代码吗?我想看看是否能成功!
 
//没有检查是否可见 在TreeView1里边添加超过6个的节点<br>unit Unit1;<br><br>interface<br><br>uses<br>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br>&nbsp; Dialogs, StdCtrls, ComCtrls, CommCtrl;<br><br>type<br>&nbsp; TForm1 = class(TForm)<br>&nbsp; &nbsp; TreeView1: TTreeView;<br>&nbsp; &nbsp; Button1: TButton;<br>&nbsp; &nbsp; Button2: TButton;<br>&nbsp; &nbsp; procedure Button1Click(Sender: TObject);<br>&nbsp; &nbsp; procedure Button2Click(Sender: TObject);<br>&nbsp; private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; public<br>&nbsp; &nbsp; { Public declarations }<br>&nbsp; end;<br><br>var<br>&nbsp; Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure ClickItem(hTree: THandle; hItem: HTREEITEM);<br>var<br>&nbsp; aRect: TRect;<br>begin<br>&nbsp; TreeView_GetItemRect(hTree, hItem, aRect, True);<br>&nbsp; SendMessage(hTree, WM_LBUTTONDOWN, 0, (aRect.Left+aRect.Right) div 2 + (aRect.Top+ aRect.Bottom)*$10000 div 2);<br>&nbsp; SendMessage(hTree, WM_LBUTTONUP, 0, (aRect.Left+aRect.Right) div 2 + (aRect.Top+ aRect.Bottom)*$10000 div 2);<br>end;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>begin<br>&nbsp; ClickItem(TreeView1.Handle, TreeView1.Items[1].ItemId);<br>end;<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>begin<br>&nbsp; ClickItem(TreeView1.Handle, TreeView1.Items[5].ItemId);<br>end;<br><br>end.<br>
 
一个程序的时候可以!<br>但是你两个程序之间好象就不行了!<br>最后发现是找Item的arect返回的结果不正确<br>现在正在找原因!
 
多人接受答案了。
 
后退
顶部