Toon posts:

Text opvragen van een TreeItem van een extern proc

Pagina: 1
Acties:

Verwijderd

Topicstarter
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)
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)

Verwijderd

Topicstarter
Niemand :'(?

Zie http://www.netsetup.nl/marcel/fta/ voor meer info over het programma waar deze code voor bedoeld is...