Visual Basic !?
URL: https://www.overclockers.at/coding-stuff/visual_basic_33840/page_1 - zur Vollversion wechseln!
bBU.CyTrobIc schrieb am 09.05.2002 um 16:40
hoi,
mal ne kleine frage...
programme starten kann ich... aber nicht wieder beenden :/
ich will ein programm beenden was ich vorher gestartet hab. zb. so:
basic proggi1 -> starten t-online und beendet sich wieder
basic proggi2 -> beendet t-online
wie realisier ich das ?
thx cy
(starten geht, aber wie zum geier beende ich das wieder?)
that schrieb am 09.05.2002 um 21:56
Window suchen (per Class oder Titel) mit EnumWindows oder FindWindow
und
ein WM_CLOSE schicken...
xTixo schrieb am 09.05.2002 um 22:22
Wenns in einem Project sind kannst eigentlich auch die andere Form einfach invisible machen... So hab ichs gemacht, halte es aber für pfusch
und programmier nicht mehr in VB

FMFlash schrieb am 10.05.2002 um 02:49
statt visible = false würd ich eher unload verwenden ...
xTixo schrieb am 10.05.2002 um 09:42
Form1.unload - so gechreibt?
FMFlash schrieb am 10.05.2002 um 12:30
Form1.unload - so gechreibt?
Unload Me
hoi,
mal ne kleine frage...
programme starten kann ich... aber nicht wieder beenden :/
ich will ein programm beenden was ich vorher gestartet hab. zb. so:
basic proggi1 -> starten t-online und beendet sich wieder
basic proggi2 -> beendet t-online
wie realisier ich das ?
thx cy
(starten geht, aber wie zum geier beende ich das wieder?)
aber um zum eigentlichen problem zu kommen: ich würd an deiner stelle ein steuerprog schreiben das das geschwünschte prog startet / beendet
dazu brauchst du nur ein kontrollwindow mit (in meinem beispiel hier 3 buttons - starten / checken / beenden (als bsp wird notepad gestartet und beendet)) und ein zusätzliches modul
in das modul schreibst du folgendes:
------------------------------
Option Explicit
' hier die benötigten API-Deklarationen
Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As _
Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Const STILL_ACTIVE = &H103
Const PROCESS_ALL_ACCESS = &H1F0FFF
Const PROCESS_TERMINATE = &H1
' Prüfen, ob ein Task mit einer bestimmten
' TaskID noch aktiv ist
Public Function IsTaskActive(lTaskID As Long) As Boolean
Dim lhwnd As Long
Dim lExitCode As Long
lhwnd = OpenProcess(PROCESS_ALL_ACCESS, False, lTaskID)
Call GetExitCodeProcess(lhwnd, lExitCode)
Call CloseHandle(lhwnd)
IsTaskActive = (lExitCode = STILL_ACTIVE)
End Function
' Task beenden
Public Sub TerminateTask(lTaskID As Long)
Dim lhwnd As Long
Dim lResult As Long
lhwnd = OpenProcess(PROCESS_TERMINATE, 0&, lTaskID)
lResult = TerminateProcess(lhwnd, 1&
lResult = CloseHandle(lhwnd)
End Sub
und der code des kontrollfensters:
---------------------------------
Option Explicit
' TaskID des von uns gestarteten Windows-Editor
Private lTaskID As Long
Private Sub cmdStart_Click()
' Notepad starten
Dim sWinPath As String
sWinPath = Environ("WinDir")
If Right$(sWinPath, 1) <> "\" Then _
sWinPath = sWinPath & "\"
lTaskID = Shell(sWinPath & "notepad.exe", vbNormalFocus)
End Sub
Private Sub cmdCheck_Click()
' Prüfen, ob das von uns gestartete Notepad
' noch läuft
If IsTaskActive(lTaskID) Then
MsgBox "Notepad wird noch ausgeführt!"
Else
MsgBox "Notepad wurde bereits beendet!"
End If
End Sub
Private Sub cmdExit_Click()
' Die von uns gestartete Notepad-Instant
' beenden
If IsTaskActive(lTaskID) Then
TerminateTask lTaskID
MsgBox "Notepad wurde geschlossen."
Else
MsgBox "Notepad wird nicht mehr ausgeführt!"
End If
End Sub
und schon hast du ein kleines tool mit dem du beliebig programme starten/beenden kannst
hoffentlich das was du brauchst 
bBU.CyTrobIc schrieb am 10.05.2002 um 16:39
ok danke schonmal für die vielen antworten, mein problem ist nur das das ganze remote über php ausgeführt wird...
d.h. ich habe keine möglichkeit die TaskID zu bestimmen.
der soll T-Online beeden, weiss da einer was ?
thx cy
Ringding schrieb am 10.05.2002 um 16:41
was ist mit der antwort vom that?
bBU.CyTrobIc schrieb am 11.05.2002 um 16:28
was ist mit der antwort vom that?
ehrlich gesagt hab ich wenig plan von VB und weiss nicht wie er das meint
bzw. wie ich das code-mässig umsetzen soll 
cy
that schrieb am 11.05.2002 um 17:54
Ungefähr so, nur halt in VB:
// closewnd.cpp - close specified windows
#include <windows.h>
#include <string.h>
#include <stdio.h>
static const char Helptext[] =
"Window close utility, (c)that2001\n\n"
"Syntax: closewnd <window title>\n";
BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
LPCSTR pszTitle = (LPCSTR) lParam;
char sz[200];
GetWindowText(hwnd, sz, sizeof(sz));
if (IsWindowVisible(hwnd) && strstr(_strlwr(sz), pszTitle)) {
// printf("%s\n", sz);
PostMessage(hwnd, WM_CLOSE, 0, 0);
}
return TRUE;
}
int main(int argc, char **argv)
{
if (argc < 2) {
printf(Helptext);
return 1;
}
_strlwr(argv[1]);
EnumWindows(EnumProc, (LPARAM) argv[1]);
return 0;
}
that schrieb am 11.05.2002 um 18:15
Hier das Executable, falls jemand keinen Compiler hat... (1,2 kB)
bBU.CyTrobIc schrieb am 12.05.2002 um 13:07
hmm könnt mir das jemand in VB übersetzen ? ich bin zu blöd zum milchholen 
thx cy
btw. thx dir schonmal that
FMFlash schrieb am 12.05.2002 um 18:17
wozu noch übersetzen? kannst ja auch direkt das executable von ihm benutzen
ps: in vb is für die selbe aufgabe ein so **** umständlicher und langwieriger code zu schreiben ... *graus*
Bimminger schrieb am 13.05.2002 um 15:40
in vb mit SendKeys das {F4} an das Fenster mit window-title "T-Online" oder so senden. is zwar äusserst unsauber aber IT WORXX
JC schrieb am 13.05.2002 um 16:39
in vb mit SendKeys das {F4} an das Fenster mit window-title "T-Online" oder so senden. is zwar äusserst unsauber aber IT WORXX
Dafür gibt's die tollen WM_xxx-Messages via API
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026