如何得到TOOLbar上某个按钮的句柄,然后给这个按钮发一个点击的消息 各位好我已经知道TOOLBAR的句柄了,但是我如何得到TOOLbar上某个按钮的句柄,然后用sendmessage给这个按钮发一个点击的消息请各位直接给代码 谢谢了 搞了一天了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Private Const WM_LBUTTONDOWN = &H201lngControl = FindWindowEx(lngWindow, 0, "Button", "取消")lngRet = SendMessage(lngControl, WM_LBUTTONDOWN, 0, 0&)'lngWindow为TOOLbar的句柄'lngControl为按钮句柄 好像,无法得到lngControl ,调式后的值为0 请再帮助 用spy++查看一下,TOOLBAR的子窗口句柄为0,子窗口列表为空,因此,一般窗口操作不解决问题. 麻烦的很取得toolbar句柄,然后取得按钮ID ,用sendmessage 发送wm_command 给这个按钮ID,理论上是这样,不过我没有试成功过。===下面是dephi写的,据说可以,自己看看uses CommCtrl, Types; function ToolbarButtonClick( // 模拟点击其他进程的Toolbar按钮 mHandle: THandle; // Toolbar句柄 mIndex: Integer // 按钮序号 ): Boolean; //设计 Zswang 2006-11-13 wjhu111#21cn.com 尊重作者,转贴请注明出处 var vRect: TRect; vSmallPoint: TSmallPoint; vProcessId: DWORD; vProcess: THandle; vPointer: Pointer; vNumberOfBytesRead: Cardinal; begin Result := False; if mHandle <= 0 then Exit; GetWindowThreadProcessId(mHandle, @vProcessId); if vProcessId <= 0 then Exit; vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId); vPointer := VirtualAllocEx(vProcess, nil, $1000, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); try SendMessage(mHandle, TB_GETITEMRECT, mIndex, Integer(vPointer)); ReadProcessMemory(vProcess, vPointer, @vRect, SizeOf(TRect), vNumberOfBytesRead); if vNumberOfBytesRead <= 0 then Exit; finally VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); CloseHandle(vProcess); end; vSmallPoint := PointToSmallPoint(CenterPoint(vRect)); SendMessage(mHandle, WM_LBUTTONDOWN, MK_LBUTTON, Longint(vSmallPoint)); SendMessage(mHandle, WM_LBUTTONUP, MK_LBUTTON, Longint(vSmallPoint)); Result := True; end; { ToolbarButtonClick } 新手急求:用Command控件建立一个Access数据库 鼠标移动到treeview某个条目上后,为什么会出现下划线?如何去掉? 救命呀!FarPoint的Spread控件问题? 谁知道Recordset返回记录的条数怎么得到啊? [求助]VB中有哪几种方式调用DLL?? 在toolbar控件中怎样确定我点击了哪个按钮并执行相应的操作?? vb 里有没有像 C 语言里的 /* */ 屏蔽符号 vb IDE的问题 vb中数组的传递! Vb下拉菜单问题 如何将现有数据导入到excel模板中 VB 内存分配与流读写 代码
lngControl = FindWindowEx(lngWindow, 0, "Button", "取消")
lngRet = SendMessage(lngControl, WM_LBUTTONDOWN, 0, 0&)
'lngWindow为TOOLbar的句柄
'lngControl为按钮句柄
取得toolbar句柄,然后取得按钮ID ,用sendmessage 发送wm_command 给这个按钮ID,理论上是这样,不过我没有试成功过。
===
下面是dephi写的,据说可以,自己看看uses CommCtrl, Types; function ToolbarButtonClick( // 模拟点击其他进程的Toolbar按钮 mHandle: THandle; // Toolbar句柄
mIndex: Integer // 按钮序号 ): Boolean;
//设计 Zswang 2006-11-13 wjhu111#21cn.com 尊重作者,转贴请注明出处
var vRect: TRect;
vSmallPoint: TSmallPoint;
vProcessId: DWORD;
vProcess: THandle;
vPointer: Pointer;
vNumberOfBytesRead: Cardinal;
begin Result := False;
if mHandle <= 0 then Exit;
GetWindowThreadProcessId(mHandle, @vProcessId);
if vProcessId <= 0 then Exit;
vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId);
vPointer := VirtualAllocEx(vProcess, nil, $1000, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
try SendMessage(mHandle, TB_GETITEMRECT, mIndex, Integer(vPointer)); ReadProcessMemory(vProcess, vPointer, @vRect, SizeOf(TRect), vNumberOfBytesRead); if vNumberOfBytesRead <= 0 then Exit;
finally VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); CloseHandle(vProcess); end;
vSmallPoint := PointToSmallPoint(CenterPoint(vRect));
SendMessage(mHandle, WM_LBUTTONDOWN, MK_LBUTTON, Longint(vSmallPoint));
SendMessage(mHandle, WM_LBUTTONUP, MK_LBUTTON, Longint(vSmallPoint));
Result := True;
end; { ToolbarButtonClick }