zoukankan      html  css  js  c++  java
  • 读取sysTreeview32和SysListView32

    #include <stdio.h>
    #include <windows.h>
    #include <commctrl.h>
    
    int main(void) 
    {
    	
    	/* Run through the windows until we find our listview. */
    	HWND hwnd = NULL;
    	int count, i;
    	char item[512] = {0}, subitem[512] = {0};
    	
    	LVITEM lvi, *_lvi;
    	char *_item, *_subitem;
    	DWORD pid;
    	HANDLE process;
    
    
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("CabinetWClass"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("SHELLDLL_DefView"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("DUIViewWndClassName"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("DirectUIHWND"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("CtrlNotifySink"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("SysListView32"), NULL);
    	
    	count=(int)SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0);
    
    	GetWindowThreadProcessId(hwnd, &pid);
    	process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|
    		PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);
    	
    	_lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM),
    		MEM_COMMIT, PAGE_READWRITE);
    	_item=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
    		PAGE_READWRITE);
    	_subitem=(char*)VirtualAllocEx(process, NULL, 512, MEM_COMMIT,
    		PAGE_READWRITE);
    	
    	lvi.cchTextMax=512;
    
    	for(i=0; i<count; i++) {
    		lvi.iSubItem=0;
    		lvi.pszText=_item;
    		WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
    		SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
    		
    		lvi.iSubItem=1;
    		lvi.pszText=_subitem;
    		WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL);
    		SendMessage(hwnd, LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)_lvi);
    		
    		ReadProcessMemory(process, _item, item, 512, NULL);
    		ReadProcessMemory(process, _subitem, subitem, 512, NULL);
    		
    		printf("%s - %s
    ", item, subitem);
    	}
    	
    	VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
    	VirtualFreeEx(process, _item, 0, MEM_RELEASE);
    	VirtualFreeEx(process, _subitem, 0, MEM_RELEASE);
    
    
    	return 0;
    }
    
    //http://www.codeproject.com/Articles/5570/Stealing-Program-s-Memory


    #include <iostream>
    #include <afx.h>
    #include <windows.h>
    #include <commctrl.h>
    using namespace std;
    
    int main()
    {
    	HWND hwnd = NULL;
    	DWORD PID;
    	HANDLE process;
    	PVOID buffer;
    	const int bufferLength = 4000;
    	LPTVITEM item = (LPTVITEM)new BYTE[bufferLength];
    	CString	text;
    
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("CabinetWClass"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("BaseBar"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("ReBarWindow32"), NULL);
    	hwnd = FindWindowEx(hwnd, NULL, TEXT("SysTreeView32"), NULL);
    	
    	if (hwnd == NULL)
    	{
    		return 0;
    	}
    
    	GetWindowThreadProcessId(hwnd, &PID);
    	process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
    	buffer = VirtualAllocEx(process,NULL,bufferLength,MEM_COMMIT,PAGE_READWRITE);
    
    	item->mask = TVIF_TEXT;
    	item->cchTextMax = 512;
    	item->pszText = LPTSTR((PBYTE)buffer+sizeof(TVITEM));
    	item->hItem = (HTREEITEM)SendMessage(hwnd,TVM_GETNEXTITEM,TVGN_ROOT,0);
    	
    	while(item->hItem)
    	{
    		SendMessage(hwnd,TVM_SELECTITEM,TVGN_CARET,(long)item->hItem);
    		WriteProcessMemory(process,buffer,item,sizeof(TVITEM),NULL);
    		SendMessage(hwnd,TVM_GETITEM,0,(LPARAM)buffer);
    		ReadProcessMemory(process,buffer,item,bufferLength,NULL);
    		text = (LPTSTR)((PBYTE)item+sizeof(TVITEM));
    		if( -1 != text.Find("Download"))
    		{
    			SendMessage(hwnd,TVM_EXPAND,TVE_EXPAND,(long)item->hItem);
    			SendMessage(hwnd, TVM_SELECTITEM,TVGN_CARET, (long)item->hItem);
    
    			cout << (LPSTR)(LPCTSTR)text << endl;
    			
    			break;
    		}
    		item->hItem = (HTREEITEM)SendMessage(hwnd,TVM_GETNEXTITEM,TVGN_NEXTVISIBLE,(long)item->hItem);
    	}
    
    	
    
    	VirtualFreeEx(process, item, 0, MEM_RELEASE);
    	CloseHandle(process);
    	return 0;
    }
    
    
    //http://bbs.csdn.net/topics/391818883












    http://bbs.csdn.net/topics/391818883

    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    Code First 迁移
    使用C#创建Windows服务 并发布Windows 服务
    线程(Thread,ThreadPool)、Task、Parallel
    用《捕鱼达人》去理解C#中的多线程
    Visual Studio提示“无法启动IIS Express Web服务器”的解决方法 调试闪退
    防cc攻击策略
    多线程和异步的异同和使用场景
    JQuery Checkbox 获取多选值 Checkbox选中个数
    C# 说说lock到底锁谁?(1)
    C# 说说lock到底锁谁?(2)
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834688.html
Copyright © 2011-2022 走看看