weixin_37592736 2017-04-12 03:06 采纳率: 0%
浏览 1531

windows窗口listview内容 获取

我用 c++写了一个 程序 来获取 相关内容 试了下 资源管理器 是可以的 但其他的listview 行 和列是可以获取
但是里面的内容获取不到 用了下 彗星小助手的工具 发现 试可以用 以报表视图(listview)方式获取到内容
请问如何获取内容?

  • 写回答

2条回答 默认 最新

  • weixin_37592736 2017-04-12 03:19
    关注

    代码如下

    #include
    #include
    #include

    int main() {

    HWND hwnd,headers;
    char str[5120];
    

    char space[10]=" ";
    int iItem=0;

    //LVITEM64 lvitem, *plvitem;
    LVITEM lvitem, *plvitem;
    char *pItem;
    DWORD PID;
    HANDLE hProcess;
    int rows,cols,i,j;

    hwnd=FindWindow("#32770","Windows 任务管理器");
    hwnd=FindWindowEx(hwnd,0,"#32770",0);
    hwnd=FindWindowEx(hwnd,0,"SysListView32",0);

    // printf("%d",ListviewHwnd);

    iItem=SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED);

    printf("%d\n",iItem);

    //itoa(iItem,temp,10);
    //MessageBox(NULL,temp,"iItem",NULL);
    GetWindowThreadProcessId(hwnd, &PID);

    hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID); //PROCESS_ALL_ACCESS

    DWORD dword=GetLastError();

    printf("%d",dword);
    

    plvitem=(LVITEMA*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
    pItem=(char*)VirtualAllocEx(hProcess, NULL,16, MEM_COMMIT, PAGE_READWRITE);
    if(!plvitem) {
    printf("无法分配内存");
    return 0;
    }

    lvitem.mask=LVIF_TEXT;
    lvitem.cchTextMax=512;
    lvitem.pszText=pItem;
    
    rows=::SendMessage(hwnd,LVM_GETITEMCOUNT,0,0);
    cols=1;
    DWORD dwStyle=GetWindowLong(hwnd,GWL_STYLE);
    headers=(HWND)::SendMessage(hwnd,LVM_GETHEADER,0,0);
    if(headers){
        cols=::SendMessage(headers,HDM_GETITEMCOUNT,0,0);
        if(cols<1) cols=1;
    }
    
    
    printf("rows:%d|cols%d\n",rows,cols);
    

    //printf("sizeof(LVITEM):%d\n",sizeof(LVITEM));

    //printf("hprocess:%d\n",hProcess);

    for(i=0;i<rows;i++){
    for(j=0;j<cols;j++){

    lvitem.iItem=i;
    lvitem.iSubItem=j;
    
    
    
    WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM ), NULL);
    ::SendMessage(hwnd,LVM_GETITEM, i, (LPARAM)plvitem); //LVM_GETITEMRECT LVM_GETITEMTEXT
     char ItemBuf[512];
    

    // printf("sendMesage:%d "+a);

    ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);
    

    // MessageBox(NULL,ItemBuf,"ItemBuf",NULL);

    // strcat(str,ItemBuf);
    // strcat(str,space);

    printf("%s",ItemBuf);
    
        printf(" ");
    
    
    }
    printf("\n");
    

    }

    //释放内存
    CloseHandle(hwnd);
    CloseHandle(hProcess);
    VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);
    VirtualFreeEx(hProcess, pItem, 0, MEM_RELEASE);

    //printf("%s",str);

    //printf("%d\n",strlen(str));

    //memcpy(buf, str, strlen(str));
    return 0 ;
    }

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题