Avatar billede sessa Nybegynder
12. april 2007 - 20:51 Der er 4 kommentarer og
1 løsning

OpenProcess parameter?

Jeg sidder og kikker på definitionen af funktionen OpenProcess:

HANDLE OpenProcess(
  DWORD dwDesiredAccess, // access flag
  BOOL bInheritHandle,    // handle inheritance flag
  DWORD dwProcessId     // process identifier
);

...og det er jo forståeligt nok, men jeg kan ingen steder se, hvor man skal få den tredie parameter, dwProcessId, fra. Er der nogen, der kan fortælle mig, hvad denne 'process identifier' er for en svend?
Avatar billede bertelbrander Novice
12. april 2007 - 21:02 #1
ProcessId er et tal der identificerer processen, så vidt jeg ved er det det samme tal som PID fra taskmanageren/joblisten.

Du kan få en liste af alle process-id'er med EnumProcesses
Avatar billede driis Nybegynder
12. april 2007 - 21:41 #2
MSDN har også et eksempel på brug:
http://msdn2.microsoft.com/en-us/library/ms686701.aspx
Avatar billede sessa Nybegynder
13. april 2007 - 11:30 #3
driis: Dit link havde jeg faktisk selv fundet forinden jeg spurgte, men jeg synes ikke rigtigt, at det hjælper mig. Men tak for forsøget :)

bertelbrander: Det med EnumProcesses lyder som noget af det rigtige, men hvordan finder man ud af, hvilke processer de forskellige process-ID'er hører til?
Avatar billede bertelbrander Novice
13. april 2007 - 20:42 #4
Det kommer an på hvad du mener med "hvilke processer".

Med EnumProcessModules kan du finde de moduler (almindeligvis .exe og .dll) der bruges af de forskellige processer.
Den første af disse moduler er normalt .exe filen.
Så du kan liste alle kørende programmer med:
#include <windows.h>
#include <psapi.h>
#include <iostream>

int main()
{
  DWORD Processes[1024], ProcessesNeeded;
  DWORD NumProcesses, x;
  int ProcessIndex;

  if(!EnumProcesses(Processes, sizeof(Processes), &ProcessesNeeded))
      return 1;

  NumProcesses = ProcessesNeeded/sizeof(DWORD);

  for(x = 0, ProcessIndex = -1; x < NumProcesses && ProcessIndex == -1; x++)
  {
      HMODULE ModHandle[1024];
      DWORD ModulesNeeded;
      HANDLE ProcessHandle;
      ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, Processes[x]);
      if(EnumProcessModules(ProcessHandle, ModHandle, sizeof(ModHandle), &ModulesNeeded))
      {
        char ModuleName[MAX_PATH];
        if(GetModuleFileNameEx(ProcessHandle, ModHandle[0], ModuleName, sizeof(ModuleName)))
        {
            std::cout << ModuleName << std::endl;
        }
      }
      CloseHandle(ProcessHandle);
  }
  return 0;
}
Avatar billede sessa Nybegynder
13. april 2007 - 22:34 #5
bertelbrander: Mange tak for hjælpen, jeg arbejder videre med det her. Jeg ved at du ikke samler på point, så jeg snupper dem selv :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester