导航

心动吧DELPHI网络书

自发研究:须要多维思想而且要想不可能为可能的人才能做到

« 在delphi程序中屏蔽所有错误[原创]最简单打开拨号方式 »

无法获取到某窗体中控件的句柄,应如何处理

问题:

  我实在想不明白我的问题所以来请教一下您希望能给个明灯。。

其实也就是句柄问题.我的程序上面有一个StatusBar1控件.增加了3个Panels.现在我想再另外写一个软件来实时监控第二个Panels的text。可是我在网上找了很多都没解决掉。也试过用EnumChildWindows(hFrm, @TryGetText, LPARAM(Self))获取父窗口然后列举所有子窗口也没有成功。。
  所以想请大哥帮帮忙看看如何才能获取得到,晚上可以再加分

回答:

  StatusBar的Panel并没有句柄,StatusBar才有。

获取本进程或其他进程中StatusBar的Panel文本,可以通过向StatusBar发送SB_GETTEXT消息来搞定,不过需要注意的是,如果是获取其他进程中的StatusBar信息,需要注入到目标进程,开辟缓冲,获取Panel文本后再用ReadProcessMemory读回。

正确答案,

明生注:本人水平有限,如哪里有注释不对的请留言提醒一下。谢谢

procedure CrnGetStatusBarItem(hStatusBar: THandle; pList: TStrings);
var
    dwProcessID: DWORD;
    hProcess: THandle;
    lpCommon: Pointer;
    nAllocSize: integer;// = 255;
    szBuf: array [0..255] of char;
    dwBytesRead: DWORD;
    nPnlCount: integer;
    i: integer;
begin
    nAllocSize := 255;
    nPnlCount := SendMessage(hStatusBar, SB_GETPARTS, 0, 0);   //用 sb_getparts来取得sta控件(状态栏)的子数目
    pList.Add('StatusBar的项目数: ' + IntToStr(nPnlCount));

    GetWindowThreadProcessId(hStatusBar, @dwProcessID);  //然后注入到他的进程,因为不注入是获取不到的
    hProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ, false, dwProcessID);
                //上面这个函数是用来打开一个已知进程对像,并且返回他的句柄(PID)。在开刷广告时就用过这个函数很不错
                //此打开具备读取,写入,查询的权限
    lpCommon := VirtualAllocEx(hProcess, nil, nAllocSize,
            MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
                 //上面,注入后需要用到 VirtualAllocEx 函数来获取相对应大小的缓冲区
    for i := 0 to nPnlCount - 1 do
    begin
        SendMessage(hStatusBar, SB_GETTEXT, i, LPARAM(lpCommon));
        ReadProcessMemory(hProcess, lpCommon, @szBuf, 255, dwBytesRead);
        //最后用ReadProcessMemory读出指定的内存地址数据
        pList.Add(szBuf);
    end;

    VirtualFreeEx(hProcess, lpCommon, 0, MEM_RELEASE);
    CloseHandle(hProcess);
end;

 

原创文章如转载,请注明:转载自心动吧DELPHI网络书 [ http://www.abcxd.com/delphi/ ]

本文链接地址:http://www.abcxd.com/delphi/abcxddelphi/delphiMemo/ReadProcessMemory-OpenProcess-VirtualAllocEx.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索内容

所属分类下的文章

日历

Copyright ⊙ 2004-2009 心动吧 UrL:ABCXD.CoM All RiGhts Reserved