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

Beiträge von James

  • GetPressedKeys.au3

    • James
    • 8. September 2012 um 13:43
    Zitat von James1337

    @commander Wenn du $vDLL durch $GPK_vDLL ersetzt, kannst du zumindest einen Teil der Fehler beheben.


    Wenn ich versuche die anderen Fehler zu beheben bleiben beide MsgBoxen in dem Beispiel leer. Könnte aber auch sein, dass in dem Skript noch viel mehr falsch ist und durch die zusätzlichen Fehlerüberprüfungen dann letzten Endes gar nichts mehr funktioniert.

    MfG, James

  • GetPressedKeys.au3

    • James
    • 8. September 2012 um 13:26

    @commander Wenn du $vDLL durch $GPK_vDLL ersetzt, kannst du zumindest einen Teil der Fehler beheben.

  • GetPressedKeys.au3

    • James
    • 8. September 2012 um 13:15

    Alles, was in _GPL_Start() mit $GPK_Keys zu tun hat, könntest du eigentlich auch außerhalb der Funktion schreiben.
    Das solltest du eigentlich mit allen globalen Variablen machen, da sonst Fehler wie "WARNING: $vDLL: possibly used before declaration." auftreten, wobei dieser Fehler daran liegt, dass du in _GPK_SingleKey die Variable $vDLL verwendest, welche nirgends deklariert ist und mit welcher wahrscheinlich $GPK_vDLL gemeint ist.

    C:\Users\James\Desktop\GetPressedKeys.au3(323,24) : WARNING: $vDLL: possibly used before declaration.
    $a_R = DllCall($vDLL,
    ~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\James\Desktop\GetPressedKeys.au3(323,69) : WARNING: $i: possibly used before declaration.
    $a_R = DllCall($vDLL,"short","GetAsyncKeyState","int","0x"&Hex($i,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\James\Desktop\GetPressedKeys.au3(323,24) : ERROR: $vDLL: undeclared global variable.
    $a_R = DllCall($vDLL,
    ~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\James\Desktop\GetPressedKeys.au3(323,69) : ERROR: $i: undeclared global variable.
    $a_R = DllCall($vDLL,"short","GetAsyncKeyState","int","0x"&Hex($i,
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\James\Desktop\GetPressedKeys.au3 - 2 error(s), 2 warning(s)

    Edit: Ich habe deine UDF mal (vereinfacht) nachgebaut, da ich eigentlich die Geschwindigkeit testen wollte. Momentan erreiche ich damit leider nur ca. 30ms/Aufruf, aber durch den erhöhten Funktionsumfang deiner UDF lässt sich das wahrscheinlich nicht vergleichen. Es wäre schön, wenn du versuchen könntest das ganze noch zu optimieren (falls das überhaupt geht).

    MfG, James

  • P2P Netzwerk (mit UDP) trotz NAT (Firewall auf Router)

    • James
    • 7. September 2012 um 18:44
    Zitat von Christoph54

    Euch ist aber schon klar, dass ihr dem anderen Client mit eurer IP auch den ausgehenden Port weiterreichen müsst? Und genau da liegt das Problem: Mit Autoit ist es, so viel ich weis, nicht möglich diesen Port zu ermitteln... :P


    Wobei wir wieder bei dem Thema wären, wie verdammt schlecht die Netzwerkfunktionen in AutoIt umgesetzt sind... Aber du hast natürlich Recht. Und ja, es war mir klar, nur daran gedacht habe ich nicht... ^^ Durch einen DllCall sollte sich dieses Problem aber auch lösen lassen... irgendwie.

  • Shutdown feststellen

    • James
    • 7. September 2012 um 17:22
    Zitat von m-obi

    Hab doch gewusst, dass ich die Funktion irgendwann mal brauch ;)


    Ja, das braucht man wirklich selten. So selten, dass mir folgendes erst jetzt aufgefallen ist :D:

    Zitat von Changelog

    15th January, 2010 - v3.3.4.0
    Removed: OnAutoItStart and OnAutoItExit have been removed.

  • P2P Netzwerk (mit UDP) trotz NAT (Firewall auf Router)

    • James
    • 7. September 2012 um 14:50

    Ja, UDPOpen sendet auch schon (es muss ja irgendwie verbinden), aber das wirst du auf dem Server nicht durch UDPRecv erfassen können.

  • P2P Netzwerk (mit UDP) trotz NAT (Firewall auf Router)

    • James
    • 7. September 2012 um 14:37
    Zitat von matinto

    @James1337: Sendet er denn mit UDPOpen auch schon eine Nachricht? (oder muss man die nachricht explizit mit UDPSend senden?

    Der Client (C1), der zu dem anderen Client (C2) verbinden will (wobei in diesem Fall C2 der Server ist), muss, nachdem die Verbindung steht ein "OK" oder igendwas senden, damit C2 mit dem Versuch aufhören kann, zu C1 zu verbinden. Und dann das Ganze nochmal umgekehrt.

    MfG, James

  • GetPressedKeys.au3

    • James
    • 7. September 2012 um 13:33

    Sieht doch schon mal ganz gut aus. :thumbup:

  • P2P Netzwerk (mit UDP) trotz NAT (Firewall auf Router)

    • James
    • 7. September 2012 um 11:02

    ProGamer Es gibt eine Möglichkeit über PHP, und zwar gab/gibt es eine Seite, die die IP Adressen aller Clients anzeigt die in den letzten x Minuten die Seite aufgerufen haben, wobei jeder dieser Listen eine ID zugewiesen wurde, sodass in einer Liste auch nur die Clients stehen, die das jeweilige Programm benutzen. Das wurde hier im Forum irgendwann mal erwähnt, ich habe den Post aber noch nicht gefunden.

    @matinto Das Problem könnte sein, dass die beiden Clients sich relativ zeitgleich miteinander verbinden müssen. Du könntest also so lange UDPOpen benutzen, bis auf dem UDPSocket Daten von dem anderen Client empfangen werden, denn dann war der Verbindungsaufbau erfolgreich.

  • Arbeitszeiten dokumentieren (überstunden fehlen)

    • James
    • 7. September 2012 um 10:50

    Das liegt daran, dass du nicht einfach zwei Werte mit dem Format nn:nn:nn voneinander abziehen kannst.
    Der interne Aufruf von Number() macht aus "12:34:56" 12, da "12:34:56" keine Zahl ist.

    MfG, James

  • GDI+ richtig verwendet?

    • James
    • 6. September 2012 um 16:54

    Das einzige, was mir so auf die Schnelle auffällt ist, dass du bei jedem Verwenden von GDI+ die Graphics neu erstellst. Einmal direkt nach dem Erstellen der GUI reicht. Ich glaube aber kaum, dass das einen großen Geschwindigkeitsverlust ausmacht.
    Wenn du das Skript schneller machen willst, kannst du es ja mal mit GUICtrlCreateGraphics und den dazugehörigen Funktionen versuchen.

  • Autoit-Datei während Laufzeit einbinden

    • James
    • 6. September 2012 um 15:38

    Sollte nicht. Aber ich glaube mich zu erinnern, dass ich damals Probleme mit UPX hatte und es deswegen in dem Skript ausgeschalten hatte.

  • EvalString

    • James
    • 6. September 2012 um 15:00

    Cool, wieder was gelernt. Aber zum Glück funktioniert das nicht mit Funktionen, sonst wäre EvalString völlig sinnlos. :D
    Edit: Und man kann bei ExpandVarStrings keine Variablen/Makros/Funktionen ineinanderschachteln...

  • EvalString

    • James
    • 6. September 2012 um 14:37

    Ersetzt in einem String Makros, Variablen und Funktionen durch ihre (Rückgabe-)Werte.

    [autoit]

    Func EvalString($s, $n=10)
    Local $v, $i
    $v = StringRegExp($s, "([@$][A-Za-z_0-9]+|[A-Za-z_0-9]+\(.*?\))", 3)
    If @error Then Return $s
    For $i = 0 To UBound($v)-1
    $s = StringReplace($s, $v[$i], Execute($v[$i]))
    Next
    If ($n > 0) Then $s = EvalString($s, $n-1)
    Return $s
    EndFunc

    [/autoit]

    Verwendung:
    - für Logdateien
    - um Funktionsaufrufe und ähnliches so richtig schön unleserlich zu machen... :D

    Nachteile:
    - Alle verwendeten Variablen müssen Global sein.

    Beispiel:

    [autoit]

    MsgBox(0, "", EvalString("Es ist @HOUR:@MIN Uhr. Der zur Zeit angemeldete Benutzer heißt @UserName."))

    [/autoit]

    MfG, James

  • Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

    • James
    • 6. September 2012 um 14:11

    zu 1) Bei GUICtrlCreateInput als Style 0x2000 angeben, das müsste $ES_NUMBER sein oder so.
    zu 2) Schau' dir mal GUICtrlSetLimit an. Hab' ich noch nie wirlich benutzt, könnte dir aber helfen.

  • Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

    • James
    • 6. September 2012 um 13:58
    [autoit]

    Func Countdown()
    Local $x = $Time - TimerDiff($Timer)/1000
    ToolTip(_Sek2StdMinSek($x))
    If ($x <= 0) Then
    AdlibUnRegister("Countdown")
    ToolTip("")
    EndIf
    EndFunc

    [/autoit]
  • Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

    • James
    • 6. September 2012 um 13:19

    So in etwa (ungetestet):

    [autoit]

    #include <GUIConstants.au3>
    #Include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $Time = 0, $Timer

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 403, 237, 443, 214, BitOR($WS_SYSMENU,$WS_POPUP,$WS_POPUPWINDOW,$WS_BORDER,$WS_CLIPSIBLINGS))
    $minuten = GUICtrlCreateInput("Minuten", 120, 112, 145, 21)
    $Label1 = GUICtrlCreateLabel("Bitte geben Sie hier die Gewünschte Laufzeit ein!", 8, 24, 374, 24)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Zeit setzen", 152, 160, 75, 25, 0)
    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
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten --- Hier soll der ausgelesene Inputfeldinhalt eingegeben werden funktioniert aber so leider nicht ----
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden
    $Time = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)
    EndSwitch
    WEnd

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

    Func Countdown()
    Local $x = $Time - TimerDiff($Timer)/1000
    TrayTip("Countdown", $x, 1)
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    EndFunc

    [/autoit]

    MfG, James

    Edit: Ein TrayTip eignet sich für solche häufigen Aktualisierungen nicht, daher hätte ich einen ToolTip genommen. Dazu müsste man aber auch nur ein paar Kleinigkeiten ändern.

  • Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

    • James
    • 6. September 2012 um 12:32
    Zitat von Ququknife

    der countdown soll in einem traytip stattfinden!!

    Immer schön cool bleiben...

    Dann eben am Anfang des Skriptes

    [autoit]

    Global $Time = 0, $Timer

    [/autoit]

    ,

    [autoit]

    MsgBox(0, "Countdown", $DauerGesammt) ; Test

    [/autoit]

    durch

    [autoit]

    $Time = $DauerGesammt
    $Timer = TimerInit()
    AdlibRegister("Countdown", 1000)

    [/autoit]

    ersetzen und dann noch die Funktion Countdown hinzufügen:

    [autoit]

    Func Countdown()
    Local $x = $Time - TimerDiff($Timer)/1000
    TrayTip("Countdown", $x, 1)
    If ($x <= 0) Then AdlibUnRegister("Countdown")
    EndFunc

    [/autoit]
  • Mit Button Inputfeld auslesen und in einer Funktion wiedergeben

    • James
    • 6. September 2012 um 12:16
    [autoit]


    Case $Button1
    $string = GUICtrlRead($minuten)
    ; Variablen
    $titel = "Restlaufzeit" ; Titel, es wird auch ein Info Icon mit angezeigt
    $DauerStd = 0 ; Dauer in Stunden
    $DauerMin = $string ; Dauer in Minuten --- Hier soll der ausgelesene Inputfeldinhalt eingegeben werden funktioniert aber so leider nicht ----
    $DauerSek = 0; Dauer in Sekunden
    $DauerGesammt = (60*60*$DauerStd)+(60*$DauerMin)+$DauerSek ; Die Gesamtdauer
    $Befehl = "cmd" ; Der Befehl der ausgeführt werden soll, es kann auch die _toDo() Fuktion angepasst werden
    MsgBox(0, "Countdown", $DauerGesammt) ; Test
    EndSwitch

    [/autoit]


    Wenn ich jetzt noch wüsste, wie du das Ergebnis genau wiedergeben willst, könnte ich dir dabei vielleicht auch helfen.

  • Teil aus String filtern

    • James
    • 6. September 2012 um 10:28
    [autoit]

    $Path = "C:\Hannes\Dietmar\Günther\123456789.txt"

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

    ; Möglichkeit 1:
    $x = StringSplit($Path, "\")
    $Filename = $x[$x[0]]
    ConsoleWrite($Filename & @LF)

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

    ; Möglichkeit 2:
    $x = StringRegExp($Path, "^.*\\(.*)$", 3)
    If (Not @error) Then
    $Filename = $x[0]
    ConsoleWrite($Filename & @LF)
    EndIf

    [/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™