文档章节

如何获取其他进程中ListView控件中的内容

郭剑波
 郭剑波
发布于 2016/08/17 09:40
字数 463
阅读 21
收藏 1
点赞 0
评论 0

如果需要C#版的,可以看下我之前写的:C#如何获取其他程序ListView控件中的内容

获取其他进程的数据需要使用到以下几个函数:

 

  • VirtualAllocEx()
  • VirtualFreeEx()
  • WriteProcessMemory()
  • ReadProcessMemory()

以获取任务管理器中的进程列表为例,运行结果如下:

关键代码

复制代码

HANDLE    hProcess;
    LVITEM    *pointer;
    HWND    hwnd,hListview;
    int headerhwnd; //listview控件的列头句柄
    int rows,cols;  //listview控件中的行列数
    DWORD ProcessID = NULL;
    DWORD ThreadID = NULL;

    hwnd = (HWND)::FindWindow(_T("#32770") , _T("Windows 任务管理器"));
    hwnd = (HWND)::FindWindowEx(hwnd, 0, _T("#32770") , NULL );
    //进程界面窗口的句柄,通过SPY获取
    hListview = (HWND)::FindWindowEx(hwnd, 0, _T("SysListView32") , NULL );

    //listview的列头句柄
    headerhwnd = ::SendMessage(hListview, LVM_GETHEADER, 0, 0);

    //总行数:进程的数量
    rows = ::SendMessage(hListview,LVM_GETITEMCOUNT,0,0);
    //列表列数
    cols = ::SendMessage(hListview, HDM_GETITEMCOUNT,0,0);
    
    ThreadID = GetWindowThreadProcessId(hListview,&ProcessID);

    //打开并插入进程
    hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE,ProcessID);
    //申请代码的内存区
    pointer = (LVITEM*)VirtualAllocEx(hProcess,NULL, sizeof(LVITEM),MEM_COMMIT, PAGE_READWRITE);

    for (int i = 0; i < rows;i++ )
    {
        m_ProcessList.InsertItem(i,_T(""));
        for (int j = 0; j < cols;j++ )
        {
            LVITEM vItem;
            vItem.mask = LVIF_TEXT;    //说明pszText是有效的
            vItem.iItem = i;        //行号
            vItem.iSubItem = j;        //列号
            vItem.cchTextMax = 512;    //所能存储的最大的文本为256字节
            LPWSTR pItem = NULL;
            //申请内存空间
            pItem = (LPWSTR)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
            vItem.pszText = pItem;

            WriteProcessMemory( hProcess , pointer , &vItem , sizeof(LVITEM),NULL);
            ::SendMessage(hListview, LVM_GETITEMW,(WPARAM)i,(LPARAM)pointer);
            char ItemBuf[512];
            memset(ItemBuf,0,512);
            ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);
            CString str;
            str.Format(_T("%s"),ItemBuf);            
            m_ProcessList.SetItemText(i,j,str);
            //释放内存空间
            VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);
        }
    }
    //释放内存空间
    VirtualFreeEx(hProcess, pointer, 0, MEM_RELEASE);//在其它进程中释放申请的虚拟内存空间,MEM_RELEASE方式很彻底,完全回收
    CloseHandle(hProcess);//关闭打开的进程对象

复制代码

关于内存管理的相关文章:

虚拟内存管理的作用/好处

虚拟地址空间

在应用程序中使用虚拟内存

谈谈使用远程线程来注入DLL

本文转载自:http://www.cnblogs.com/hongfei/p/3458237.html

共有 人打赏支持
郭剑波
粉丝 0
博文 9
码字总数 808
作品 0
郑州
程序员
ListView使用BaseAdapter与ListView的优化

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。...

蜗牛TT ⋅ 2012/06/12 ⋅ 1

ListView中单击其中一项创建ContextMenu,如何获取该localBookList...

如果是在ListView进行创建的上下文菜单,那么如何获取ListView所单击列项的数据呢? 有两种方式可获取: 1、 可以通过在长时间点击OnLongItemClick方法事件,将所单击的View数据进行临时保存...

风清入舞 ⋅ 2012/08/28 ⋅ 1

Android ListView使用BaseAdapter与ListView的优化

Adapter在Android应用程序中起着非常重要的作用,应用也非常广泛,它可看作是数据源和UI组件之间的桥梁,其中Adapter、数据和UI之间的关系,可以用下图表示: BaseAdapter就Android应用程序中...

风清扬-深圳 ⋅ 2015/11/18 ⋅ 0

Android第四十天

1、ListView分页加载 <1>分页的作用 (1)避免一次性加载过多内容时,造成内存溢出; (2)可以增强用户体验。 <2>实现思路 (1)当滚动到最后一条的时候,加载新数据; (2)适配器的数据源...

黄晓磊 ⋅ 2016/07/23 ⋅ 0

Android listview与adapter用法

一个ListView通常有两个职责。 (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非...

OScoder2 ⋅ 2014/03/04 ⋅ 0

listview与adapter用法

一个ListView通常有两个职责: (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现这个功能的。第二点也不难做到,在后面的学习中读者会发现,这非...

ARESXIONG ⋅ 2015/11/03 ⋅ 0

UI 控件比较

一、 Button Android 声明 Button android:id="@+id/button1"android:layout_height="80px "android:layout_width="40px "android:text="Button1"/> 事件处理 @Overridepublic void onCreat......

失足处男的倒霉孩子 ⋅ 2013/12/24 ⋅ 0

问题记录-如何让Listview子控件在点击之后失去点击事件

如何让Listview的子控件在点击之后失去焦点 1.出现的问题 2.尝试解决的方法 1.将父布局设置为不可点击 2.将item的子控件设置为不可点击,后来发现当你把一个控件设置了点击事件之后,系统会自...

byronhs ⋅ 2016/05/11 ⋅ 0

自定义控件FlexibleListView,一个简单的改善就能解放用户在浏览时的有效可视面积

转载请注明出处:王亟亟的大牛之路 昨天写了个有点“小黄暴”的Demo,被各种吐槽屌丝。。上一篇的地址:http://blog.csdn.net/ddwhan0123/article/details/50341987 今天继续写一些简单的自定...

ddwhan0123 ⋅ 2015/12/18 ⋅ 0

Android自定义View的实现(四)

如果说要按类型来划分的话,自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。那么下面我们就来依次学习一下,每种方式分别是如何自定义View的。 一、自绘控件 自绘...

JayPark不作死 ⋅ 2014/07/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部