x32的LVM_GETITEMTEXT和C的x64
发布时间:2020-12-13 23:00:43 所属栏目:Linux 来源:网络整理
导读:我一直试图让listview中的项目文本成为另一个过程.我在 CodeProject找到了一个很棒的教程.感谢这篇文章,我能够在x32上做到这一点.但是当尝试在x64上运行时,它会在调用SendMessage时崩溃我正在尝试访问的应用程序.在文章评论中,由于指针大小不同,人们有类似的
我一直试图让listview中的项目文本成为另一个过程.我在
CodeProject找到了一个很棒的教程.感谢这篇文章,我能够在x32上做到这一点.但是当尝试在x64上运行时,它会在调用SendMessage时崩溃我正在尝试访问的应用程序.在文章评论中,由于指针大小不同,人们有类似的问题.有人建议使用我不能使用的x64编译器.我需要我的程序在x32 / x64上运行.一个人建议:
我认为这将是最好的解决方案,因为我可以用一个exe运行x32和x64.我只是不知道如何做他正在谈论的事情.我已经包含了目前适用于x32的代码.如果有人可以帮助我.那太棒了. LVITEMLVITEM lvi,*_lvi; char item[512]; char *_item; unsigned long pid; HANDLE process; GetWindowThreadProcessId(procList,&pid); process = OpenProcess(0x001f0fff,FALSE,pid); _lvi = (LVITEM*)VirtualAllocEx(process,NULL,sizeof(LVITEM),0x1000,4); _item = (char*)VirtualAllocEx(process,512,4); lvi.cchTextMax = 512; int r,c; for (r = 0; r < rowCount; r++) { for (c = 0; c < columnCount; c++) { lvi.iSubItem = c; lvi.pszText =_item; // Insert lvi into programs's memory WriteProcessMemory(process,_lvi,&lvi,NULL); // Have program write text to in its memory where we told it to SendMessage(procList,LVM_GETITEMTEXT,(WPARAM)r,(LPARAM)_lvi); // Get TVITEM back from programs ReadProcessMemory(process,_item,item,NULL); } } // Clean up the mess we made VirtualFreeEx(process,MEM_RELEASE); VirtualFreeEx(process,MEM_RELEASE); CloseHandle(process); 解决方法
我认为你无法做到这一点.在32位进程中,指针太短.我相信VirtualAllocEx在从32位进程调用并且使用64位进程句柄作为其第一个参数时将失败.如果您在代码中添加了错误检查,我想你会看到这个.
您唯一的解决方案是拥有2个版本,x86和x64.这应该不是真正的麻烦 – 通常可以用单一来源完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |