[C++] HINSTANCE killen?

Pagina: 1
Acties:

  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Ik heb vanuit mijn applicatie een andere opgestart met ShellExecute(). Hierna heb ik een HINSTANCE van dat process.

Hoe kan ik deze HINSTANCE killen?

Ik wilde het eerst met SendMessage() doen, maar die verwacht een (main)window als input. een HWND dus. Op 1 of andere manier moet ik dus een andere functie hebben of ik moet de mainwindow van de HINSTANCE achterhalen. Hoe doe ik dat?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Eerst de documentatie lezen!
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below
Je kunt er dus niets mee. Gebruik ShellExecuteEx om de HANDLE van het gestarte proces te verkrijgen. Met die HANDLE kun je vervolgens de threads enumereren met Thread32First/Thread32Next (wel eerst die HANDLE omzetten naar een id met GetProcessId).

Vervolgens zou je aan de hand van die HANDLE de windows kunnen achterhalen (EnumThreadWindows) of gewoon WM_QUIT messages naar die thread kunnen sturen PostThreadMessage)


Of gewoon alle top-level windows enumereren (EnumWindows) en dan kijken of de process-id matcht (GetWindowThreadProcessId)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Dank je ik zal het proberen

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
Je kunt ook direct killen aan de hand van het procesId. Daarvoor hoef je echt niet de window op te halen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
Werkt idd. een stuk makkelijker als het proces geen message pump heeft.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

D-Raven schreef op donderdag 06 juli 2006 @ 20:10:
Je kunt ook direct killen aan de hand van het procesId. Daarvoor hoef je echt niet de window op te halen.
bedoel je TerminateProcess, of een graceful manier van afsluiten?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10-2025
TerminateProcess inderdaad. Je hebt gelijk dat is geen "nette" manier van afsluiten. Je hebt in princiepe hetzelfde effect als kill proces via de task manager aanroepen.

Alleen hoe wil je anders een process sluiten die geen window handle heeft?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13-02 18:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

PostThreadMessage(WM_QUIT) voor non-console apps, GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT) voor console apps. Dan even wachten, en als ie na x seconden nog niet is afgesloten dan TerminateProcess.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1