如何得到指定窗口中状态条第一个PANEL的TEXT?这个PANEL的TEXT中有图标和文字,我只要文字不要图标,如何做?该窗口是外部程序的窗口

解决方案 »

  1.   

    form2.StatusBar1.Panels.Items[0].Text
      

  2.   

    已经获得而且也已经获得该状态条的句柄,但是获得的TEXT为空,是不是因为该PANEL中含有图标呢?该如何获得,我只要文本不要图标。。
      

  3.   

    Self.StatusBar1.Panels.Items[0].Text
      

  4.   

    你的意思是外部窗口的statusbar的所有资料都不知道?
      

  5.   

    第一个PANEL的TEXT 应该很容易就得到的,你只要用FindwindowEx 或者是 Getwindow 获得它的句柄,然后用 sendmessage 发送 WM_GETTEXT 就可以获得Text了
      

  6.   

    //参考如下代码(*//
    标题:获取其他进程中StatisBar的文本
    说明:Window2000+Delphi6调试通过
    设计:Zswang
    支持:[email protected]
    日期:2005-02-22
    //*)uses CommCtrl;function GetStatusBarText(mHandle: THandle): string;
    var
      vBuffer: array[0..$1000] of Char;
      vSize: Integer;
      I: Integer;
      vCount: Integer;  vProcessId: DWORD;
      vProcess: THandle;
      vPointer: Pointer;
      vNumberOfBytesRead: Cardinal;
    begin
      Result := '';
      vCount := SendMessage(mHandle, SB_GETPARTS, 0, 0);
      if vCount <= 0 then Exit;
      GetWindowThreadProcessId(mHandle, @vProcessId);
      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
        for I := 0 to vCount - 1 do
        begin
          vSize := SendMessage(mHandle, SB_GETTEXT, I, 0) + 1;
          SendMessage(mHandle, SB_GETTEXT, I, Integer(vPointer));
          ReadProcessMemory(vProcess, vPointer, @vBuffer[0],
            vSize, vNumberOfBytesRead);
          Result := Result + #9 + vBuffer;
        end;
        Delete(Result, 1, 1);
      finally
        VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
        CloseHandle(vProcess);
      end;
    end; { GetStatusBarText }//Example
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RegisterHotKey(Handle, 1, MOD_WIN, VK_F2);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      UnRegisterHotKey(Handle, 1);
    end;procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);
    begin
      case Msg.HotKey of
        1: Edit1.Text := GetStatusBarText(
          WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)));
      end;
    end;