ListView_FindItem 总是返回 -1解决方法
ListView_FindItem 总是返回 -1
我想通过 发送 ListView_FindItem 这个消息 查找 指定 桌面图标名字的 索引,
总是 返回的 -1, 那位 能解释下
------解决方案--------------------
我想通过 发送 ListView_FindItem 这个消息 查找 指定 桌面图标名字的 索引,
总是 返回的 -1, 那位 能解释下
- C/C++ code
// hprocess 桌面进程的句柄 // hWndListView 桌面 listview 的 句柄, void FindItemParam(IN HANDLE hProcess, IN HWND hWndListView, IN INT iItem) { DWORD dwDataLen = 0; DWORD dwWritten = 0; LVFINDINFO* lpRemoteItemInfo = NULL; // try { // 初始化 LVFINDINFO lviData = {0}; dwDataLen = sizeof(LVFINDINFO); TCHAR sz[MAX_PATH] ={0}; strcpy(sz,"xxx");// 这个是 桌面图标的 名称 lviData.flags = LVFI_STRING; lviData.psz = sz; // 远程分配内存 lpRemoteItemInfo = (LVFINDINFO*)VirtualAllocEx(hProcess, NULL, dwDataLen, MEM_COMMIT, PAGE_READWRITE); DWORD dwWritten = 0; if (!::WriteProcessMemory(hProcess, lpRemoteItemInfo, &lviData, dwDataLen, & dwWritten)) { throw((LONG)__LINE__); } int iret =ListView_FindItem(hWndListView, -1, lpRemoteItemInfo);// 这里总是返回 -1 if (iret == -1) { throw((LONG)__LINE__); } // 获取 if (!::ReadProcessMemory(hProcess, lpRemoteItemInfo, &lviData, dwDataLen, &dwWritten)) { throw((LONG)__LINE__); } } catch (LONG& lLine) { } catch(...) { } // if (lpRemoteItemInfo != NULL) { int iRet = VirtualFreeEx(hProcess, lpRemoteItemInfo, 0, MEM_RELEASE); lpRemoteItemInfo = NULL; } }
------解决方案--------------------
- C/C++ code
TCHAR sz[MAX_PATH] ={0};