OpenProcess gibt konsequent error 87 zurück

10/04/2007 22:17 Term!nX#1
Hallo,

Ich arbeite im Moment an einem ProcessHandle. Allerdings bin ich ratlos, da eigentlich alles richtig ist, speziell die Parameter.

Denn Error 87 besagt, dass die Parameter incorrect sind. Hier der C++ Code:

Code:
  HWND hWnd;
  DWORD thread;
  HANDLE hProcess;
  
  hWnd = FindWindowA(NULL, "Unbenannt - Editor");
  
  if (hWnd == 0) {
    cerr << "Fenster nicht gefunden.";
  }
  
  thread = GetWindowThreadProcessId(hWnd, NULL);
  
  cout << thread << "n";  
  
  hProcess = OpenProcess(PROCESS_VM_READ, FALSE, thread);
  
  DWORD error = GetLastError();

  cout << "n" << error << "n";
  
  CloseHandle(hProcess);

  system("PAUSE");	
  
  return 0;
Ich und der compiler erkennen keinen Fehler. Ihr?

grüße
10/04/2007 23:57 rEdoX#2
Du ueberpruefst hProcess garnicht auf 0, dass ist wichtig, weill winapi funktionen nach einem erfolgreichen funktionsaufruf LastError nicht auf 0 setzen.
Also entweder (so wuerde ich es auch machen)

Code:
if (hProcess != 0){
 //weitermachen
} else {
 //GetLastError(..) 
}
oder (zur verdeutlichung)


Code:
SetLastError(0);
hProcess = OpenProcess(PROCESS_VM_READ, FALSE, thread);
..
10/05/2007 00:18 Term!nX#3
Hab ich schon gemacht, den Test auf 0. Das Handle ist immer 0, deshalb bin ich überhaupt auf GetLastError gekommen.
10/05/2007 00:24 Harko#4
[Only registered and activated users can see links. Click Here To Register...]

DWORD GetWindowThreadProcessId(
HWND hWnd,
LPDWORD lpdwProcessId
);

soweit ich das sehe ist der return value die ThreadId und nicht der ProcessId den du benutzt. Du brauchst aber die ProcessId also so:

DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
10/05/2007 00:24 rEdoX#5
Zong :p

du rufst GetWindowThreadProcessId falsch auf. versuch es mal so

Code:
GetWindowThreadProcessId(hWnd, &PID);
cout << PID<< "n";  
hProcess = OpenProcess(PROCESS_VM_READ, FALSE, PID);
10/05/2007 14:29 Term!nX#6
Danke Leute, jetzt gehts. Das handle ist 0x2c :)

Code:
#include <iostream>
#include <stdlib.h>
#include <windows.h>

using namespace std;

int main(int argc, char *argv[])
{
  
  HWND hWnd;
  HANDLE hProcess;
  DWORD dwProcessId;
  
  hWnd = FindWindowA(NULL, "Unbenannt - Editor");
  
  if (hWnd == 0) {
    cerr << "Fenster nicht gefunden.";
  }
  
  GetWindowThreadProcessId(hWnd, &dwProcessId);
    
  cout << dwProcessId << "n";  
  
  hProcess = OpenProcess(PROCESS_VM_READ, FALSE, dwProcessId);
  
  if (hProcess == 0)
  {
  DWORD error = GetLastError();

  cout << "n" << error << "n";
  }
  else
  {
      cout << hProcess << "n";
  }  
  
  CloseHandle(hProcess);

  system("PAUSE");	
  
  return 0;

}