webForumDet fria alternativet

Avsluta ett program från ett eget skapat program

5 svar · 224 visningar · startad av prey

preyMedlem sedan jan. 2002341 inlägg
#1

Vad är koden för att avsluta ett program?

Jag har ett program där bl.a. koden
Shell("C:\mittprog.exe")
finns med. Nu vill jag skapa en kontroll som avslutar mittprog.exe. Hur gör jag det?? Tacksam för svar

------------------
Everyone is a prey,
watch your back!

fredrikMedlem sedan dec. 19991 072 inlägg
#2

För att kunna avsluta en program som du har startat så behöver du programmets "handle" (hwnd).

Detta kan tex. returneras om du kör igång en process med API-anrop.
Men du kan även hämta ut "hwnd" från ett visst angivet fönster.

Låt oss säga att du har startat "notepad.exe". Programmet heter då "Notepad". För att stänga det skriver du då:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _
lpClassName As String, ByVal lpWindowName As String) As Long
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 Command1_Click()

dim w_handle

w_handle = FindWindow("Notepad", vbNullString)
SendMessage w_handle, WM_CLOSE, CLng(0), CLng(0)
end sub

Du hämtar alltså först upp en "handle" till programemt och sedan använder du "SendMessage" för att skicka ett meddelande till programmet som säger åt det att stänga sig.

------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

BeatboxMedlem sedan okt. 20013 217 inlägg
#3

Varför inte använda Win32 anropet "ShellExecute" på en gång ? Då får man ju tag i hwnd vid uppstart.

// BeatBox

------------------
"Mörkrets gärningar, förekommer även på dagen"

Sixten Landby

fredrikMedlem sedan dec. 19991 072 inlägg
#4

Japp, visst är det så..

Detta kan tex. returneras om du kör igång en process med API-anrop.

För att köra igång en appl. med API skriver du:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Command1_Click()
Dim lngHwnd As Long
Dim strApp As String

strApp = "notepad.exe"
lngHwnd = ShellExecute(0&, vbNullString, strApp, vbNullString, vbNullString, vbNormalFocus)
MsgBox "Hwnd är: " & lngHwnd
End Sub

Den startar alltså Notepad.

------------------
Fredrik Klarqvist
f.klarqvist@spray.se
http://server.webwerkstaden.se/fredde/

preyMedlem sedan jan. 2002341 inlägg
#5

Tackar så mkt!
Det blir till å testa..

------------------
Everyone is a prey,
watch your back!

xcalibrateMedlem sedan aug. 2002136 inlägg
#6

Under Command1

End

126 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)