Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 16:45

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

Advertisement



Status Abfragen lässt sich nicht aktualisieren

Discussion on Status Abfragen lässt sich nicht aktualisieren within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
Neku!'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,106
Received Thanks: 13,585
Status Abfragen lässt sich nicht aktualisieren

Tag, bin noch relativ frisch bei AutoIt dabei und schon bin ich auf ein Problem gestossen was ich nicht so leicht lösen kann.
Eventuell kann mir dabei jemand helfen.

Es geht um folgendes, mein Script soll bei einem Buttonclick den Status Abfragen ob notepad.exe offen ist oder nicht.
Kleines Beispiel:
Nehmen wir an ich habe Notepad beim Programmstart offen, so aktualisiert sich der Status in "Notepad Online". Soweit alles korrekt jedoch wenn ich nun Notepad wieder schliesse und auf den Statusbutton klicke (der eigentlich den Status aktualisieren sollte in "Notepad ist Offline"), passiert nichts. Der Status lässt sich mit dem Button nicht mehr verändern egal ob Notepad offen oder geschlossen ist.


So sieht mein Script aus:

PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include-once

#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Status Abfragen"19181192114)
$StatusBar1 _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetSimple($StatusBar1)
_GUICtrlStatusBar_SetText($StatusBar1"Aktueller Status")
_GUICtrlStatusBar_SetMinHeight($StatusBar123)
$refbutton GUICtrlCreateButton("Status Abfragen"281213933$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $windowname ProcessExists("notepad.exe")

Func stat()
    If 
$windowname 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf
EndFunc

stat
()
While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$refbutton
            stat
()
    EndSwitch

WEnd 
Neku! is offline  
Thanks
36 Users
Old 05/25/2010, 08:29   #2
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Jack990 View Post
Tag, bin noch relativ frisch bei AutoIt dabei und schon bin ich auf ein Problem gestossen was ich nicht so leicht lösen kann.
Eventuell kann mir dabei jemand helfen.

Es geht um folgendes, mein Script soll bei einem Buttonclick den Status Abfragen ob notepad.exe offen ist oder nicht.
Kleines Beispiel:
Nehmen wir an ich habe Notepad beim Programmstart offen, so aktualisiert sich der Status in "Notepad Online". Soweit alles korrekt jedoch wenn ich nun Notepad wieder schliesse und auf den Statusbutton klicke (der eigentlich den Status aktualisieren sollte in "Notepad ist Offline"), passiert nichts. Der Status lässt sich mit dem Button nicht mehr verändern egal ob Notepad offen oder geschlossen ist.


So sieht mein Script aus:

PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include-once

#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Status Abfragen"19181192114)
$StatusBar1 _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetSimple($StatusBar1)
_GUICtrlStatusBar_SetText($StatusBar1"Aktueller Status")
_GUICtrlStatusBar_SetMinHeight($StatusBar123)
$refbutton GUICtrlCreateButton("Status Abfragen"281213933$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $windowname ProcessExists("notepad.exe")

Func stat()
    If 
$windowname 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf
EndFunc

stat
()
While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$refbutton
            stat
()
    EndSwitch

WEnd 
Ist doch irgendwie logisch oder ?
Wenn du nur einmal überprüfen lässt ob Notepad offen ist , dann wird auch immer dieser Wert genommen .

Btw Globale Variablen mit Global zu initialisieren ist kein schöner Stil .

Dein Skript :
PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include-once

$windowname 0

#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Status Abfragen"19181192114)
$StatusBar1 _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetSimple($StatusBar1)
_GUICtrlStatusBar_SetText($StatusBar1"Aktueller Status")
_GUICtrlStatusBar_SetMinHeight($StatusBar123)
$refbutton GUICtrlCreateButton("Status Abfragen"281213933$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Func stat()
        
$windowname ProcessExists("notepad.exe")
    If 
$windowname 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf
EndFunc

stat
()
While 
1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$refbutton
            stat
()
    EndSwitch

WEnd 
Shadow992 is offline  
Thanks
3 Users
Old 05/25/2010, 15:11   #3
 
Neku!'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,106
Received Thanks: 13,585
Seh ich das richtig, die Variable muss hierfür also immer auch in der Funktion selber deklariert werden? Wenn ja, warum genau?

Ich zweifle natürlich nicht an der Richtigkeit, möchte es nur ganz genau wissen, so kann ich es mir für die Zukunft besser merken.


Quote:
Btw Globale Variablen mit Global zu initialisieren ist kein schöner Stil .
Hier auch noch bitte eine Erklärung wieso man das nicht machen sollte.

Das wären erstmal meine offene Fragen.

Zum Script selber kann ich nur sagen, es funktioniert jetzt und dafür bekommst du ein großes Thanks.
Neku! is offline  
Thanks
2 Users
Old 05/25/2010, 16:31   #4
 
bassbanane's Avatar
 
elite*gold: 116
Join Date: Oct 2007
Posts: 677
Received Thanks: 248
ist doch logisch.
Er fragt die Variable VOR der funktion ab heißt wenn es offen ist steht dort 1.
Nun wenn du den Button drückst sagt er dir natürlich dass es läuft weil die Variable = 1 ist.
Diese ändert sich aber natürlich nicht mehr, weil du in der while schleife hängst, heißt sie bleibt bei 1.
Also musst du sie auch in der Funktion neu auslesen damit auch alles seine Richtigkeit hat.
Denn wenn du es so machst
PHP Code:
Func stat()
    If 
$windowname 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf
EndFunc 
Wird bei jedem klick auf den Button neu geguckt, ob das Notepad noch offen ist. Versteht sich eigentlich von selbst. Du willst ja auch wissen, ob es jetzt läuft und nicht ob es nur beim Programmstart lief.
bassbanane is offline  
Thanks
1 User
Old 05/25/2010, 16:53   #5
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Jack990 View Post
Seh ich das richtig, die Variable muss hierfür also immer auch in der Funktion selber deklariert werden? Wenn ja, warum genau?

Ich zweifle natürlich nicht an der Richtigkeit, möchte es nur ganz genau wissen, so kann ich es mir für die Zukunft besser merken.




Hier auch noch bitte eine Erklärung wieso man das nicht machen sollte.

Das wären erstmal meine offene Fragen.

Zum Script selber kann ich nur sagen, es funktioniert jetzt und dafür bekommst du ein großes Thanks.
Zu 1. siehe oben .

zu 2. AutoIt erwartet bei Global , Local und Dim Arrays , da du aber kein Array haben willst , macht dir AutoIt ein Array mit einem Wert draus (was eig. kein Array mehr ist) , bei mir kam es z.b. schon öffters vor , dass wenn eine Variable mit Global zu oft neu beschrieben wurde , dass die Werte dann etwas vertauscht wurden (ka ich hatte einfach irgendwelche komisch Werte in den Variablen , die mit dem eig. Skript wenig zu tun hatten , ich denke es war die "Array-Adresse" , aber genaueres kann ich auch nicht sagen) .

Außerdem kannste dir mit meiner Methode bisschen Schreibarbeit sparen

Bei Arrays musst du natürlich Global/Local/Dim davor setzen , sonst werden die nicht als Arrays erkannt und es gibt einen Error !
Shadow992 is offline  
Thanks
1 User
Old 05/26/2010, 00:57   #6
 
Neku!'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,106
Received Thanks: 13,585
Danke euch beiden. Ihr habt mir sehr geholfen. Meine Fragen sind erstmal geklärt, werde aber sicherlich früher oder später wieder die Hilfe der Profis brauchen.


Edit 26 Mai, neue Frage:
Da wir schon bei diesem Thema sind, eine Frage ist mir doch noch eingefallen.
Wenn ich nun die Funktion "stat()" in der While Schleife hinzufüge, flimmert/flackert die ganze GUI.
Das möchte ich natürlich verhindern, da es erstens nicht schön aussieht und zweitens das Programm erheblch verlangsamt. Es soll also schon automatisch den Status abfragen und aktualisieren jedoch nur wenn sich der Status wirklich verändert.
Neku! is offline  
Old 05/26/2010, 12:58   #7
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Jack990 View Post
Danke euch beiden. Ihr habt mir sehr geholfen. Meine Fragen sind erstmal geklärt, werde aber sicherlich früher oder später wieder die Hilfe der Profis brauchen.


Edit 26 Mai, neue Frage:
Da wir schon bei diesem Thema sind, eine Frage ist mir doch noch eingefallen.
Wenn ich nun die Funktion "stat()" in der While Schleife hinzufüge, flimmert/flackert die ganze GUI.
Das möchte ich natürlich verhindern, da es erstens nicht schön aussieht und zweitens das Programm erheblch verlangsamt. Es soll also schon automatisch den Status abfragen und aktualisieren jedoch nur wenn sich der Status wirklich verändert.
Na ist doch ganz einfach ...
PHP Code:
$statusalt=0

if processexists(...) != $statusalt  then
    $statusalt
=processexists(...)
    If 
$statusalt 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf 
endif 
So sollte es gehen .
Shadow992 is offline  
Old 05/26/2010, 15:01   #8
 
Neku!'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,106
Received Thanks: 13,585
Ich habe jetzt verschiedene Varianten probiert. Einmal mit eine ganz neue Variable dann wiederum mit der "$windowname" Variable aber keins davon hat funktioniert. Wahrscheinlich verstehe ich deinen Code einfach falsch und setze es an der falschen Stelle. Bräuchte doch paar Erklärungen dazu.

Mein Script sieht in Moment so aus:
Neku! is offline  
Old 05/26/2010, 15:33   #9
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by Jack990 View Post
Ich habe jetzt verschiedene Varianten probiert. Einmal mit eine ganz neue Variable dann wiederum mit der "$windowname" Variable aber keins davon hat funktioniert. Wahrscheinlich verstehe ich deinen Code einfach falsch und setze es an der falschen Stelle. Bräuchte doch paar Erklärungen dazu.

Mein Script sieht in Moment so aus:
Oh nein , war mein Fehler ^^
Hab das Ungelicheitszeichen falsch gemacht (war ich von C++ so gwöhnt , also bitte nicht böse nehmen ) , es müsste natürlich so heßen :
PHP Code:
#RequireAdmin
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include-once

#Region ### START Koda GUI section ### Form=
$Form1 GUICreate("Status Abfragen"19181192114)
$StatusBar1 _GUICtrlStatusBar_Create($Form1)
_GUICtrlStatusBar_SetSimple($StatusBar1)
_GUICtrlStatusBar_SetText($StatusBar1"Aktueller Status")
_GUICtrlStatusBar_SetMinHeight($StatusBar123)
$refbutton GUICtrlCreateButton("Status Abfragen"281213933$WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$windowname 0
$stat 
0

Func stat
()
    
$windowname ProcessExists("notepad.exe")
    If 
$windowname 0 Then
        _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
    Else
        
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
    EndIf
EndFunc


Func stat2
()
    If 
ProcessExists("notepad.exe") <> $stat Then
        $stat 
ProcessExists("notepad.exe")
        if 
$stat 0 Then
            _GUICtrlStatusBar_SetText
($StatusBar1"Notepad ist Offline")
        Else
            
_GUICtrlStatusBar_SetText($StatusBar1"Notepad Online")
        EndIf
    EndIf
EndFunc  neue Funktion


While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
        Case 
$refbutton
            stat
()
    EndSwitch
    
stat2()
WEnd 
Shadow992 is offline  
Thanks
1 User
Old 05/26/2010, 17:01   #10
 
Neku!'s Avatar
 
elite*gold: 0
Join Date: May 2010
Posts: 1,106
Received Thanks: 13,585
Da bin ich ja beruhigt, dachte schon ich wäre etwas schwer von Begriff.
Natürlich nehm ich dir das nicht übel, kleine Fehler passieren jedem mal. Dieses Zeichen "<>" ist wohl dabei von entscheidender Bedeutung.
Wie immer super Hilfe. Danke, nun geht alles.
Neku! is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
LC Lässt sich nicht starten! help pls
09/26/2010 - Last Chaos - 5 Replies
also mein problem ist das ich lastchose nicht starten kann! ich starte die exe dann kommt der launcher alles updates alles in ordnung nu klicke ich auf start und der launcher geht aus und nix passiert...! habe schon google gesucht wie ein doofer nix gefunden -.- offizelle deutsche seite kann ich nicht posten warum ka trotz email bestätigung! neuinstall habe ich auch schon gemacht sowie kompatiblitäts modus auf win xp sp 2 gestellt und adminrechte natürlich auch! mein betriebssystem...
[HELP] shop_item lässt sich nicht öffnen
09/13/2010 - Metin2 Private Server - 2 Replies
wenn ich die shop_item öffnen will kommt da immer " 1034 - Incorrect key for table shop_item try to repair it ich hab auch schon versucht ein backup rauf zu tun aber leider kommt da immer unsucsesfull... ( Rootserver ) danke für die hilfe
Item_proto lässt sich nicht ändern?
05/20/2010 - Metin2 Private Server - 0 Replies
Hey ich habe ein Problem! Ich habe meine Item_proto entpackt und das trag-lvl der 85+ Waffen geändert. Habe z.b. das lvl zum tragen von Tödlicher Klinge von 92 auf 90 geändert von +0-+9. Wieder eingepackt,alles erfolgreich und in meinen neonblue-Clienten getan. Nichts passiert...ist immernoch ab 92 ingame auf der Anzeige...hab sie extra nochmal entpackt und mich versichert das es geklappt hat.
lässt sich nicht compilen [fehler]
01/10/2010 - AutoIt - 2 Replies
also ich kann mein bot nicht compilen da ein fehler drinne is hier mal mein code: seht ihr irgendwo fehler ?
l2.ini lässt sich nicht decrypten
08/20/2005 - Lineage 2 - 4 Replies
huhu! ich habe mir eben l2decrypt runtergeladen, um die ip und das protokoll von l2extreme aus der l2.ini auslesen zu können. es funtkioniert aber nicht, ich habe alle 4 methoden, die angeboten werden, ausprobiert (111...) es kommt entweder nur zeichensalat oder bei ner anderen methode vierecke dabei raus. please help! was mache ich falsch? ich habe definitiv decrypt ausgewählt und nicht encrypt... pony3000



All times are GMT +2. The time now is 16:45.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.