[HELP] Erkennen wenn Programm Beendet wird. (Task Manager etc)

03/13/2014 23:54 .SenSatioNx3'#1
Wie mach ich das das mein tool mir eine MsgBox absendet wenn der Prozess Test.exe über den Task Manager geschlossen wird?

Hab das Problem mit MySQL. Register, Login und alles klappt nur wenn ich es über den Tast manager schließe führt er die Funktion _Logout() nicht aus wie kann man das ändern.

Danke im vorraus!
03/14/2014 07:04 alpines#2
Du könntest mittels 2. au3 das überwachen, oder eine Gunktion bauen, die beim Neustart des Programmes ausspuckt, das es nicht richtig beendet wurde, oder du baust mal 'ne anständige Logout Funktion.
03/14/2014 15:41 qkuh#3
Was passiert denn in der Funktion Logout? Eventuell hilft hier sowas wie ein Timeout.
03/14/2014 19:53 ~JeSooS~#4
Du könntest ja ne .ini machen in der "true" oder "false" steht

Beispiel:


Code:
;Hier startet das Programm
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

If FileReadLine("name.ini",1) = "true" then
Msgbox(0,"","Normal beendet")
EndIf
If FileReadLine("name.ini",1) = "false" then
Msgbox(0,"","Anders beendet")
EndIf
If FileReadLine("name.ini") = "" Then
   MsgBox(0,"","Erststart")
EndIf

FileDelete("name.ini")
FileWrite("name.ini","false")


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
		FileDelete("name.ini")
FileWrite("name.ini","true")
Exit

	EndSwitch
WEnd
Oder soetwas wie eine 2e .exe als Komponente benutzen
Code der zweiten .exe:

Code:
While 1
   If Not ProcessExists("hiername") Then
	  MsgBox(0,"","Du hast dich nicht ausgeloggt !")
	  ;(falls du willst hier noch ein Exit rein, falls sich das Programm beenden soll oder halt einen Neustart per ShellExecute("hiername")
   EndIf
WEnd
Quote:
Dann muss aber im Programmcode der 1en Exe stehen:

Case $GUI_EVENT_CLOSE
Processclose("hier name der 2ten exe")
Exit
Kannst falls du einen Logout Button hast das ganze ja nicht auf $GUI_EVENT_CLOSE Legen sondern auf den Login Button eben :)

Hoffe du ahst sowas gemeint xD
03/14/2014 20:03 YatoDev#5
du hast glaub ih nicht verstanden wie man eine ini benutzt und erstellt
03/14/2014 20:05 ~JeSooS~#6
Quote:
Originally Posted by »FlutterShy™ View Post
du hast glaub ih nicht verstanden wie man eine ini benutzt und erstellt
Das ist egal, deswegen hab ich z.B gesagt O.o

Es muss irgendeine Datei sein kann auch ne .deuddehudehwuöde Datei sein Hauptsache es steht was in der ersten zeile.

Mir ist die Dateiendung .ini einfach so zuerst in den Sinn gekommen also hab ich die benutzt. Ich mach mir doch jetzt keine Gedanken welche Dateiendung ich für ein Beispielscript nehme o.O
03/14/2014 20:09 YatoDev#7
solltest du da .ini ein bekanntes format ist und man für andere sachen die nicht in diesem format sind doch einfach .txt nehmen kann.
bei einer einzigen zahl lohnt sich vielleicht auch die registry oder halt eine unformatierte datei.
FileOpen zu benutzen wäre auch besser
03/14/2014 20:11 ~JeSooS~#8
Quote:
Originally Posted by »FlutterShy™ View Post
solltest du da .ini ein bekanntes format ist und man für andere sachen die nicht in diesem format sind doch einfach .txt nehmen kann.
bei einer einzigen zahl lohnt sich vielleicht auch die registry oder halt eine unformatierte datei.
FileOpen zu benutzen wäre auch besser
Naja in nem richtigem Script würd ich das auch nicht machen
Dashier hab ich in paar sek hingeschissen ^^
03/14/2014 20:17 .SenSatioNx3'#9
@alpines & @qkuh:
In Der Logout steht nur das In der MySQL Datenbank dann unter "Status" ONLINE oder OFFLINE stehen soll sodass man dann erkennt wer gerade die .exe benutzt.

Logout.php:
Code:
<?php
require_once('db_config.php');

mysql_connect($host, $user, $pass);

mysql_select_db($dbase);

$Passwort = mysql_real_escape_string($HTTP_GET_VARS['passwort']);

$result = mysql_query("SELECT * FROM User WHERE Benutzername='" . $Benutzername . "'");

$row = mysql_fetch_row($result);

$status = mysql_query("UPDATE INTO User SET `Status` = 'OFFLINE' WHERE Benutzername = $Benutzername");

mysql_query("UPDATE User SET Status = 'OFFLINE' WHERE Benutzername = '$Benutzername'");

if ($row)
{
    $Dbmd5Passwort = $row[1];
    )
	if (md5($Passwort) == $Dbmd5Passwort)     
        {
        echo 1;
            }
        else
        {
			echo 2;
            }
	}
else
{
    echo 0;
	}
?>
_Logout Funktion:

Code:
Func _Logout($sBenutzername = "", $sPasswort = "")
    $iRValue = _INetGetSource("http://www....de/logout.php?benutzername=" & $sBenutzername & "&passwort=" & $sPasswort)

    Switch $iRValue
        Case 0
            MsgBox(16, "Error", "Logout fehlgeschlagen!")
        Case 1
            MsgBox(32, "Info", "Erfolgreich Ausgeloggt!")
			Exit
        Case 2
            MsgBox(16, "Error", "Der Benutzername ist bereits Ausgeloggt!")
        Case 3
            MsgBox(16, "Error", "Es ist ein Unbekannter Fehler aufgetreten!")
    EndSwitch
EndFunc   ;==>_Logout
@qkuh:
Wie mit Timeout wie meinst du das?

@~JeSooS~:
Du meinst jetzt das bei jedem neustart der .exe die ini ausgelesen werden soll und ihn/sie drauf hinweisen soll?
03/14/2014 20:20 ~JeSooS~#10
Quote:
Originally Posted by .SenSatioNx3' View Post
@alpines & @qkuh:
In Der Logout steht nur das In der MySQL Datenbank dann unter "Status" ONLINE oder OFFLINE stehen soll sodass man dann erkennt wer gerade die .exe benutzt.

Logout.php:
Code:
<?php
require_once('db_config.php');

mysql_connect($host, $user, $pass);

mysql_select_db($dbase);

$Passwort = mysql_real_escape_string($HTTP_GET_VARS['passwort']);

$result = mysql_query("SELECT * FROM User WHERE Benutzername='" . $Benutzername . "'");

$row = mysql_fetch_row($result);

$status = mysql_query("UPDATE INTO User SET `Status` = 'OFFLINE' WHERE Benutzername = $Benutzername");

mysql_query("UPDATE User SET Status = 'OFFLINE' WHERE Benutzername = '$Benutzername'");

if ($row)
{
    $Dbmd5Passwort = $row[1];
    )
	if (md5($Passwort) == $Dbmd5Passwort)     
        {
        echo 1;
            }
        else
        {
			echo 2;
            }
	}
else
{
    echo 0;
	}
?>
_Logout Funktion:

Code:
Func _Logout($sBenutzername = "", $sPasswort = "")
    $iRValue = _INetGetSource("http://www....de/logout.php?benutzername=" & $sBenutzername & "&passwort=" & $sPasswort)

    Switch $iRValue
        Case 0
            MsgBox(16, "Error", "Logout fehlgeschlagen!")
        Case 1
            MsgBox(32, "Info", "Erfolgreich Ausgeloggt!")
			Exit
        Case 2
            MsgBox(16, "Error", "Der Benutzername ist bereits Ausgeloggt!")
        Case 3
            MsgBox(16, "Error", "Es ist ein Unbekannter Fehler aufgetreten!")
    EndSwitch
EndFunc   ;==>_Logout
@qkuh:
Wie mit Timeout wie meinst du das?

@~JeSooS~:
Du meinst jetzt das bei jedem neustart der .exe die ini ausgelesen werden soll und ihn/sie drauf hinweisen soll?
Sozusagen oder eben die Zweite Variante mit der 2ten komponente
03/14/2014 20:24 .SenSatioNx3'#11
Gut aber jeder der ein bisschen ahnung von sowas hat weiß auch das die 2te .exe einen betimmten namen hat und diese einfach schließen kann oder würd das dann klappen wenn man in beide scripts den code einbindet aber das problem ist ja man kann keine 2 .exe gleichzeitig starten..
03/14/2014 20:28 ~JeSooS~#12
Quote:
Originally Posted by .SenSatioNx3' View Post
Gut aber jeder der ein bisschen ahnung von sowas hat weiß auch das die 2te .exe einen betimmten namen hat und diese einfach schließen kann oder würd das dann klappen wenn man in beide scripts den code einbindet aber das problem ist ja man kann keine 2 .exe gleichzeitig starten..
Anfang des ersten scripts also das Main Programm:
ShellExecute(2te.exe)
Läuft schonmal die 2te exe
Code der Zweiten Exe einfach in die erste mit renihauen, blos den Namen ändern.
Schon überprüfen sich die dinger gegenseitig
03/14/2014 20:33 .SenSatioNx3'#13
Code:
ShellExecute("2.exe")

While 1
   If Not ProcessExists("2.exe") Then
	  MsgBox(0,"1.exe","Du hast dich nicht ausgeloggt!")
	  ShellExecute("2.exe")
   EndIf
WEnd
Code:
While 1
   If Not ProcessExists("1.exe") Then
	  MsgBox(0,"2.exe","Du hast dich nicht ausgeloggt!")
	  ShellExecute("1.exe")
   EndIf
WEnd
Und dabei dann noch mit dem speichern der .txt bzw .ini oder sonnst was ist für mich ausreichend.

Danke für eure hilfe bekommt jeder ein Thanks! :)
03/15/2014 23:33 Asuramaru#14
Wenn es nur darum geht das der Logout nicht ausgeführt wird, kannst du auch alles vom Webserver regeln lassen.

Leg ne Session beim LogIn an die bei Inaktivität automatisch ausloggt.
(Script sollte regelmäßig etwas aufrufen um den Timer zurückzusetzen)

Alternativ schreib einfach in eine Spalte der Tabelle wann die letzte Aktivität stattgefunden hat und lass diese dann einfach überprüfen wenn du sehen willtst wer Online ist. (zB. Letzte Aktivität vor 10min ~> Offline)