Visual Basic !?

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

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 :D :rolleyes:


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

Zitat von xTixo
Form1.unload - so gechreibt?

Unload Me

Zitat von bBU.CyTrobIc
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

Zitat
was ist mit der antwort vom that?

ehrlich gesagt hab ich wenig plan von VB und weiss nicht wie er das meint :D 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:

Code:
// 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 :D

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

Zitat von Bimminger
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