C#下用API 跨进程控制别的窗体的TreeView节点的展开与点击
如何在C#下用API 跨进程控制别的窗体的TreeView节点的展开与点击.
网上搜索是用SendMessage来实现,可是具体不知道怎样写!
高手帮帮忙啊!!
[解决办法]
帮顶
[解决办法]
up
[解决办法]
偶不懂,帮顶!!!!要是有源码,请给我一份xsp9488278@126.com,谢了~_~
[解决办法]
太高深了……
一边搞个发送命令(带个参数) 一个搞个接收命令 按参数展开??/
[解决办法]
你只要知道那个进程中的TreeView的句柄,且知道是第几个节点,就可以用如下的方法来展开这个节点(方法中只限第一层切点,如果要其它层的可以按索引再修改,这只是个参考):
[DllImport( "user32.dll ", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
private void button4_Click(object sender, EventArgs e)
{
ExpandNode(2);
}
private void ExpandNode(int index)
{
SendMessage(this.treeView1.Handle, 0x1102, 2, this.treeView1.Nodes[index].Handle);
}
[解决办法]
把上面的this.treeView1.Handle换成相应的句柄就可以了。
[解决办法]
学习~
[解决办法]
treeView tree1 = new treeView ( "根节点名 ")
以上是treeView 取得句柄的代码
Var tree = new WebFXTree( " <%=rootname%> ")
以上是WebTree取得句柄的代码
其他的跨进程通信的方法你应该解决了吧
[解决办法]
你可以参考下面的代码(仅仅参考):
private void button1_Click(object sender, EventArgs e)
{
IntPtr ptr = (IntPtr)int.Parse(this.textBox1.Text, System.Globalization.NumberStyles.HexNumber);
POINT pt = new POINT(Control.MousePosition);
int i = ScreenToClient(ptr, pt);
IntPtr handle = GetNodeAt(ptr, pt.X, pt.Y);//按位置获取鼠标下节点
if (handle != null)
{
SendMessage(ptr, 0x1102, 2, handle);//展开节点
}
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public class TV_HITTESTINFO
{
public int pt_x;
public int pt_y;
public int flags;
public IntPtr hItem;
public TV_HITTESTINFO()
{
this.hItem = IntPtr.Zero;
}
}
[StructLayout(LayoutKind.Sequential)]
public class POINT
{
public int X;
public int Y;
public POINT(Point pt)
{
this.X = pt.X;
this.Y = pt.Y;
}
public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
[DllImport( "user32.dll ", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);
[DllImport( "user32.dll ", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, TV_HITTESTINFO lParam);
[DllImport( "user32.dll ", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern int ScreenToClient(IntPtr hWnd, [In, Out] POINT pt);
public IntPtr GetNodeAt(IntPtr tvwPtr, int x, int y)
{
TV_HITTESTINFO lParam = new TV_HITTESTINFO();
lParam.pt_x = x;
lParam.pt_y = y;
IntPtr handle = SendMessage(tvwPtr, 0x1111, 0, lParam);
return handle;
}
[解决办法]
路过
------解决方案--------------------
帮顶
[解决办法]
好贴,没空写代码,帮顶
觉得平民百姓写得不错,或许能行
[解决办法]
UP
[解决办法]
不明白...
[解决办法]
顶+学习!
[解决办法]
支持平民百姓,不过是不是应该加上
using System.Runtime.InteropServices?
[解决办法]
帮顶
[解决办法]
帮顶,主要是我也不懂WIN32编程.如果懂就好使了
[解决办法]
mark
[解决办法]
不要这么复杂,用remoting就可以搞定了,两个程序建立连接,然后弄了监测线程就可以了
[解决办法]
学习
[解决办法]
Mark!
[解决办法]
可以结了,答案很明朗了!
[解决办法]
UP