怎么获取别的进程的TreeView控件的内容
2008-11-11 11:07
393 查看
extern "C" long EXPORT __stdcall GetRootItem (long Thwnd,char *filestr) {
TVITEM tvi, *_tvi;
char *_item;
char item[256];
unsigned long pid;
HANDLE process;
long ret=(long)((CTreeCtrl*)CWnd::FromHandle((HWND)Thwnd))->GetRootItem();
if (ret) {
/*
GetWindowThreadProcessId
说明
获取和指定窗口关联在一起的一个进程和线程标识符
返回值
Long,拥有窗口的线程的标识符
参数表
参数 类型及说明
lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符
hwnd Long,指定窗口句柄
*/
GetWindowThreadProcessId((HWND)Thwnd, &pid);
//用全部权限打开进程
process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ | PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
//给_lvi,_item分配进程级的虚拟内存空间
_tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
tvi.cchTextMax=256;
tvi.hItem=(HTREEITEM)ret;
tvi.mask=TVIF_TEXT;
tvi.pszText=_item;
//把_lvi写入进程
WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
//发消息得到数据
::SendMessage((HWND)Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
//从进程中读出数据
ReadProcessMemory(process, _item, item, 256, NULL);
//copy data
memcpy(filestr,item,256);
//free memory
VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
}
return ret;
}
extern "C" long EXPORT __stdcall GetNextItem (HWND Thwnd,long next,char *filestr) {
TVITEM tvi, *_tvi;
char item[256];
char *_item;
unsigned long pid;
HANDLE process;
long ret=(long)((CTreeCtrl*)CWnd::FromHandle(Thwnd))->GetNextSiblingItem((HTREEITEM)next);
if (ret) {
GetWindowThreadProcessId(Thwnd, &pid);
process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ | PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
_tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
tvi.cchTextMax=256;
tvi.hItem=(HTREEITEM)ret;
tvi.mask=TVIF_TEXT;
tvi.pszText=_item;
WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
::SendMessage(Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
ReadProcessMemory(process, _item, item, 256, NULL);
memcpy(filestr,item,256);
VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
}
return ret;
}
以上的函数能放到dll中在vb,vc里调用,但如果机器没装vc,在vb里调用需要MFC42D.DLL,MSVCRTD.DLL。
TVITEM tvi, *_tvi;
char *_item;
char item[256];
unsigned long pid;
HANDLE process;
long ret=(long)((CTreeCtrl*)CWnd::FromHandle((HWND)Thwnd))->GetRootItem();
if (ret) {
/*
GetWindowThreadProcessId
说明
获取和指定窗口关联在一起的一个进程和线程标识符
返回值
Long,拥有窗口的线程的标识符
参数表
参数 类型及说明
lpdwProcessId Long,指定一个变量,用于装载拥有那个窗口的一个进程的标识符
hwnd Long,指定窗口句柄
*/
GetWindowThreadProcessId((HWND)Thwnd, &pid);
//用全部权限打开进程
process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ | PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
//给_lvi,_item分配进程级的虚拟内存空间
_tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
tvi.cchTextMax=256;
tvi.hItem=(HTREEITEM)ret;
tvi.mask=TVIF_TEXT;
tvi.pszText=_item;
//把_lvi写入进程
WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
//发消息得到数据
::SendMessage((HWND)Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
//从进程中读出数据
ReadProcessMemory(process, _item, item, 256, NULL);
//copy data
memcpy(filestr,item,256);
//free memory
VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
}
return ret;
}
extern "C" long EXPORT __stdcall GetNextItem (HWND Thwnd,long next,char *filestr) {
TVITEM tvi, *_tvi;
char item[256];
char *_item;
unsigned long pid;
HANDLE process;
long ret=(long)((CTreeCtrl*)CWnd::FromHandle(Thwnd))->GetNextSiblingItem((HTREEITEM)next);
if (ret) {
GetWindowThreadProcessId(Thwnd, &pid);
process=OpenProcess(PROCESS_VM_OPERATION |PROCESS_VM_READ | PROCESS_VM_WRITE |PROCESS_QUERY_INFORMATION, FALSE, pid);
_tvi=(TVITEM*)VirtualAllocEx(process, NULL, sizeof(TVITEM), MEM_COMMIT, PAGE_READWRITE);
_item=(char*)VirtualAllocEx(process, NULL, 256, MEM_COMMIT, PAGE_READWRITE);
tvi.cchTextMax=256;
tvi.hItem=(HTREEITEM)ret;
tvi.mask=TVIF_TEXT;
tvi.pszText=_item;
WriteProcessMemory(process, _tvi, &tvi, sizeof(TVITEM), NULL);
::SendMessage(Thwnd, TVM_GETITEM, 0 , (LPARAM)_tvi);
ReadProcessMemory(process, _item, item, 256, NULL);
memcpy(filestr,item,256);
VirtualFreeEx(process, _tvi, 0, MEM_RELEASE);
VirtualFreeEx(process, _item, 0, MEM_RELEASE);
}
return ret;
}
以上的函数能放到dll中在vb,vc里调用,但如果机器没装vc,在vb里调用需要MFC42D.DLL,MSVCRTD.DLL。
相关文章推荐
- 获取其它进程中TreeView控件的内容
- 如何获取别的进程的TreeView控件的内容
- 获取其它进程中TreeView控件的内容
- 如何获取别的进程的TreeView控件的内容
- 【VC版】如何获取其他进程中ListView控件中的内容
- 在内容页中怎么获取master页的控件引用
- Windows获取其他进程中Edit控件的内容
- 【VC版】如何获取其他进程中ListView控件中的内容
- WPF: TreeView控件 获取选中的文本节点内容
- 怎么来获取其他进程中DBGrid的文本内容啊
- 跨进程 获取 syslistview32 内容
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程
- pb中获取多行文本编辑框(mle控件)指定行的内容
- 获取其他进程中“Internet Explorer_TridentCmboBx”的内容
- div contenteditable="true"时怎么获取div的内容
- CDHtmlDialog获取控件内容
- c# winform项目treeview控件绑定本地电脑磁盘信息,读取文件夹信息,显示文件夹内文件内容
- .net获取select控件中的文本内容
- 跨进程获取树控件节点信息
- 跨进程获取其他程序的DBGrid内容