Ik probeer de status van een downloaditem van kazaa op te vragen (is hij paused, hoeveel is al gedownload etc).
Omdat je niet direct tegen een externe treeitem TVM_GETITEM kan roepen (dancrasht het externe proces) heb ik de volgende code geschreven.
Het probleem is dus dat de code een lege string teruggeeft. Dit kan een domme programeerfout zijn of betekenen dat ik een andere aanpak moet proberen...
Ik ben een beetje wanhopig van deze code geworden, dus hoop ik dat jullie de fout zien of iets beters weten.
Hieronder de code. Ik zoek dus eerst de systreeview32 waar de downloads instaan en daarna selecteer ik het eerste item van de lijst. Hier probeer ik de informatie van te bemachtigen (ik weet al dat deze code onder win9x nooit zal werken, maar ik probeer het eerst onder NT/2000/XP aan de praat te krijgen)
Ik verwacht trouwens dat bovenstaande stuk code gewoon vol met fouten zit aangezien ik niet zo'n c++ ster ben (java is more my thing)
(Edit: kan een modje even aan de topictitel toevoegen dat het om C++ gaat, was ik perongeluk vergeten)
Omdat je niet direct tegen een externe treeitem TVM_GETITEM kan roepen (dancrasht het externe proces) heb ik de volgende code geschreven.
Het probleem is dus dat de code een lege string teruggeeft. Dit kan een domme programeerfout zijn of betekenen dat ik een andere aanpak moet proberen...
Ik ben een beetje wanhopig van deze code geworden, dus hoop ik dat jullie de fout zien of iets beters weten.
Hieronder de code. Ik zoek dus eerst de systreeview32 waar de downloads instaan en daarna selecteer ik het eerste item van de lijst. Hier probeer ik de informatie van te bemachtigen (ik weet al dat deze code onder win9x nooit zal werken, maar ik probeer het eerst onder NT/2000/XP aan de praat te krijgen)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| hwndDLTraffic=FindWindowEx(h,NULL,"SysTreeView32",NULL);//download systreeview32
HTREEITEM hTreeItem = ( HTREEITEM ) SendMessage( hwndDLTraffic,TVM_GETNEXTITEM,TVGN_ROOT,NULL );
DWORD dwProcessId,lp;
HANDLE hProcess;
//initialize the local TVITEM struct
TVITEMEX tvi;
tvi.mask = TVIF_TEXT;
tvi.hItem = hTreeItem;
tvi.cchTextMax = 256;
//get the process ID of hwndTV
GetWindowThreadProcessId(hwndDLTraffic, &dwProcessId);
//open a handle to the remote process
hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, 0, dwProcessId);
if(hProcess)
{
//Allocate memory in the remote process's address space
void *lpMem = VirtualAllocEx(hProcess, 0, 256 + 40, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if(lpMem)
{
//NOTE: The text data immediately follows the TVITEM structure
//in the memory block allocated in the remote process.
tvi.pszText = 40 + (char *)lpMem;
//Write the local TVITEM to the remote memory block
WriteProcessMemory(hProcess, lpMem, &tvi, 40, &lp);
//Tell the treeview control to fill the remote TVITEM structure
if( SendMessage(hwndDLTraffic, TVM_GETITEM, 0, (LPARAM)lpMem))
{
char szBuffer[256];
//Read the remote text string into our local array buffer
if(ReadProcessMemory(hProcess,40 + (char *)lpMem, szBuffer, 256, &lp))
{
//Show what's in the buffer
MessageBox( 0, szBuffer, NULL, MB_OK | MB_ICONERROR );
}
}
//Free the memory in the remote process's address space
VirtualFreeEx(hProcess, lpMem, 0, MEM_RELEASE);
}
CloseHandle(hProcess);
} |
Ik verwacht trouwens dat bovenstaande stuk code gewoon vol met fouten zit aangezien ik niet zo'n c++ ster ben (java is more my thing)
(Edit: kan een modje even aan de topictitel toevoegen dat het om C++ gaat, was ik perongeluk vergeten)