当前位置:编程学习 > C#/ASP.NET >>

ToolbarWindow32如何获得工具条上面类似按钮的句柄

ToolbarWindow32句柄//            
 int hWnd1 = FindWindow(null,"测温仪器软件");//主窗体句柄
 int hWnd2 = FindWindowEx(hWnd1, 0, "ReBarWindow32", null);//主窗体下的
 int hWnd3 = FindWindowEx(hWnd2, 0, "ToolbarWindow32", null);
已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用
int vCount=SendMessage(hWnd3,TB_BUTTONCOUNT,0,0);
SendMessage(hWnd3, WM_LBUTTONDOWN, 0,(vCount - 6)); 
SendMessage(hWnd3, WM_LBUTTONUP, 0,(vCount - 6));
后面的参数无论是第几个总是点击ToolbarWindow32上的第一个按钮。
我用SendMessage(hWnd3, WM_LBUTTONDOWN, 0, 0);
SendMessage(hWnd3, WM_LBUTTONUP, 0, 0);
也是按第一个按钮,比如我想点击上面的第2或第3个怎么获得这个按钮的方法,我用
RECT rect = new RECT();
GetWindowRect(hWnd3, ref rect);
int width = rect.Right - rect.Left;                        //窗口的宽度
int height = rect.Bottom - rect.Top;                   //窗口的高度
int x = rect.Left;  //zuo                                            
int y = rect.Top;//shang
int a=x+617;
int b=y+1;
SendMessage(hWnd3, WM_LBUTTONDOWN,0,(b<<16)+a);
SendMessage(hWnd3, WM_LBUTTONUP, 0,(b<<16)+a);
这样倒可以点,但是好像是前台点,如果窗口最大或最小化就点不了,我要后台的。
谁知道怎么做,给个方法!感谢了! --------------------编程问答-------------------- toolbar上的按钮本来就没有handler

应该发送nm_click通知消息

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760490(v=vs.85).aspx --------------------编程问答-------------------- 朋友能给个思路么,没用过你说的这个!有简单代码没 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 楼主 u011288834 的回复:
ToolbarWindow32句柄//            
 int hWnd1 = FindWindow(null,"测温仪器软件");//主窗体句柄
 int hWnd2 = FindWindowEx(hWnd1, 0, "ReBarWindow32", null);//主窗体下的
 int hWnd3 = FindWindowEx(hWnd2, 0, "ToolbarWindow32", null);
已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用
int vCount=SendMessage(hWnd3,TB_BUTTONCOUNT,0,0);
SendMessage(hWnd3, WM_LBUTTONDOWN, 0,(vCount - 6)); 
SendMessage(hWnd3, WM_LBUTTONUP, 0,(vCount - 6));
后面的参数无论是第几个总是点击ToolbarWindow32上的第一个按钮。
我用SendMessage(hWnd3, WM_LBUTTONDOWN, 0, 0);
SendMessage(hWnd3, WM_LBUTTONUP, 0, 0);
也是按第一个按钮,比如我想点击上面的第2或第3个怎么获得这个按钮的方法,我用
RECT rect = new RECT();
GetWindowRect(hWnd3, ref rect);
int width = rect.Right - rect.Left;                        //窗口的宽度
int height = rect.Bottom - rect.Top;                   //窗口的高度
int x = rect.Left;  //zuo                                            
int y = rect.Top;//shang
int a=x+617;
int b=y+1;
SendMessage(hWnd3, WM_LBUTTONDOWN,0,(b<<16)+a);
SendMessage(hWnd3, WM_LBUTTONUP, 0,(b<<16)+a);
这样倒可以点,但是好像是前台点,如果窗口最大或最小化就点不了,我要后台的。
谁知道怎么做,给个方法!感谢了!



api 有个激活某个句柄 对应的窗体的 可以试一下 先激活 后处理 --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
toolbar上的按钮本来就没有handler

应该发送nm_click通知消息

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760490(v=vs.85).aspx


www.google.com --------------------编程问答--------------------
引用 4 楼 amu0528 的回复:
Quote: 引用 楼主 u011288834 的回复:

ToolbarWindow32句柄//            
 int hWnd1 = FindWindow(null,"测温仪器软件");//主窗体句柄
 int hWnd2 = FindWindowEx(hWnd1, 0, "ReBarWindow32", null);//主窗体下的
 int hWnd3 = FindWindowEx(hWnd2, 0, "ToolbarWindow32", null);
已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用
int vCount=SendMessage(hWnd3,TB_BUTTONCOUNT,0,0);
SendMessage(hWnd3, WM_LBUTTONDOWN, 0,(vCount - 6)); 
SendMessage(hWnd3, WM_LBUTTONUP, 0,(vCount - 6));
后面的参数无论是第几个总是点击ToolbarWindow32上的第一个按钮。
我用SendMessage(hWnd3, WM_LBUTTONDOWN, 0, 0);
SendMessage(hWnd3, WM_LBUTTONUP, 0, 0);
也是按第一个按钮,比如我想点击上面的第2或第3个怎么获得这个按钮的方法,我用
RECT rect = new RECT();
GetWindowRect(hWnd3, ref rect);
int width = rect.Right - rect.Left;                        //窗口的宽度
int height = rect.Bottom - rect.Top;                   //窗口的高度
int x = rect.Left;  //zuo                                            
int y = rect.Top;//shang
int a=x+617;
int b=y+1;
SendMessage(hWnd3, WM_LBUTTONDOWN,0,(b<<16)+a);
SendMessage(hWnd3, WM_LBUTTONUP, 0,(b<<16)+a);
这样倒可以点,但是好像是前台点,如果窗口最大或最小化就点不了,我要后台的。
谁知道怎么做,给个方法!感谢了!



api 有个激活某个句柄 对应的窗体的 可以试一下 先激活 后处理










激活句柄后,没有点击上面按钮的方法啊,关键toolbar上的按钮没有handler
如何后台点击上面按钮。

--------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
toolbar上的按钮本来就没有handler

应该发送nm_click通知消息

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760490(v=vs.85).aspx


nm_click发送消息,关键如何找我需要点的那个按钮。是用坐标找么?如果是坐标,鼠标点击会不会是前台点击? --------------------编程问答--------------------
引用 6 楼 u011288834 的回复:
Quote: 引用 4 楼 amu0528 的回复:

Quote: 引用 楼主 u011288834 的回复:

ToolbarWindow32句柄//            
 int hWnd1 = FindWindow(null,"测温仪器软件");//主窗体句柄
 int hWnd2 = FindWindowEx(hWnd1, 0, "ReBarWindow32", null);//主窗体下的
 int hWnd3 = FindWindowEx(hWnd2, 0, "ToolbarWindow32", null);
已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用
int vCount=SendMessage(hWnd3,TB_BUTTONCOUNT,0,0);
SendMessage(hWnd3, WM_LBUTTONDOWN, 0,(vCount - 6)); 
SendMessage(hWnd3, WM_LBUTTONUP, 0,(vCount - 6));
后面的参数无论是第几个总是点击ToolbarWindow32上的第一个按钮。
我用SendMessage(hWnd3, WM_LBUTTONDOWN, 0, 0);
SendMessage(hWnd3, WM_LBUTTONUP, 0, 0);
也是按第一个按钮,比如我想点击上面的第2或第3个怎么获得这个按钮的方法,我用
RECT rect = new RECT();
GetWindowRect(hWnd3, ref rect);
int width = rect.Right - rect.Left;                        //窗口的宽度
int height = rect.Bottom - rect.Top;                   //窗口的高度
int x = rect.Left;  //zuo                                            
int y = rect.Top;//shang
int a=x+617;
int b=y+1;
SendMessage(hWnd3, WM_LBUTTONDOWN,0,(b<<16)+a);
SendMessage(hWnd3, WM_LBUTTONUP, 0,(b<<16)+a);
这样倒可以点,但是好像是前台点,如果窗口最大或最小化就点不了,我要后台的。
谁知道怎么做,给个方法!感谢了!



api 有个激活某个句柄 对应的窗体的 可以试一下 先激活 后处理










激活句柄后,没有点击上面按钮的方法啊,关键toolbar上的按钮没有handler
如何后台点击上面按钮。




遍历句柄的子对象 --------------------编程问答--------------------
引用 7 楼 u011288834 的回复:
Quote: 引用 1 楼 devmiao 的回复:

toolbar上的按钮本来就没有handler

应该发送nm_click通知消息

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760490(v=vs.85).aspx


nm_click发送消息,关键如何找我需要点的那个按钮。是用坐标找么?如果是坐标,鼠标点击会不会是前台点击?


按钮的id啊。 --------------------编程问答-------------------- 无头绪!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,