问题描述
ToolbarWindow32句柄//inthWnd1=FindWindow(null,"测温仪器软件");//主窗体句柄inthWnd2=FindWindowEx(hWnd1,0,"ReBarWindow32",null);//主窗体下的inthWnd3=FindWindowEx(hWnd2,0,"ToolbarWindow32",null);已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用intvCount=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个怎么获得这个按钮的方法,我用RECTrect=newRECT();GetWindowRect(hWnd3,refrect);intwidth=rect.Right-rect.Left;//窗口的宽度intheight=rect.Bottom-rect.Top;//窗口的高度intx=rect.Left;//zuointy=rect.Top;//shanginta=x+617;intb=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句柄//inthWnd1=FindWindow(null,"测温仪器软件");//主窗体句柄inthWnd2=FindWindowEx(hWnd1,0,"ReBarWindow32",null);//主窗体下的inthWnd3=FindWindowEx(hWnd2,0,"ToolbarWindow32",null);已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用intvCount=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个怎么获得这个按钮的方法,我用RECTrect=newRECT();GetWindowRect(hWnd3,refrect);intwidth=rect.Right-rect.Left;//窗口的宽度intheight=rect.Bottom-rect.Top;//窗口的高度intx=rect.Left;//zuointy=rect.Top;//shanginta=x+617;intb=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句柄//inthWnd1=FindWindow(null,"测温仪器软件");//主窗体句柄inthWnd2=FindWindowEx(hWnd1,0,"ReBarWindow32",null);//主窗体下的inthWnd3=FindWindowEx(hWnd2,0,"ToolbarWindow32",null);已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用intvCount=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个怎么获得这个按钮的方法,我用RECTrect=newRECT();GetWindowRect(hWnd3,refrect);intwidth=rect.Right-rect.Left;//窗口的宽度intheight=rect.Bottom-rect.Top;//窗口的高度intx=rect.Left;//zuointy=rect.Top;//shanginta=x+617;intb=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句柄//inthWnd1=FindWindow(null,"测温仪器软件");//主窗体句柄inthWnd2=FindWindowEx(hWnd1,0,"ReBarWindow32",null);//主窗体下的inthWnd3=FindWindowEx(hWnd2,0,"ToolbarWindow32",null);已经获取ToolbarWindow32句柄,如何获得ToolbarWindow32上类似按钮的句柄从而发送后台鼠标点击,窗口最小化或不是当前都可以点击的那种,用SPY++工具只能看到ToolbarWindow32的句柄,找不到工具棒上面按钮的句柄。ToolbarWindow32上有好多可以点击的按钮,我想SendMessage其中的一个,我用intvCount=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个怎么获得这个按钮的方法,我用RECTrect=newRECT();GetWindowRect(hWnd3,refrect);intwidth=rect.Right-rect.Left;//窗口的宽度intheight=rect.Bottom-rect.Top;//窗口的高度intx=rect.Left;//zuointy=rect.Top;//shanginta=x+617;intb=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).aspxnm_click发送消息,关键如何找我需要点的那个按钮。是用坐标找么?如果是坐标,鼠标点击会不会是前台点击?
按钮的id啊。
解决方案十一:
无头绪!
解决方案十二:
引用9楼devmiao的回复:
Quote: 引用7楼u011288834的回复:
Quote: 引用1楼devmiao的回复:
toolbar上的按钮本来就没有handler应该发送nm_click通知消息http://msdn.microsoft.com/en-us/library/windows/desktop/bb760490(v=vs.85).aspxnm_click发送消息,关键如何找我需要点的那个按钮。是用坐标找么?如果是坐标,鼠标点击会不会是前台点击?
按钮的id啊。
按钮没有句柄,至于id……去哪找啊?
解决方案十三:
囧我也遇到了这个问题。。。toolbar上的按钮没有句柄
解决方案十四:
这个问题解决了没有啊,怎么解决的?