Toon posts:

[bcb3] Programma afsluiten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een programma te ontwikkelen wat communiceerd via een socket connectie met een ander programma (bestaand programma) . Zo wil ik vanuit mijn eigen programma dat bestaande programma kunnen afsluiten om vervolgens weer op te laten starten. Dit omdat ik vanuit mijn eigen programma registerinstellingen heb verander. Deze instellingen worden pas van kracht nadat dat programma opnieuw wordt opgestart.

Bij het verbreken van onze socketconnectie wordt dat externe programma goed afgesloten en kan ik deze dus mooi opnieuw opstarten. (met de nieuwe instellingen) Maar wanneer wij geen verbinding hebben met het andere programma heb ik hem geprobeerd hem op een andere manier af te sluiten.

HWND HW;
HW = FindWindow(NULL,"Bestaande programma");

SendMessage(HW, WM_SYSCOMMAND,SC_CLOSE,0); //Afsluiten

Nou zit er binnen dat programma een soort beveiliging zodat hij bij het afsluiten nog als icoontje in de taskbar actief blijft. Op deze manier kan ik nooit het programma opnieuw opstarten met nieuwe instellingen.

Ik zou me voor kunnen stellen dat dit zou moeten kunnen door een actief proces te beeindigen o.i.d.

Ik wil dus eigenlijk een programma dat actief is in de taakbeheer en dus zichtbaar wordt wanneer ik op Ctrl + Alt + del druk, af kunnen sluiten.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Wat dacht je van WM_CLOSE ipv WM_SYSCOMMAND? :)

Of als je het echt zat bent de winAPI functie TerminateProcess, maar dat is hetzelfde als het process killen (niet echt goed).

We adore chaos because we like to restore order - M.C. Escher


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Nou zit er binnen dat programma een soort beveiliging zodat hij bij het afsluiten nog als icoontje in de taskbar actief blijft.
Bedoel je zo'n systray icoontje? Zoja, heeft die geen menu-optie om het programma volledig af te sluiten? Dan kun je daarvan het ID misschien wel uitvogelen en sturen naar het main window met WM_COMMAND.

www.madwizard.org


Verwijderd

Topicstarter
Bedankt zover voor jullie reacties.

Ik weer van alles geprobeerd maar het wil nog niet echt lukken. Ik vraag het programma ook nog op met findwindow. Maar in de systray is het geen window. Misschien zal ik dan inderdaad iets met zo`n proces ID moeten doen.

Misschien heeft iemand een voorbeeld o.i.d.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Alle programma's hebben een window, anders kunnen er geen windows messages verstuurd worden en daar draaid windows toch om. Je moet WM_CLOSE wel sturen naar het top level window. Kijk even met winsight wat de naam is van dat window

We adore chaos because we like to restore order - M.C. Escher


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

WM_CLOSE kan nog geannuleerd worden door het programma om bijvoorbeeld te minimaliseren naar de systray. Als het in de systray staat heb je evengoed nog een window, alleen niet zichtbaar. Er moet namelijk altijd een window zijn waar de messages van het systray window naar toe moeten.
Misschien werkt WM_DESTROY wel...

www.madwizard.org

Pagina: 1