您现在的位置:首页 >> API >> API >> 内容

获取其他进程中StatusBar的文本

时间:2011/9/3 14:53:49 点击:

  核心提示:usesCommCtrl;functionGetStatusBarText(mHandle:THandle):string;varvBuffer:array[0..$1000]ofChar;vSize...
uses CommCtrl;

function GetStatusBarText(mHandle: THandle): string;
var
  vBuffer: array[0..$1000of Char;
  vSize: Integer;
  I: Integer;
  vCount: Integer;
  vProcessId: DWORD;
  vProcess: THandle;
  vPointer: Pointer;
  vNumberOfBytesRead: Cardinal;
begin
  Result := '';
  vCount := SendMessage(mHandle, SB_GETPARTS, 00);
  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, 11);
  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;

作者:Zswang 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号