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
    知识共享,欢迎转载。
  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834688.html
Copyright © 2011-2022 走看看