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. XovoxKingdom

Beiträge von XovoxKingdom

  • Fremde Fenster und Taskleiste

    • XovoxKingdom
    • 18. März 2010 um 13:06

    Zu Problem 1:

    Spoiler anzeigen
    [autoit]

    $PID = Run("notepad.exe")
    ProcessWait($PID)
    $var = WinList()

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $var[0][0]
    If $var[$i][0] <> "" And WinGetProcess($var[$i][0]) = $PID Then
    $titel = $var[$i][0]
    $handle = WinGetHandle($var[$i][0])
    MsgBox(0, 1, "Fenstername : " & $titel & @CRLF & "Fensterhandle (zum Weiterarbeiten) : " & $handle & @CRLF & "ProzessID : " & $PID)
    WinSetState($handle, "", @SW_MAXIMIZE)
    Exit
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Func IsVisible($handle)
    If BitAND(WinGetState($handle), 2) Then
    Return 1
    Else
    Return 0
    EndIf
    EndFunc ;==>IsVisible

    [/autoit]


    Nun kannst du mit dem Handle des Fensters (unabhängig von dem Namen) das Fenster manipulieren!
    //Edit: Nochmals um 2 Zeilen reduziert ;)

  • Nach Compileren zur Exe ist das GUI ohne eingefügten Bildern (Background/Buttons)

    • XovoxKingdom
    • 18. März 2010 um 11:53

    Bevor die Frage kommt: "Wie funktioniert das? bei mir kommt ein ERROR!"
    Du musst bei Fileinstall den Source (=Quellpfad) vollständig eintippen - Ohne Variablen oder Makros!!

  • Wie wäre es mit einem Co-Moderator?

    • XovoxKingdom
    • 17. März 2010 um 18:27

    Die Idee eines Co-Moderators finde ich gut und ich würde die Arbeit eines solchen auch
    auf die Spoiler/Quelltext -korrektur erweitern. Immer wieder gibt es Probleme damit
    und wenn ein Code "richtig" dargestellt wird, dann ist die Hilfe auch einfacher.

  • Negative Variabeln

    • XovoxKingdom
    • 16. März 2010 um 20:43

    Negative Variablen kannst du doch einfach mit der Multiplikation mit -1 erreichen.
    Falls du zufällig eine positive oder negative Zahl haben willst, kannst du doch einfach
    einen Random(1,2,0) machen und anschließend den Rest mit Random berechnen.

  • Kleines Game (problem)

    • XovoxKingdom
    • 16. März 2010 um 20:33

    Vielleicht hilft dir der Ansatz (auf die Mausposition bezogen - lässt sich aber auch auf andere Controls umschreiben)

    Spoiler anzeigen
    [autoit]

    $gui=GUICreate("TESTGUI",400,400)
    $x=100
    $y=100
    $w=50
    $h=100
    $Graphic=GUICtrlCreateGraphic($x,$y,$w,$h)
    $Label = GUICtrlCreateLabel("",4,4,100,21)
    GUICtrlSetColor($Graphic,0xFF0000)
    GUISetState()
    While 1
    If GUIGetMsg() = -3 Then Exit
    $Cursor = GUIGetCursorInfo()
    If $Cursor[0] > $x And $Cursor[0] < $x+$w And $Cursor[1] > $y And $Cursor[1] < $y+$h Then
    If GUICtrlRead($Label) <> "Innerhalb" Then
    GUICtrlSetData($Label,"Innerhalb")
    EndIf
    Else
    If GUICtrlRead($Label) <> "Außerhalb" Then
    GUICtrlSetData($Label,"Außerhalb")
    EndIf
    EndIf
    Sleep(10)
    WEnd

    [/autoit]
  • TXT-Editor

    • XovoxKingdom
    • 16. März 2010 um 20:16

    Mir war grad langweilig drum nehmt es mir nicht übel das fertige Script schon zu liefern:

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    Global $DLL = DllOpen("user32.dll"), $i = 0
    Opt("wintitlematchmode",2)
    Run("Notepad.exe")
    WinWait("Editor")
    WinActivate("Editor")
    $pause = 100; Pause nach JEDEM Tastenanschlag in ms
    $Zeilen = 3
    Dim $Text[$Zeilen]
    $Text[0] = "Hallo"; Erstes Element mit Index 0
    $Text[1] = "Was geht?"; Zweites Element mit Index 1
    $Text[2] = "Man sieht sich!"; Letztes Element
    ; Dieses ist das Letzte Element, das IMMER(!) den Wert von $Zeilen - 1 besitzen muss!!!
    Opt("sendkeydelay",$pause)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    If WinActive("Editor")=True And _IsPressed("01",$DLL) Then
    While _IsPressed("01",$DLL)
    Sleep(10)
    WEnd
    Send($Text[$i]&@CR,1)
    $i += 1
    If $i > $Zeilen-1 Then ExitLoop
    EndIf
    Sleep(10)
    WEnd

    [/autoit]
  • Automatisches schreiben fehler

    • XovoxKingdom
    • 15. März 2010 um 21:06

    Bei mir funktioniert es auch tadellos...
    Ich kann mir zwar nicht vorstellen, dass der Prozess des Fensteraktivierens so viele Ressourcen (/und somit auch Zeit kostet),
    dass der Send Befehl "ins Nichts" geht, aber probieren kannst du es trotzdem mit:
    WinWaitActive()

    PS: Ich würde auch eher auf die Version von Mahagon verweisen, da du mit der Methode auf der sicheren Seite bist ;)

  • Class Edit auf Inhalt prüfen

    • XovoxKingdom
    • 15. März 2010 um 20:42

    *aus dem Ärmel schüttel*

    [autoit]

    $Title = "";Hier der Titel des Fensters
    $Edit = ""; Hier den Namen der Class z.B. "Edit1"
    While True
    if Controlgettext($Title,"",$Edit) <> "" Then Exitloop
    sleep(10)
    Wend
    MsgBox(0,0,"TEXT")

    [/autoit]
  • Farbenfragen

    • XovoxKingdom
    • 14. März 2010 um 14:40

    Zu Problem 1:
    Du solltest Standardfarben setzen, damit das Script nicht auf eine Variable zugreifen will, die noch nicht initialisiert wurde.
    (Eventuell ist auch ein Fehlerabfangen sinnvoll, wenn der Farbauswahldialog "-1" zurückgibt)

  • Guiname mittig

    • XovoxKingdom
    • 13. März 2010 um 16:33

    Im großen und ganzen keine schlechte idee mit StringLen.. jedoch ist nicht jedes Zeichen "gleich groß"
    Hier ein Testscript:

    [autoit]

    #include<string.au3>
    $a=_StringRepeat("i",30)
    $b=_StringRepeat("W",30)
    GUICreate($a,800,200)
    GUISetState()
    Sleep(4000)
    WinSetTitle($a,"",$b)
    sleep(4000)

    [/autoit]

    Ich meinte Bugfix hätte mal eine Funktion _MeasureString oder so ähnlich geschrieben,
    die berechnet wie viele Pixel zur Darstellung benötigt werden

  • array test script

    • XovoxKingdom
    • 13. März 2010 um 16:22

    Existieren alle Pfade? Exitstiert die Ziel/Quelldatei (bereits)? - das wären noch Verbesserungsvorschläge...
    zu dem Script:
    Ubound liefert immer die Anzahl ALLER(!) Elemente zurück, jedoch beginnt die Zuweisung mit 0 (und NICHT mit 1)
    d.h. das Letzte Element hat den Index von Ubound($Array)-1
    Index 0 = Element 1
    Index n-1 = Element n

    demnach muss dein Script wiefolgt lauten:

    [autoit]

    #Include <Array.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Local $array1[3]
    $array1[0] = "C:\Users\Domi\Desktop\array test\Ziel 1\datei 1.txt"
    $array1[1] = "C:\Users\Domi\Desktop\array test\Ziel 1\datei 2.txt"
    $array1[2] = "C:\Users\Domi\Desktop\array test\Ziel 1\datei 3.txt"

    [/autoit][autoit][/autoit][autoit]

    Local $array2[3]
    $array2[0] = "C:\Users\Domi\Desktop\array test\Ziel 2\datei 1.txt"
    $array2[1] = "C:\Users\Domi\Desktop\array test\Ziel 2\datei 2.txt"
    $array2[2] = "C:\Users\Domi\Desktop\array test\Ziel 2\datei 3.txt"

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound ($array1)-1 Step +1 ;hier ist die Änderung (-1)

    [/autoit][autoit][/autoit][autoit]

    FileMove ($array1[$i], $array2[$i] )
    Next

    [/autoit]
  • Durch verschiedene Wörter verschiedene Befehle aus lösen!

    • XovoxKingdom
    • 13. März 2010 um 16:16

    Da das Feld (wo der Text drin steht) nicht direkt mit Controlbefehlen auszulesen ist,
    kannst du es mit einem Workaround lösen:
    Lass die Maus via Mouseclick in das Feld klicken,
    sende mit Send Strg+A (alles markieren) und überprüfe
    mit dem Programm(-ansatz) die Zwischenablage mit clipget.
    Dieser Code sollte den aktiven Text auslesen können:

    [autoit]

    $sTitle = "Posteingang - Mozilla Thunderbird"
    WinWait($sTitle)
    WinActivate($sTitle)
    WinWaitActive($sTitle)
    $pos = ControlGetPos($sTitle,"","MozillaWindowClass11")
    MouseClick("Left",$pos[0]+$pos[2]/2,$pos[1]+$pos[3]/2)
    Sleep(2000)
    Send("^a")
    Sleep(2000)
    Send("^c")
    $Text = ClipGet()
    WinSetState($sTitle,"",@SW_MINIMIZE)
    MsgBox(0,"Ausgelesener Text",$Text)

    [/autoit]
  • Guiname mittig

    • XovoxKingdom
    • 13. März 2010 um 13:47

    Falls du eine "eigene" Gui erstellen willst, dann ist das folgende Beispiel vielleicht interessant für dich:
    (Ist ein Zip-Archiv mit Quellcode, den benötigten Grafikten und einer EXE version)

    PS: Wenn du es selber compilen willst, dann musst du erst die Fileinstallpfade anpassen!

    //Edit: Der eine oder andere wachsame Fuchs mag bemerkt haben, dass der Title NICHT mittig ist...
    Das liegt jedoch nur an der bisherigen Einstellung von $tLayout (2x im Quellcode vorhanden)

    Dateien

    GUI Form.zip 594,01 kB – 275 Downloads
  • AutoItObject - OOP für AutoIt

    • XovoxKingdom
    • 13. März 2010 um 12:10

    Vielen Dank für deine Mühe :)
    Ohne die Hilfedatei intensiv studieren zu müssen hab ich schon die ersten kleinen Erfahrungen
    mit OOP machen können :D
    Nochmal ein dickes THX an alle Beteiligten des Projekts! :thumbup:

  • AutoItObject - OOP für AutoIt

    • XovoxKingdom
    • 13. März 2010 um 11:39

    Ich würde gerne mal mit der OOP rumexperimentieren, doch leider gibt es ein Problem.
    Derzeit scheint der Downloadlink nicht zu funktionieren ;(
    Vielleicht kann der Link angepasst bzw. die Datei(en) nochmal irgendwo hochgeladen werden.
    Ich würde mich sehr darüber freuen.
    Danke :)

  • UDP

    • XovoxKingdom
    • 12. März 2010 um 20:28

    Irgendwie verstehe ich dein Problem nicht richtig :S
    Du willst von PC1 zu PC2 eine Nachricht via UDP austauschen, also fungiert
    PC1 als Server (um auf Nachrichten zu warten)
    PC2 als Client (der dann die Nachricht schickt)
    ---------
    Wenn die Nachricht bei PC1 angekommen ist kann die Verbindung beendet und umgekehrt neu aufgebaut werden:
    PC2 wird Server (um die Auswertung der Nachricht von PC1 zu empfangen)
    PC1 wird Client (um PC2 die Auswertung zu schicken)
    ---------
    Sofern diese "Kommunikation" stattfindet sind beide PCs jeweils 1x Server und 1x Client.
    Sollte möglich sein über den selben Port zu laufen, jedoch nur mit Unterbrechung, damit der Wechsel von
    Server zu Client (bzw. andersrum) möglich ist.

  • UDP

    • XovoxKingdom
    • 12. März 2010 um 19:46

    Du hast ja genau genommen 2 Server (=Empfänger) und 2 Clients(=Sender)
    Wenn du jetzt 2 Verbindungen (Pro Server und Client eine) aufbaust, kann der Datenfluss zwischen den beiden Scripten funktionieren.
    (so hatte ich das mit TCP gemacht)

  • Durch verschiedene Wörter verschiedene Befehle aus lösen!

    • XovoxKingdom
    • 11. März 2010 um 13:02

    Ich hab keine Ahnung ,ob das folgende Script funktioniert, da jeweils nicht der Fenstertitel, sondern der Text angegeben wird.
    Vielleicht kannst du es ja als Ansatz benutzen:

    Spoiler anzeigen
    [autoit]

    Global $Sum = 0
    Dim $Namen[5][2]
    $Namen[0][0] = "_löschen"
    $Namen[1][0] = "_Mein_Name"
    $Namen[2][0] = "_berichts_index"
    $Namen[3][0] = "_Sound"
    $Namen[4][0] = "_Programm_Starten"
    For $i = 0 To 4
    $Namen[$i][1] = 0
    Next
    While True
    $Sum = 0
    For $i = 0 To 4
    If WinExists("", $Namen[$i][0]) Then $Namen[$i][1] = 1
    $Sum += $Namen[$i][1]
    Next
    Sleep(10)
    If $Sum = 5 Then ExitLoop
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Wichtig!", "Alle Fenster sind nun offen!")

    [/autoit]
  • Der kleine Helfer

    • XovoxKingdom
    • 7. März 2010 um 16:06

    Irgendwie driftet diese Diskussion etwas von eigentlichen Thema ab, also dem Feedback für das Script.
    (Vielleicht kann dieser Thread von OFFTOPIC Posts bereinigt werden bzw. verschoben werden in OFFTOPIC)

    @(OFF)TOPIC:
    Wenn du deinen Quellcode postest, dann wirst du im Endeffekt viel mehr lernen, als durch das Feedback:
    "Ich finde das Script sehr nützlich"
    Da Verbesserungsvorschläge nur auf den Funktionsumfang und nicht auf die Umsetzung beruhen,
    wirst du das Script wohl nicht *optimieren können, nachdem du Ratschläge bekommen hast.
    Dir unterstellt hier keiner einen Virus etc. erstellt zu haben, jedoch sollte man generell bei Dateien aus
    dem Internet vorsichtig sein. Ich verstehe die Aufregung sowieso nicht, da der Quellcode (meiner Meinung nach)
    nicht schützenswert wäre, da die Komplexität auf ein Minimum zu reduzieren ist.

    PS: Ich habe das Script noch nicht getestet, da es mir meistens um einen Lernfortschritt beim testen/modifizieren
    anderer Scripts geht, und das bei deinem Script (mangels Quellcode und auf rechtmäßigem Weg) nicht möglich ist.

    *Auf Geschwindigkeit, Stabilität etc.

  • Send befehl

    • XovoxKingdom
    • 6. März 2010 um 19:18

    Der Text soll ja immer der ausgelesene (guictrlread), ein Zeilenumbruch (@CRLF) und der neue Text sein (...).

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 271, 447, 192, 124)
    $Edit1 = GUICtrlCreateEdit("", 24, 32, 209, 393)
    GUICtrlSetData(-1, "Edit1")
    $Button1 = GUICtrlCreateButton("Button1", 240, 32, 19, 393, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $Button1
    GUICtrlSetData($Edit1,Guictrlread($Edit1)&@Crlf&"[" & @HOUR & ":" & @MIN & ":" & @SEC & "]")

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

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™