获取其他进程中StatusBar的文本

(*//
标题:获取其他进程中StatusBar的文本
说明:Window2000+Delphi6调试通过
设计:Zswang
支持:[email protected]
日期:2005-02-22
//*)
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;

http://blog.csdn.net/zswang/article/details/297038

时间: 2024-10-12 18:43:14

获取其他进程中StatusBar的文本的相关文章

获取其他进程中“Internet Explorer_TridentCmboBx”的内容

function GetTridentCmboBxText( // 获取其他进程中“Internet Explorer_TridentCmboBx”的内容   mHandle: THandle; // ComboBox句柄   mStrings: TStrings // 输出列表 ): Boolean; // 返回获取数据是否成功 var   I: Integer;   vItemCount: Integer;   vAddress: array[0..4] of Char;   vProces

获取其他进程中线程状态

进程是由线程组成,启动是的第一个线程为主线程. 对于Windows来说,不存在暂停或恢复进程的概念,因为进程从来不会被安排获得cpu时间. 但是我们可以创建一个函数,用来挂起或者恢复进程中的全部线程,这样就能挂起或者恢复一个进程了. 在进程外获取该进程的线程. 方法: 一.获取目标窗口句柄和进程PID HWND hCalc = ::FindWindow(NULL, "第几课作业 Hardware断点"); GetWindowThreadProcessId(hCalc, &th3

【iOS开发-22】navigationBar导航栏,navigationItem建立:获取导航栏中的基本文本和button以及各种跳跃

(1)navigationBar导航栏可以被看作是self.navigationController一个属性导航控制器,它可以由点直接表示self.navigationController.navigationBar.当然navigationBar他还是很物业.让我们风格barStyle.背景backgroundColor.frame属性(能够获取宽高这些信息).还能够用setBackgroundImage方法设置背景图片.当然图片多了能够使用clipsToBounds剪裁. (2)但.navi

使用ptrace向已运行进程中注入.so并执行相关函数(转)

1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到目标进程的空间中. 2. 如何让目标进程执行dlopen加载.so? 显然,目标进程本来是没有实现通过dlopen来加载我们想注入的.so,为了实现此功能,

使用ptrace向已运行进程中注入.so并执行相关函数

这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用. 到底是如何注入的呢? 本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到

jQuery截取字符串、日期字符串转Date、获取html中的纯文本

jQuery截取字符串.日期字符串转Date.获取html中的纯文本. var com = com || {}; (function ($, com) { /* * 截取字符串 * @param str:要截取的字符串 * @param len:保留多少字符 * @param symbol:超过之后字符串末端要添加的字符 */ com.cutStr = function (str, len, symbol) { if (symbol == undefined) { symbol = "...&q

javascript获取textarea中所选文本的开始位置、结束位置和选择的文本

javascript获取textarea中所选文本的开始位置.结束位置和选择的文本. demo: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>javascript获取textarea中所选文本的开始位置.结束位置和选择的文本</title

驱动程序中获取当前进程的进程名的方法

在内核驱动程序中,可以通过PsGetCurrentProcess函数来获取当前调用驱动的进程的EPROCESS结构的地址.很多文章都说在EPROCESS结构的0x174偏移处存放着进程名.这里提供另外一种方法来获取这个进程名.思路如下:驱动程序的加载函数DriverEntry是运行在System进程中的.通过PsGetCurrentProcess可以获取System进程的内核EPROCESS结构的地址,然后从该地址开始寻找"System"字符串.找到后,便是EPROCESS的进程名存放

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件 shell脚本如下echo "%CPU,%MEM" > cpu_test.csvpid=1 #Can be change by yourselfwhile true do top -bn1 -n 1 -p $pid | tail -1 | awk '{ print $9,$10 }' | sed 's/ /,/' >> cpu_test.csv sleep 2 #delay timedone 脚