我已经得到了一个listview的句柄,怎么才能取得里面具体数据?(100分) 我已经得到了一个listview的句柄,怎么才能取得里面具体数据?这个listview是联众世界中的,我想得到里面所有玩家的用户名。用什么api,具体怎么做! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有一个 API函数,get...你查查,是专门获得 这类 东西的 项目列表的!或者你在消息循环里看看 给你一个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); } } } } 先谢谢各位; 不过还没有实际解决!to :kkk_visual(宇宙中我是最厉害的!哈哈(但不包括地球))就象你说的,我的要求就是 想从“Windows 任务管理器”中得到 进程-->映像名称现我已经得到了 SysListView32 的句柄 ,接下来怎么做?(你的代码还没看懂:-),不过看上去不是我要的! for(int i=0;i<listView1.FocusedItem.SubItems.Count;i++){ MessageBox.Show(listView1.FocusedItem.SubItems[i].Text);} 获得了listview的handle,你可以用enumchildwindows去试试,参看http://www.pinvoke.net/default.aspx/user32/EnumChildWindows.html 试了,只能得到一个SysHeader32的句柄! to :Knight94(愚翁) 用spy++能得到listview的句柄(这个我已经得到了)下面也只能看到一个SysHeader32子窗口可以用spy++看看 "Windows 任务管理器" 获得外部程序Listview控件的内容,在网上VC,VB6,等等其他非.NET语言的很多,但是.NET 的没有,要用到的API太多了,我曾经也想转换到.NET上可是没有成功,期待高人!帮你顶 那看看spy++是否能获得子项,如果它可以的话,你就有可能可以实现;如果它不行的话,至少从handle这条路已经堵死了。 to: rl0516() 获得外部程序Listview控件的内容,在网上VC,VB6,等等其他非.NET语言的很多,但是.NET 的没有,要用到的API太多了,我曾经也想转换到.NET上可是没有成功,期待高人!--------------------------------------------------------------------------诚心希望你能给我一个链接(vb,vc都行)to :Knight94那看看spy++是否能获得子项,如果它可以的话,你就有可能可以实现;如果它不行的话,至少从handle这条路已经堵死了。-------------------------------------------handle这条路要是堵死了,还能有什么办法?? 谁帮我翻译成C#,另开帖给分:http://itschool.rjdown.com/article/6/50/html/2006022615431951.shtml 翻译见新帖http://community.csdn.net/Expert/topic/4950/4950288.xml?temp=.172146 WinFrom:DataGridView中多维表头如何导出到Excel 请教用C#开发简单C/S架构的桌面网游的方案 我现在用Windows Media Player写一个播放器 播放列表该用什么控件装? c#中的字符串split如何用? 高手看过来 求ping的c#源码 如何转界面? 请问windows的这种panel怎么做? sql语句连接多个数据库 FolderBrowserDialog()、OpenFileDialog()的问题 如何得知定义事件的名称?? OS 加载程序锁
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);
}
}
}
}
不过还没有实际解决!to :kkk_visual(宇宙中我是最厉害的!哈哈(但不包括地球))就象你说的,我的要求就是 想从“Windows 任务管理器”中得到 进程-->映像名称
现我已经得到了 SysListView32 的句柄 ,接下来怎么做?(你的代码还没看懂:-),不过
看上去不是我要的!
{
MessageBox.Show(listView1.FocusedItem.SubItems[i].Text);
}
http://www.pinvoke.net/default.aspx/user32/EnumChildWindows.html
用spy++能得到listview的句柄(这个我已经得到了)下面也只能看到一个SysHeader32子窗口可以用spy++看看 "Windows 任务管理器"
帮你顶
--------------------------------------------------------------------------
诚心希望你能给我一个链接(vb,vc都行)to :Knight94那看看spy++是否能获得子项,如果它可以的话,你就有可能可以实现;如果它不行的话,至少从handle这条路已经堵死了。
-------------------------------------------
handle这条路要是堵死了,还能有什么办法??