我已经得到了一个listview的句柄,怎么才能取得里面具体数据?这个listview是联众世界中的,我想得到里面所有玩家的用户名。用什么api,具体怎么做!

解决方案 »

  1.   

    有一个 API函数,get...你查查,是专门获得 这类 东西的 项目列表的!或者你在消息循环里看看
      

  2.   

    给你一个VC的例子:
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
     
    {

    HWND hwnd;
    int iItem=0;
    LVITEM lvitem, *plvitem;
    char ItemBuf[512],*pItem;
    DWORD PID;
    HANDLE hProcess;


    hwnd=FindWindow("#32770","Windows 任务管理器");
    hwnd=FindWindowEx(hwnd,0,"#32770",0);
    hwnd=FindWindowEx(hwnd,0,"SysListView32",0); if (!hwnd)

    MessageBox(NULL,"[Windows 任务管理器] 尚未启动!","错误!",NULL);

    else
    {
    iItem=SendMessage(hwnd,LVM_GETNEXTITEM,-1,LVNI_SELECTED);
    if (iItem==-1)

    MessageBox(NULL,"没有指定目标进程 !","错误!",NULL);

    else
    {
    //itoa(iItem,temp,10);
    //MessageBox(NULL,temp,"iItem",NULL);
    GetWindowThreadProcessId(hwnd, &PID);

    hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
    if (!hProcess)

    MessageBox(NULL,"获取进程句柄操作失败!","错误!",NULL);

    else
    {
    plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE);
    pItem=(char*)VirtualAllocEx(hProcess, NULL, 512, MEM_COMMIT, PAGE_READWRITE);
    if ((!plvitem)||(!pItem))

    MessageBox(NULL,"无法分配内存!","错误!",NULL);

    else
    {
    lvitem.cchTextMax=512;
    //lvitem.iSubItem=1;//PID
    lvitem.iSubItem=0;  //ProcessName
    lvitem.pszText=pItem;
    WriteProcessMemory(hProcess, plvitem, &lvitem, sizeof(LVITEM), NULL);
    SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)plvitem);
    ReadProcessMemory(hProcess, pItem, ItemBuf, 512, NULL);

    MessageBox(NULL,ItemBuf,"ItemBuf",NULL);
    }
    }
    }
    }
      

  3.   

    先谢谢各位;
      不过还没有实际解决!to :kkk_visual(宇宙中我是最厉害的!哈哈(但不包括地球))就象你说的,我的要求就是 想从“Windows 任务管理器”中得到 进程-->映像名称
    现我已经得到了 SysListView32 的句柄 ,接下来怎么做?(你的代码还没看懂:-),不过
    看上去不是我要的!
      

  4.   

    for(int i=0;i<listView1.FocusedItem.SubItems.Count;i++)
    {
        MessageBox.Show(listView1.FocusedItem.SubItems[i].Text);
    }
      

  5.   

    获得了listview的handle,你可以用enumchildwindows去试试,参看
    http://www.pinvoke.net/default.aspx/user32/EnumChildWindows.html
      

  6.   

    试了,只能得到一个SysHeader32的句柄!
      

  7.   

    to :Knight94(愚翁) 
    用spy++能得到listview的句柄(这个我已经得到了)下面也只能看到一个SysHeader32子窗口可以用spy++看看 "Windows 任务管理器"
      

  8.   

    获得外部程序Listview控件的内容,在网上VC,VB6,等等其他非.NET语言的很多,但是.NET 的没有,要用到的API太多了,我曾经也想转换到.NET上可是没有成功,期待高人!
    帮你顶
      

  9.   

    那看看spy++是否能获得子项,如果它可以的话,你就有可能可以实现;如果它不行的话,至少从handle这条路已经堵死了。
      

  10.   

    to: rl0516() 获得外部程序Listview控件的内容,在网上VC,VB6,等等其他非.NET语言的很多,但是.NET 的没有,要用到的API太多了,我曾经也想转换到.NET上可是没有成功,期待高人!
    --------------------------------------------------------------------------
    诚心希望你能给我一个链接(vb,vc都行)to :Knight94那看看spy++是否能获得子项,如果它可以的话,你就有可能可以实现;如果它不行的话,至少从handle这条路已经堵死了。
    -------------------------------------------
    handle这条路要是堵死了,还能有什么办法??
      

  11.   

    谁帮我翻译成C#,另开帖给分:http://itschool.rjdown.com/article/6/50/html/2006022615431951.shtml
      

  12.   

    翻译见新帖http://community.csdn.net/Expert/topic/4950/4950288.xml?temp=.172146