读取其他应用程序中ListView中的内容

void MyGetListViewItem(HWND hWindow,TStrings *strlist)
{
    const nMaxLen=1023;
    char szBuf[nMaxLen+1];

    int          nLVItemCount;
    DWORD        dwProcessID;
    HANDLE       hProcess;
    LVITEM       lvItemLocal;
    DWORD        dwBytesRead, dwBytesWrite;
    bool         bSuccess,bWriteOK;

    //注意:本文来自www.ccrun.com,by ccrun(老妖),转载请注明出处。
    //为防止某些不负责任的转载者,故出此下策,在代码中加入声明,请大家原谅。

    GetWindowThreadProcessId(hWindow,&dwProcessID);
    hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
    if(!hProcess)  //得不到指定进程的句柄
        return;
    //在指定进程内分配存储空间
    LPVOID lpTextRemote=VirtualAllocEx(hProcess,NULL,nMaxLen+1,MEM_COMMIT,PAGE_READWRITE);
    LPVOID lpListItemRemote=VirtualAllocEx(hProcess,NULL,sizeof(LVITEM),MEM_COMMIT,PAGE_READWRITE);
    if((!lpTextRemote) || (!lpListItemRemote)) //不能在指定进程内分配存储空间
        return;

    nLVItemCount=ListView_GetItemCount(hWindow);
    strlist->Add("Welcome to www.ccrun.com");    
    strlist->Add("ListView的Item总数: " + String(nLVItemCount));
    strlist->Add("---------------------------");

    for(int i=0;i<nLVItemCount;i++)
    {
        ZeroMemory(szBuf,nMaxLen+1);
        bWriteOK= WriteProcessMemory(hProcess,lpTextRemote,(LPVOID)szBuf,nMaxLen+1,(LPDWORD)&dwBytesWrite);
        if(!bWriteOK) //写内存错误
            return;
        lvItemLocal.iItem=i;
        lvItemLocal.iSubItem=0;
        lvItemLocal.mask=LVIF_TEXT;
        lvItemLocal.cchTextMax=nMaxLen;
        lvItemLocal.pszText=(LPTSTR)lpTextRemote;
        dwBytesWrite=0;
        bWriteOK=WriteProcessMemory(hProcess,lpListItemRemote,(LPVOID)&lvItemLocal,sizeo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值