Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 22:22

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Visual Basic If (Process).hasExited Hilfe

Discussion on Visual Basic If (Process).hasExited Hilfe within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1


 
Kira Mikami's Avatar
 
elite*gold: 0
Join Date: Nov 2012
Posts: 1,620
Received Thanks: 1,745
Visual Basic If (Process).hasExited Hilfe

Hey Freunde.

Ich brauche bei einem Code-Schnipsel Hilfe.
Ich möchte, dass Timer1 durchgehend Checkt, ob "Notepad" geschlossen wurde.
Ich möchte nicht wissen, ob der Process läuft, sondern nur ob der Process geschlossen wurde als das Programm schon lief. Dies möchte ich in eine If befehl einbauen:

Code:
If Not Process.GetProcessesByName("Notepad").HasExited Then
            Me.Close()
            Form2.Close()
            Form3.Close()
        End If
Entweder bin ich total blind oder diese Funktion ergibt keinen sinn. Ich weiß das nach "Process.GetProcessesByName("Notepad")" nicht direkt ".HadExited" stehen darf, aber wie mach ich es dann am geschicktesten?

MFG
Kira Mikami is offline  
Old 01/06/2015, 16:15   #2
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
GetProcessesByName liefert dir ein Array der Prozesse. Bevor du also auf HasExited zugreifst, musst du erst angeben, welchen Eintrag du aus diesem Array meinst. Zum Beispiel durch GetProcessesByName("Notepad")(0).HasExited.

Was du jedoch beachten solltest, wenn du das benutzt: du wirst sehr wahrscheinlich eine Exception bekommen, wenn kein Notepad Prozess läuft, da im Array keine Einträge vorhanden sein werden.

Kleines Beispiel:

PHP Code:
dim procs() as process

//button1
procs Process.GetProcessesByName("Notepad")

//button2
if procs.count 0 then
   
for each proc as process in procs 
      
if proc.hasexited then
         msgbox
("process with ID " proc.Id " has exited.")
      else
         
msgbox("process with ID " proc.Id " still running.")
      
end if
   
next
else
   
msgbox("no processes")
end if 
Als Test öffnest du nun einfach mal 3x den Notepad, drückst Button1. Danach schließt du einen Notepad, und guckst mal was dir Button2 sagt.

Ach und nochwas: HasExited solltest du lieber bei den Prozessen benutzen, die du selber in deinem Programm ausführst und in einer Variable speicherst, z.B.

PHP Code:
dim myproc as process process.start("Notepad")
//...
if myproc.hasexited then
//... 
Kraizy​ is offline  
Old 01/06/2015, 18:40   #3

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Arrow General Coding -> .NET Languages

#moved
snow is offline  
Old 01/06/2015, 20:31   #4
 
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
Du brauchst ein Integer Feld Count dann beim Start
Code:
Count = IntegerProcess.GetProcessesByName("Notepad")
und dann im Timer:
Code:
if IntegerProcess.GetProcessesByName("Notepad") < Count Then
  Rem Wurde Beendet
Else
  Count = IntegerProcess.GetProcessesByName("Notepad")
End If
warfley is offline  
Old 01/08/2015, 13:46   #5


 
Kira Mikami's Avatar
 
elite*gold: 0
Join Date: Nov 2012
Posts: 1,620
Received Thanks: 1,745
Quote:
Originally Posted by warfley View Post
Du brauchst ein Integer Feld Count dann beim Start
Code:
Count = IntegerProcess.GetProcessesByName("Notepad")
und dann im Timer:
Code:
if IntegerProcess.GetProcessesByName("Notepad") < Count Then
  Rem Wurde Beendet
Else
  Count = IntegerProcess.GetProcessesByName("Notepad")
End If
Danke für deine Hilfe, aber des klappt bei mir nicht. Ich bin noch nicht SEHR erfahren, ich wüsste nicht wo ich Count = IntegerProcess.GetProcessesByname("Notepad") einfügen müsste.

Quote:
Originally Posted by Kraizy​ View Post
GetProcessesByName liefert dir ein Array der Prozesse. Bevor du also auf HasExited zugreifst, musst du erst angeben, welchen Eintrag du aus diesem Array meinst. Zum Beispiel durch GetProcessesByName("Notepad")(0).HasExited.

Was du jedoch beachten solltest, wenn du das benutzt: du wirst sehr wahrscheinlich eine Exception bekommen, wenn kein Notepad Prozess läuft, da im Array keine Einträge vorhanden sein werden.

Kleines Beispiel:

PHP Code:
dim procs() as process

//button1
procs Process.GetProcessesByName("Notepad")

//button2
if procs.count 0 then
   
for each proc as process in procs 
      
if proc.hasexited then
         msgbox
("process with ID " proc.Id " has exited.")
      else
         
msgbox("process with ID " proc.Id " still running.")
      
end if
   
next
else
   
msgbox("no processes")
end if 
Als Test öffnest du nun einfach mal 3x den Notepad, drückst Button1. Danach schließt du einen Notepad, und guckst mal was dir Button2 sagt.

Ach und nochwas: HasExited solltest du lieber bei den Prozessen benutzen, die du selber in deinem Programm ausführst und in einer Variable speicherst, z.B.

PHP Code:
dim myproc as process process.start("Notepad")
//...
if myproc.hasexited then
//... 
Danke für deine wirklich gute Hilfe, jedoch versteh ich dies auch nicht ganz. Ich bräuchte einen Fertigen Code um das ganze besser nachvollziehen zu können.


PHP Code:
dim procs() as process

//button1
procs Process.GetProcessesByName("Notepad")

//button2
if procs.count 0 then
   
for each proc as process in procs 
      
if proc.hasexited then
         msgbox
("process with ID " proc.Id " has exited.")
      else
         
msgbox("process with ID " proc.Id " still running.")
      
end if
   
next
else
   
msgbox("no processes")
end if 
Der Code funktioniert einfach nicht. Es wird nur folgendes ausgeführt:
PHP Code:
msgbox("no processes"
Auch wenn der Prozess an ist, wird mir folgendes nicht angezeit:
PHP Code:
msgbox("process with ID " proc.Id " still running."
und wenn ich es beende wird mir auch nicht folgendes angezeigt:
PHP Code:
msgbox("process with ID " proc.Id " has exited."
Ich hoffe, du kannst mir da Privat weiterhelfen.
Skype: Schicke ich dir Privat.

Währe dir wirklich vielmals dankbar.
Kira Mikami is offline  
Old 01/08/2015, 17:23   #6
 
elite*gold: 0
Join Date: Aug 2005
Posts: 80
Received Thanks: 13
Die Methode funktioniert einwandfrei.

Du darfst einfach nur nicht den Code in einer Funktion aufrufen.

Ich meine damit du musst schauen ob Notepad offen ist (eventuell mit einem Timer der alle 5 Sekunden schaut ob Notepad offen ist, ist dies der Fall stoppst du den Timer, damit du das Array mit den Prozessen nicht wieder überschreibst, nur so kann später auch erkannt werden ob der Prozess geschlossen wurde. Und wenn der Prozess irgendwann "hasExited" True zurückgibt startest du den Timer wieder so das dein Programm wieder darauf wartet bis Notepad sich öffnet.

Wenn du nämlich den Code so wie oben in eine Funktion schreibst wird wegen diesem Code:
PHP Code:
Dim procs() As Process

procs 
Process.GetProcessesByName("Notepad"
Das Array immer neu gefüllt mit den aktuellen Prozessen und smit kannst du nie den Status hasExited erreichen, da zu der Zeit wo du die Funktion aufrufst das Array neu füllst und in diesem gibt es kein Prozess mehr von Notepad und somit fällst du immer in den "no processes" Fall geworfen.
teto is offline  
Reply


Similar Threads Similar Threads
Hilfe bei Visual Basic
11/30/2013 - .NET Languages - 5 Replies
Bei mir kommt immer wenn ich mein Programm testen will: Fehler 1 "Items" ist kein Member von "System.Windows.Forms.TextBox". Wie kann ich dies beheben ?
!!! Hilfe Visual Basic / Prozess Auslesen / Value Im Textbox Wieder Geben... Hilfe!!!
12/16/2011 - .NET Languages - 10 Replies
So Hey Liebe Leute... Es Geht Um Visual Basic 2010 So Ich Habe eine Frage... So Meine Frage... Ich Habe Mir Ein Kleines Programm Gecodet..
Visual Basic hilfe
08/09/2011 - elite*gold Trading - 0 Replies
Ich suche einen anderen Code, eine Checkbox in einem Webbot auszuwählen als: WebBrowser1.Document.GetElementById("female&q uot;).Focus() SendKeys.Send(" ") Freue mich über eure Hilfe, wer weiß, vllt. gibt es ja ein thx? ;)
Visual Basic 2010-Waiting for Process Label
05/30/2011 - .NET Languages - 6 Replies
#closed



All times are GMT +1. The time now is 22:23.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.