1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Reiterfuchs

Beiträge von Reiterfuchs

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 10. Januar 2018 um 15:09

    So, ich habe es durchprobiert und mich schlau gemacht.

    In der Liste sind u.a. auch Icons von der Taskbar und einige andere Dinge drin. Aber keine Buttons - Yay!

    Ich stele hier noch den Code rein, wie ich mein Objekt auf ein "richtiges" Fenster überprüfe.

    (Wer weis, ob das einmal jemand benötigt)

    AutoIt: GetWindowInformation
    Func GetWindowInformation() ;Get the information of the current window
    
       Local $aList
       Local $bFound
       $hWnd = _WinAPI_WindowFromPoint($g_tStruct)
       $aList = WinList()
    
       While _WinAPI_GetParent($hWnd) <> 0
          $bFound = False
    
          For $i = 1 To $aList[0][0]
             If $aList[$i][1] == $hWnd Then
                $bFound = True
                ExitLoop
             EndIf
          Next
    
          If $bFound == False Then
             $hWnd = _WinAPI_GetParent($hWnd)
          Else
             ExitLoop
          EndIf
       WEnd
    
    EndFunc   ;==>GetWindowInformation
    Alles anzeigen
  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 10. Januar 2018 um 12:54

    Ich habe schon in diese Richtung gedacht. Damit meine ich mir irgendwie eine Liste mit allen Fenstern zu holen und diese dann mit meinem selektierten Objekt abzugleichen. Mit welchen Value würdest du eigentlich die Elemente vergleichen?

    Zitat von alpines

    In WinList tauchen nur Fenster auf und keine Buttons auch wenn intern diese mit einem Window-Handle identifiziert werden.

    Wenn ich folgendes nutze:

    AutoIt
    Local $aList = WinList()
    _ArrayDisplay($aList)

    Bekomme ich eine Liste mit gut 321 Elementen angezeigt bei ... 7 offenen Fenstern.

    Bist du dir da also sicher?

    Mich interessiert hierbei natürlich was die anderen 314 Objekte sind. Vielleicht kannst du mich da aufklären.

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 10. Januar 2018 um 12:31

    Ich bin zwar noch am probieren, aber ich antworte trotzdem jetzt schon einmal. Weil ich vermute, dass dies nicht so einfach ist.

    Mit dem ClassName alleine kann ich hier nicht arbeiten. Das könnte ich nur, wenn jeder seine GUI-Element auch ordentlich benennen würde. Das ist leider Gottes nicht der Fall. Ich lese hier ja Fenster aus, die von Dritten stamen.

    Das mit der WinList werde ich jetzt mal ausprobieren. Allerdings vermute ich, dass das nicht klappen wird.

    Denn zumindest Buttons führt Windows intern als Fenster... Ist also gut möglich, dass er bei einem Vergleich die Buttons durchlässt.

    Jetzt aber erstmal ausprobieren!

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 10. Januar 2018 um 12:04

    Ein weiterer Lösungsansatz wäre herauszufinden ob es sich bei dem herausgezogenen hWnd-Element um ein "richtiges" Fenster handelt oder nur um ein Label, Button oder irgendetwas anderes. Gibt es da eine Möglichkeit dies eindeutig zu indentifizieren?

    Also, ich hole mir zunächst das Objekt via.

    $hWnd = _WinAPI_WindowFromPoint($g_tStruct)

    und möchte nun überprüfen, ob es sich hierbei um ein "richtiges" Fenster oder ein anderes Element wie z.B. einen Button handelt.

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 9. Januar 2018 um 09:38
    Zitat von Bitnugger

    _WinAPI_GetAncestor()

    _WinAPI_GetClassName() ; ein Button ist z. B. "Static"


    _WinAPI_GetWindowLong() ; $GWL_STYLE, $GWL_EXSTYLE

    _WinAPI_IsChild()

    _WinAPI_GetTopWindow()

    _WinAPI_EnumWindowsTop()

    _WinAPI_EnumWindows()_WinAPI_EnumChildWindows()

    _WinAPI_EnumProcessWindows()

    Alles anzeigen

    Erstmal Danke für die Antwort.

    Diese ganzen Funktionen bin ich bereits durchgegangen.

    Wie oben beschrieben ist allerdings auch z.B. ein Button ein Childelement, somit fällt "IsChild" leider heraus.

    Ich möchte explizit prüfen, ob es sich bei meinen herausgezogenen Windowelement um ein modales Fenster handelt.

    Man muss das doch irgendwie überprüfen können.

    Nur ein Beispiel um mein Problem zu veranschaulichen:

    Folgende Elemente sind vorhanden und bauen jeweils aufeinander auf:

    "Main Window" -> "Modal Window 1" -> "Modal Window 2" -> "Button"

    Lösungsansatz "Aktuelles Element auf Child prüfen":

    Nutze ich dies werde ich immer das angeklickte Element bekommen, da auch "Button" ein Childelement ist. Allerding soll ja auf "Modal Window 2" populiert warden. Wenn ich auf eines der Fenster drücke stimmt die Information natürlich.

    Lösungsansatz "Übergeordnetes Element auf Main prüfen":

    Da ich bisher nicht weis ob/wie man ein Element auf Modal überprüft bleibt mir noch die Möglichkeit die Parentkomponente zu überprüfen.

    Ich könnte z.B. überprüfen, ob mein Parentelement das "Main Window" ist und dann aufhören nach oben zu populieren.

    Dabei gibt es ein Problem:

    Drücke ich nicht auf das Main Window bleibe ich immer auf der direct untergeordneten Ebene stecken.

    Drücke ich im oben gezeigten Beispiel auf Button nimmt er "Modal Window 1", es soll aber logischerweise "Modal Window 2" sein.

    Selbiges Problem, wenn ich auf einen Button des "Main Window" drücke werde ich nur die Informationen dieses Buttons bekommen, da, wie gesagt, der Button genau wie ein modales Fenster als Child erkannt wird.

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 8. Januar 2018 um 16:48

    Manchmal ist die Welt so einfach... oder auch nicht.

    Diese Idee war wirklich super. So kann ich ohne Probleme nach oben populieren und einen Screenshot des Fensters Machen.

    AutoIt: GetWindowInformation
    Func GetWindowInformation() ;Get the information of the current window
    
       $hWnd = _WinAPI_WindowFromPoint($g_tStruct)
    
       While _WinAPI_GetParent($hWnd) <> 0 
    
          $hWnd = _WinAPI_GetParent($hWnd)
    
       WEnd
    
    EndFunc   ;==>GetWindowInformation
    Alles anzeigen

    Denn mit dieser Methode populiere ich immer nach ganz oben. Das möchte ich aber unter Umständen nicht. Dieser Umstand ist, wenn ich ein modales Fenster habe. Denn er populier bis zum "Main" Fenster. Wenn ich also beispielsweise das "Find" Fenster I'm Notepad haben möchte populiert er bis zum Notepad Main Fenster.

    Ich habe schon einiges probiert und z.B. für die WPF, also .NET Lösungen gefunden aber keine konnte ich auf AutoIt übertragen.

    z.B. habe ich versucht die Schleife wie folgt zu erweitern:

    AutoIt
    While _WinAPI_GetParent($hWnd) <> 0 And _WinAPI_GetWindow($hWnd, $GW_OWNER) == 0

    Problem: Damit mache ich nun wieder Screenshot von den Buttons, da diese ja auch Childelemente sind.

    Außerdem habe ich folgende Ansätze gefunden:

    https://blogs.msdn.microsoft.com/oldnewthing/20111212-00/?p=8923

    https://stackoverflow.com/questions/3689…window-is-modal

    Es wäre super, wenn du/ihr mir helfen könntet das Erkennen eines modalen Fensters in die Methode einzubausen.

    Vielen lieben Dank!

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 21. Dezember 2017 um 10:04

    Okay, ich muss mich korregieren: Es läuft leider nicht.

    Wie zu Beginn erwähnt soll das Script zur Dokumentation von Installationen dienen. Leider erziehle ich nicht das gewünschte Ergebnis.

    Das Problem ist, was als Fenster erkannt wird: Nehmen wir ein typisches Installationsfenster mit den Buttons "Next" und "Cancel".

    Anstatt das Fenster des Setups festzuhalten wird bei einem Druck auf den "Next"-Button ausschließlich dieser Button fotografiert und nicht das Fenster.

    Ich habe keine Ahnung, was man hier machen könnte.

    Ich zeige euch hier noch die Funktionen, die die Aufnahme managen, Screenshots Machen und die Cursorposition ermitteln:

    Vielen Dank für eure Hilfe!

    AutoIt: CaptureRoutine
    Func CaptureRoutine() ; Manage capturing
    
       Local $iReady = 1
    
       While 1
    
          If ($iReady == 1) Then
    
             ShowToolTip($sTextReady, $TIP_INFOICON, 0)
             $iReady = 0
    
          EndIf
    
          If _IsPressed($sLMB, $hDLL) Then ;Left Mouse Button (with cursor)
    
             HideToolTip()
             TakeSnapshot(True)
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             IncCounter()
    
             While _IsPressed($sLMB, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonSnap, $hDLL) Then ;alternative Snapshot key (without cursor)
    
             HideToolTip()
             TakeSnapshot(False)
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             IncCounter()
    
             While _IsPressed($sButtonSnap, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonFSS, $hDLL) Then ;Full screen Snapshot key (with cursor)
    
             HideToolTip()
             TakeFullScreenSnapshot(True)
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             IncCounter()
    
             While _IsPressed($sButtonFSS, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonPause, $hDLL) Then ;Wait for screenshots
    
             ShowToolTip($sTextPause, $TIP_INFOICON, 0)
             $iReady = 1
    
             While _IsPressed($sButtonPause, $hDLL)
    
                Sleep(50)
    
             WEnd
    
             while 1
    
                If _IsPressed($sButtonPause, $hDLL) Then
    
                   While _IsPressed($sButtonPause, $hDLL)
    
                      Sleep(50)
    
                   WEnd
    
                   ExitLoop
    
                EndIf
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonExit, $hDLL) Then ;Exit program
    
             ExitLoop
    
          EndIf
    
          Sleep(50)
    
       WEnd
    
       DllClose($hDLL)
    
       WordMsgBox()
    
    EndFunc   ;==> CaptureRoutine
    Alles anzeigen
    AutoIt: TakeSnapshot
    Func TakeSnapshot($bCursor) ;Take Snapshot of the current window
    
       GetMousePosition()
       $hWnd = _WinAPI_WindowFromPoint($g_tStruct)
    
       if ($hWnd == 0) Then
    
          TakeFullScreenSnapshot($bCursor)
    
       Else
    
          _ScreenCapture_CaptureWnd($sPath & GetFullPicName(), $hWnd, 0, 0, -1, -1, $bCursor)
    
       EndIf
    
    EndFunc   ;==>TakeSnapshot
    Alles anzeigen
    AutoIt: TakeFullScreenSnapshot
    Func TakeFullScreenSnapshot($bCursor) ;Take Snapshot of the current window (Full Screen Modus)
    
       _ScreenCapture_Capture($sPath & GetFullPicName(), 0, 0, -1, -1, $bCursor)
    
    EndFunc   ;==>TakeSnapshot
    AutoIt: GetMousePosition
    Func GetMousePosition() ;Update the position value
    
       DllStructSetData($g_tStruct, "x", MouseGetPos(0))
       DllStructSetData($g_tStruct, "y", MouseGetPos(1))
    
    EndFunc   ;==>Position
  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 18. Dezember 2017 um 16:12

    Läuft!

    Vielen Dank nochmal.

  • Fensterinformationen via Linksklick entziehen

    • Reiterfuchs
    • 18. Dezember 2017 um 14:43

    Hallo Leute,

    ich arbeite zur Zeit nebenbei an einem kleinen Tool, welches uns die Dokumentation von Installationen erleichern soll.

    Das Tool soll, im wesentlichen, Screenshots generieren, wenn man einen Linksklick ausführt.

    Hinzu kommen noch eine Pausenfunktion und ein paar weitere Hotkeys mit anderen Funktionen.

    Das ganze Script funktioniert soweit einwandfrei. Nun kommt allerdings ein Punkt, an dem ich nicht weiterkomme:

    Ich möchte nämlich keinen Full Screen Screenshot Machen sondern ein Screenshot des Fensters, auf das ich Klicke.

    (bzw. auf dessen Button ich gerade Klicke. Wenn kein Fenster gedrück wurde gibt es einfach wieder einen Full Screen Screenshot.)

    Am Ende findet Ihr den Quellcode des Scriptkerns.

    Wie ihr dort sehen könne "scanne" ich in einer Schleife mittels "_IsPressed()" nach bestimmten Tasten.

    Wird eine dieser Tasten gedrückt wird ein Screenshot ausgeführt, die Pause gestartet oder die Funktion beendet.

    Ich habe sowohl die Funktionen "TakeScreenshot()" als auch "TakeFullScreenScreenshot()". Aktuell enthalten beide den Code des Full Screen.

    Einen Code für den "normalen" Screenshot suche ich noch.

    Dabei dachte ich an https://www.autoitscript.com/autoit3/docs/l…_CaptureWnd.htm

    Hier kann ich ein Screenshot eines Fensters Machen. Allerdings benötige ich dazu die Informationen des Fensters.

    Meine Frage ist an euch wie ich innerhalb dieser Funktionsstruktur (vermutlich innerhalb der jeweilen If-Abfrage) an die Fensterinformationen komme.

    Gibt es eine Möglichkeit an diese mittels _isPressed zu kommen?

    Vielen Dank für jede Hilfe!

    LG

    AutoIt: AutoCaptureTool
    Func CaptureRoutine() ; Manage capturing
    
    Local $iReady = 1
    
       While 1
    
          If ($iReady == 1) Then
    
             ShowToolTip($sTextReady, $TIP_INFOICON, 0)
             $iReady = 0
    
          EndIf
    
          If _IsPressed($sLMB, $hDLL) Then ;Left Mouse Button
    
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             TakeSnapshot()
             IncCounter()
    
             While _IsPressed($sLMB, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonSnap, $hDLL) Then ;alternative Snapshot key
    
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             TakeSnapshot()
             IncCounter()
    
             While _IsPressed($sButtonSnap, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonFSS, $hDLL) Then ;Full screen Snapshot key
    
             ShowToolTip($sTextWorking, $TIP_WARNINGICON, 750)
             $iReady = 1
             TakeFullScreenSnapshot()
             IncCounter()
    
    
             While _IsPressed($sButtonFSS, $hDLL)
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonPause, $hDLL) Then ;Wait for screenshots
    
             ShowToolTip($sTextPause, $TIP_INFOICON, 0)
             $iReady = 1
    
             While _IsPressed($sButtonPause, $hDLL)
    
                Sleep(50)
    
             WEnd
    
             while 1
    
                If _IsPressed($sButtonPause, $hDLL) Then
    
                   While _IsPressed($sButtonPause, $hDLL)
    
                      Sleep(50)
    
                   WEnd
    
                   ExitLoop
    
                EndIf
    
                Sleep(50)
    
             WEnd
    
          ElseIf _IsPressed($sButtonExit, $hDLL) Then ;Exit program
    
             ExitLoop
    
          EndIf
    
          Sleep(50)
    
       WEnd
    
       DllClose($hDLL)
    
       ShowToolTip($sTextExit,  $TIP_ERRORICON, 3000)
    
    EndFunc   ;==> CaptureRoutine
    
    Func TakeSnapshot() ;Take Snapshot of the current window
    
       _ScreenCapture_Capture($sPath & GetFullPicName())
    
    EndFunc   ;==>TakeSnapshot
    Alles anzeigen
  • Textkette aus einem Array für ein Label generieren

    • Reiterfuchs
    • 17. Juni 2016 um 09:09

    Vielen Dank!

    Mit

    AutoIt
    $text1 = $text1&$sName[$i]&Chr(10)

    funktioniert es einwandfrei!

    Das ist ein Nachteil meiner Javadenkweise. :D

    LG

  • Textkette aus einem Array für ein Label generieren

    • Reiterfuchs
    • 16. Juni 2016 um 15:28

    Hallo liebe Leute,

    folgendes Problem. Ich bastel gerade an einer GUI für mein Autoinstllationsprogramm. Um genau zu sein eine Sicherheitsabfrage zu Beginn. In dieser soll aufgezählt werden, was alles installiert wird. (Das kann der Benutzer nämlich konfigurieren). Dazu gibt es eine Textdatei, in der die IDs der Schritte hinterlegt werden, die übersprungen werden sollen.

    So weit, so gut. Die Installationsroutine läuft ebenso wie die GUI in der man das Programm konfiguriert.

    In der Funktion meiner GUI überprüfe ich also wieviele IDs es gibt und welche nicht in der Textdatei vorkommen.
    Nun existiert ein Array in denen die Namen zu den einzelnen Schritten hinterlegt sind. Diese möchte ich nun in einer Textvariable in je einer neuen Zeile zusammenkleben. Das funktioniert aber nicht. Er rechnet mir immer die Summe der IDs aus, welche ausgeführt werden. (Im Test 1 - 20, also zeigt er mir am Ende 210 an.) Ich bin mir also sicher, dass meine Logik zumindest funktioniert.

    Hier einmal der codeausschnitt, in dem ich den Text erstellen möchte:

    AutoIt: startGUI (Ausschnitt)
    ;Lese Control aus & schreibe Text
       For $i = 0 To $anzahl-1 Step 1
    	  If $iControl[$i] == 0 Then
    		 $count += 1
    		 If $count <= 23 Then
    			$text1 += ""+$sName[$i]&Chr(10)
    		 Else
    			$text2 += ""+$sName[$i]&Chr(10)
    		 EndIf
    	  EndIf
       Next
    Alles anzeigen


    Es existieren 2 Textvariablen, da ich 2 Labels habe. Dadurch kann ich auf einfache Weise 2 "Spalten" füllen.

    Ich hoffe ihr könnt mir zeigen, wie ich in Zeile 132. bzw. 134 die Texte richtig untereinander zusammenklebe.
    Wahrscheinlich finde ich einfach nur eine Kleinigkeit nicht. :D

    Vielen Dank für eure Unterstützung!

  • Remote-Desktop-Konfigurations-Befehl funktioniert nicht 100 %ig

    • Reiterfuchs
    • 19. Februar 2016 um 10:47

    Vielen Dank für die Antwort.

    Ich weiß, dass ich hier nicht ganz richtig bin. Doch ich habe dennoch u.a. gedacht hier zu fragen um meine Chancen auf eine passende Antwort zu erhöhen.

  • Remote-Desktop-Konfigurations-Befehl funktioniert nicht 100 %ig

    • Reiterfuchs
    • 18. Februar 2016 um 17:13

    Hallo liebe Leute,

    ich möchte über die CMD die Remoteeinstellungen auf windows 7 konfigurieren.
    Dies klappt auch zu 50 %. Man findet sehr schnell die dazu gehörigen Befehle.

    Ich habe im agehängten Bild markiert, welche Punkte gesetzt werden sollen.
    (Zu finden in der Systemsteuerung unter "System" -> "Remoteeinstellugen")

    Folgenden Befehl nutze ich, um die Einstellungen durch einen Registryeintrag anzupassen:

    AutoIt: enableRD.au3
    #include <Process.au3>
    _RunDos('reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f')


    Dieser Befehl funktioniert einwandfrei, setzt allerdings ausschließlich den Hacken der Box, die ich mit Rot markiert habe.
    Ich möchte allerdings zzgl. den Hacken in der Box setzen, die ich mit Grün markiert habe.

    Und diesen Befehl um auch den Hacken in Grün zu setzen finde ich einfach nicht!
    Ich habe inzwischen einen Haufen an diversen Befehlen ausprobiert - erfolglos.

    Ich hoffe ihr könnt mir einen CMD-Befehl geben, dier mir das aktiviert.

    vielen Dank für eure Hilfe

    LG Reiterfuchs

    Dateien

    rd.png 20,85 kB – 0 Downloads
  • Funktion für Zeilenanzahl

    • Reiterfuchs
    • 4. Februar 2016 um 15:55

    Ich habe ewig gesucht und bin auf nichts gestoßen. Erst gerade eben.
    Mir ist schon klar, dass ich das dort evtl finden kann!
    Aber wenn man sucht und nicht findet kann man doch fragen.

    Egal, denn ich bin auf _FileCountLines gestoßen.

  • Funktion für Zeilenanzahl

    • Reiterfuchs
    • 4. Februar 2016 um 15:48

    Hallo,

    ich suche eine Funktion, die mir die Anzahl der Zeilen eines Textdokumentes zurückgibt.

    LG Reiterfuchs

  • au3-Datei wiederherstellen

    • Reiterfuchs
    • 21. Januar 2016 um 09:28

    Vielen Dank,

    ich werde das heute nebenher mal ausprobieren.

    edit:
    Nope, auch dieses Programm erkennt die au3 Scripte nicht.

  • au3-Datei wiederherstellen

    • Reiterfuchs
    • 20. Januar 2016 um 11:43

    Ja, ich habe den Photorec ausprobiert. In den File Ops sind aber leider keine au3-Datein dabei. D.h er kennt dieses Format nicht

  • au3-Datei wiederherstellen

    • Reiterfuchs
    • 20. Januar 2016 um 11:03

    Hallo Community,

    mir ist gestern leider Gottes ein sehr blöder Leichtsinnsfehler passiert. ;(
    Ich habe beim kopieren der Datei von meiner internen Festplatte auf meine externe Festplatte leider verwechselt, welche die aktuellere Version ist.
    Nun habe ich viele Tage Arbeit vernichtet.

    Ich suche aktuell ein File-Recovery-Programm, welches auch das au3 Format erkennt. Ich habe diverse (Bitte fragt nicht nach Namen) erfolglos durch.
    (Die windowseigene Versionierung war auf der Platte nicht aktiviert, diese Methode fällt also flach.)

    Ich hoffe jemand von euch hat da was auf Lager.

    LG Reiterfuchs

  • Func innerhalb Func möglich?

    • Reiterfuchs
    • 12. Januar 2016 um 11:57

    Okay, das ist mir neu. Naja, man kann nicht alles kennen. Trotzdem entspricht das nicht dem aktuellen Stand der Technik. Ein strikt modular aufgebautes Programm ist heutzutage ja nicht ohne Grund der Standard, ob prozedural oder objektorientiert ;)

    Dennoch sind Funktionen selbst kein geeigneter Speicher für Variablenwerte. Selbstverständlich enthalten viele Funktionen eigene lokale Variablen. Diese gelten allerdings nur für einen Funktionsaufruf. Sie sind aber nicht statisch und somit werden Änderungen an diesen Wert nach dem Beenden des Funktionsdurchlaufs verworfen.

    Wenn ich einen Wert habe, der auch außerhalb des Funktionsumfangs wichtig ist halte ich diesen sicherlich nict als Variable der Funktion fest sondern parametriere sie.
    Im Falle des TE's würde ich die Variablen nicht in der Funktion festhalten, die die Controls enthält sondern übergeordnet als Globale oder als Variable einer umschließenden Mainethode. (Das Ergebnis ist in etwa das gleiche.) Die Werte würde ich als Parameter in die Funktionen übergeben und nach Beendigung der Funktion wieder zurückgeben. Dann kann ich auf anderer Ebene anschließend problemlos mit den modifizierten Werten weiterarbeiten.

    Natürlich ist eine Mainfunktion auch eine Funktion. Allerdings ist deren Umfang ja die Steuerung der Funktionsaufrufe. Somit widerspricht die Hinterlegung der Werte hier nicht den Grundsätzen der Modularisierung.

    Aber wie gesagt, ja alles nur Theorie :D

    LG Reiterfuchs

  • Func innerhalb Func möglich?

    • Reiterfuchs
    • 12. Januar 2016 um 10:47

    In welcher Sprache kann man denn eine Methode in der Methode deklarieren?
    Das ergibt doch keinen Sinn und würde dem Prinzip der Modularisierung hinter der Idee der Methode widersprechen.
    Wenn man in einer OOP programmiert kann man in Objekten zwar Methoden deklarieren. Aber Objekte sind, wie der Name schon sagt, keine Methoden.

    Je nach dem (ich kenne ja deinen Code nicht) lässt sich dein Problem evtl. auch durch geschickt geschachtelte Methoden mit richtig gesetzten Paramtern lösen als Alternative zu den globalen Variablen.

    Eine Funktion dient auch nicht dazu irgendwelche Werte selbst über ihre Laufzeit hinaus zu halten. Dein Vorhaben ist, wenn ich das so richtig verstehe, dann ein schlechter Programmieransatz.

    Wenn du genauere Hilfe möchtest kommst du nicht darum herum deinen Code zu zeigen. So können wir dir nur theoretische Tipps geben.

    LG Reiterfuchs

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™