各位好
我已经知道TOOLBAR的句柄了,但是我如何得到TOOLbar上某个按钮的句柄,然后用sendmessage给这个按钮发一个点击的消息
请各位直接给代码 谢谢了 搞了一天了

解决方案 »

  1.   

    Private Const WM_LBUTTONDOWN = &H201
    lngControl = FindWindowEx(lngWindow, 0, "Button", "取消")
    lngRet = SendMessage(lngControl, WM_LBUTTONDOWN, 0, 0&)
    'lngWindow为TOOLbar的句柄
    'lngControl为按钮句柄
      

  2.   

    好像,无法得到lngControl ,调式后的值为0 请再帮助
      

  3.   

    用spy++查看一下,TOOLBAR的子窗口句柄为0,子窗口列表为空,因此,一般窗口操作不解决问题.
      

  4.   

    麻烦的很
    取得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 }