Задача состоит в получении содержимого элемента ListView другого окна. Однако, данный код приводит к критическому завершению работы процесса - владельца окна. Как исправить это?
#include "stdafx.h"
#include "windows.h"
#include "Commctrl.h"
int main() {
HWND hWnd = FindWindow(NULL, L"<My window name>");
HWND hSysListView32 = FindWindowEx(hWnd, NULL, L"SysListView32", NULL);
unsigned long pid;
GetWindowThreadProcessId(hSysListView32, &pid);
HANDLE hProc = OpenProcess(
PROCESS_VM_OPERATION | PROCESS_VM_READ |
PROCESS_VM_WRITE | PROCESS_QUERY_INFORMATION,
FALSE,
pid);
LVITEM* lvi = new LVITEM;
lvi->iSubItem = 0;
lvi->cchTextMax = 256;
LVITEM* lviAddr = (LVITEM*)VirtualAllocEx(hProc, NULL, sizeof LVITEM, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProc, lviAddr, lvi, sizeof LVITEM, NULL);
if (SendMessage(hSysListView32, LVM_GETITEMTEXT, 0, (LPARAM)lviAddr) > 0)
printf("%s\n", lvi->pszText);
else
printf("%d\n", GetLastError());
system("pause");
return 0;
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости