+ -
当前位置:首页 → 问答吧 → ListView_FindItem 总是返回 -1

ListView_FindItem 总是返回 -1

时间:2011-12-25

来源:互联网

我想通过 发送 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;
    }
}



作者: qq1040262300   发布时间: 2011-12-25

C/C++ code
TCHAR sz[MAX_PATH] ={0};
这个是你本进程内存空间,不是远程进程的.

作者: zwfgdlc   发布时间: 2011-12-25