Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Sovellusten sulku

sooda [17.10.2003 15:17:49]

#

Juu, millasenkohan api kutsun tarvitsee että saa muita sovelluksia sulkeutumaan tietämällä niiden hWnd:n? Teen hienoa tehtävienhallintaa jossa voi näyttää, piilottaa, suurentaa, pienentää ja toivottavasti kohta sulkeakin ohjelmia... vähä sillä on kiva leikkiä täällä koulussa :P
Löytyy tuolta: koti.mbnet.fi/koodaaja/EdistynytProsessiHallinta.exe

Antti Laaksonen [17.10.2003 18:15:57]

#

Yksi tapa on lähettää suljettavalle ohjelmalle WM_CLOSE-viesti SendMessage-funktion avulla. Seuraava ohjelma sulkee itsensä tällä tavalla.

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE = &H10

Private Sub Form_Click()
    Dim x As Long
    x = SendMessage(Me.hwnd, WM_CLOSE, 0, 0&)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    MsgBox "Nyt ohjelma suljetaan."
End Sub

Kuitenkin suljettavalla ohjelmalla on vielä mahdollisuus vaikuttaa asiaan (vertaa VB:n Unload-aliohjelma), joten todellinen sulkeutuminen ei ole takuuvarmaa. Esim. monet ohjelmat kysyvät, tallennetaanko avoin tiedosto. Jos joku tietää paremman keinon, kertoa saa.

sooda [17.10.2003 18:16:51]

#

Tota mä just yritin ja se ei tykkää sulee muita ku mun sen oman ohjelman... :(

Antti Laaksonen [17.10.2003 18:38:10]

#

Näemmä muiden kuin oman ohjelman sulkemiseen täytyy käyttää PostMessage-funktiota (mikä lie syynä). Kirjoita siis ohjelman alkuun uusi funktiomäärittely:

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Ja vaihda funktion nimi muualla ohjelmassa. Parametrit ovat samat ja ainakin minulla tuntui onnistuvan näin muidenkin ohjelmien sammuttaminen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta