我用 c++写了一个 程序 来获取 相关内容 试了下 资源管理器 是可以的 但其他的listview 行 和列是可以获取
但是里面的内容获取不到 用了下 彗星小助手的工具 发现 试可以用 以报表视图(listview)方式获取到内容
请问如何获取内容?
windows窗口listview内容 获取
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- weixin_37592736 2017-04-12 03:19关注
代码如下
#include
#include
#includeint 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语言蛋白组学相关问题