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

Beiträge von Andy

  • Tool für Serverstatus

    • Andy
    • 30. März 2013 um 00:21
    Zitat

    Kann man mit der Ping Variante auch auf gewisse Ports hin überprüfen?

    Nein, mit Ping kann man nur Hosts abfragen, also ob ein Rechner erreichbar ist oder nicht!

    Server(ports) fragt man per TCP ab, Beispiel s. unten
    Allerdings gibt es dann das Problem, dass du per Ping zwar schnell feststellen kannst, ob ein Rechner online ist, und auch im Falle eines offenen Ports eine schnelle Antwort bekommst, aber wenn der Serverdienst nicht zu erreichen ist (Port nicht offen) kann es SEHR lange (bis zu 15 Sekunden) dauern, bis du diese Nachricht erhälst!
    Erklärung siehe hier

    Script zum Testen:

    Spoiler anzeigen
    [autoit]

    Opt("TCPTimeout", 3000) ;1000 milliseconds egal welche zahl, bringt nix....

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

    TCPStartup()
    ;ip-adressen der ftp-server oder eines erreichbaren rechners, auskommentieren zum testen
    $szIPADDRESS = "193.99.144.80" ; Heise hat dort ftp-server laufen
    ; $szIPADDRESS = "85.214.130.125" ;autoit aber schon
    $szIPADDRESS = "173.194.69.94" ;google
    ;~ $szIPADDRESS = "217.237.149.205";Timeserver RWTH Aachen

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

    ;$szIPADDRESS = "127.0.0.1" ;intern, hier wird die adlib-funktion aufgerufen

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

    $pingzeit = Ping($szIPADDRESS, 1000)
    If $pingzeit <> 0 Then ;wenn Rechner per ping erreichbar, dann
    MsgBox(0, "Ping auf "&$szIPADDRESS&" erfolgreich", $pingzeit)
    Else
    MsgBox(0, "Ping auf "&$szIPADDRESS&" fehlgeschlagen!", 0)
    EndIf

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

    $nport = 21;ftp oder jeden anderen Port
    $mainsocket = -1 ;keine Verbindung

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

    Global $t = TimerInit() ; timer startzeit merken
    Adlibregister("_tcp_timeout", 1000) ;"normalerweise" würde nach einer Sekunde die Funktion aufgerufen werden, auch wenn der Rechner nicht erreichbar ist, funktion
    $mainsocket = TCPConnect($szIPADDRESS, $nport) ; wenn kein server auf port 21 erreichbar ist, dann Wartezeit ca 15-20 sec, obwohl der rechner online ist
    $error=@error
    AdlibUnRegister()

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

    $m = TimerDiff($t) ;wieviel zeit ist seit dem timerstart vergangen?
    If $mainsocket <> -1 Then ;wenn Verbindung zum FTP hergestellt, dann
    MsgBox(0, "mainsocket " & $m, "FTP-Server erreicht unter "&$mainsocket)
    Else
    MsgBox(0, $m, "FTP-Server nicht erreichbar"&@crlf&"Fehlernummer: "&$error)
    EndIf
    Exit

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

    Func _tcp_timeout() ;wird nur bei internen netzverbindungen aufgerufen....
    $m = Int(TimerDiff($t)) ;wieviel zeit ist seit dem timerstart vergangen?
    If $mainsocket = -1 Then
    MsgBox(0, "adlib "& $m, "FTP-Server nicht erreichbar" & @CRLF )
    Else
    Msgbox(0,0,"Diese Nachricht sollte man normalerweise nicht sehen!")
    endif
    AdlibUnRegister()
    EndFunc ;==>_tcp_timeout

    [/autoit]

    In Zeile 20 können die Ports angegeben werden

  • Kolisionsabfrage von einem Quadrat und Rechteck

    • Andy
    • 29. März 2013 um 23:36
    Zitat

    Ich habe die Variablen geändert,

    nein, hattest du nicht, jedenfalls nicht in den Funktionen.
    Habe jetzt mal so geändert, dass es funktioniert...

    Schau dir mal in meiner Signatur das Thema "Wie man Scriptfehler findet und beseitigt..." an, du hast es nötig!

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.8.0
    Author: F4R

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

    Script Function: Pong
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    Global $iHeight1 = 70
    Global $iWidth1 = 20
    Global $iY1 = 100
    Global $iX1 = 15

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

    Global $iHeight2 = 5
    Global $iWidth2 = 5
    Global $iX2 = 400
    Global $iY2 = 130

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

    Global $sleep = 100

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

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Pong", 625, 443, 192, 124)
    GUISetBkColor(0x000000)
    Global $Graphic1 = GUICtrlCreateGraphic($iX1, $iY1, $iWidth1, $iHeight1)
    GUICtrlSetBkColor(-1, 0xFFFF00)
    Global $Graphic2 = GUICtrlCreateGraphic(540, 100, 20, 70)
    GUICtrlSetBkColor(-1, 0xFFFF00)
    Global $Graphic3 = GUICtrlCreateGraphic($iX2, $iY2, $iWidth2, $iHeight2)
    GUICtrlSetBkColor(-1, 0xFF0000)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    HotKeySet("{UP}", "up")
    HotKeySet("{down}", "down")

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

    Sleep(1000)

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

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then Exit

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

    rechts()
    links()
    $ret = _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)
    If $ret = False Then Exit (MsgBox(0, "Pong", "Du hast verloren!")) ;programm ende

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

    WEnd

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

    Func up()
    $iY1 = $iY1 - 10
    GUICtrlSetPos($Graphic1, 10, $iY1)
    If $iY1 = -10 Then
    $iY1 = $iY1 + 10
    EndIf
    EndFunc ;==>up

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

    Func down()
    $iY1 = $iY1 + 10
    GUICtrlSetPos($Graphic1, 10, $iY1)
    If $iY1 = 400 Then
    $iY1 = $iY1 - 10
    EndIf
    EndFunc ;==>down

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

    Func links()
    $iY2 = Random(20, 430, 1)
    Do
    $iX2 = $iX2 - 10
    Sleep($sleep)
    GUICtrlSetPos($Graphic3, $iX2, $iY2)
    Until $iX2 = 20
    EndFunc ;==>links

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

    Func rechts()

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

    GUICtrlSetPos($Graphic2, 540, $iY2 - 50) ;schläger
    Do
    $iX2 = $iX2 + 10

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

    GUICtrlSetPos($Graphic3, $iX2, $iY2) ;ball
    Sleep($sleep)
    Until $iX2 = 530
    EndFunc ;==>rechts

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

    Func _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)
    ;Author: Faweyr
    Return ($iX1 + $iWidth1 > $iX2) And ($iX1 < $iX2 + $iWidth2) And ($iY1 + $iHeight1 > $iY2) And ($iY1 < $iY2 + $iHeight2)
    EndFunc ;==>_RectCollision

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • [Mini-Tutorial] BitOR und Konsorten.

    • Andy
    • 29. März 2013 um 22:02

    Beispiel für XOR

    [autoit]

    ;Verschlüsselung oder andere Anwendungen s. http://de.wikipedia.org/wiki/XOR-Gatter

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

    $nachricht=122567
    $schluessel=7712

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

    $geheimtext = bitxor($nachricht,$schluessel)
    MsgBox(0,"Verschlüsselung mit BitXOR","Nachricht "&$nachricht&" verschlüsselt mit Schlüssel "& $schluessel&" ergibt Geheimtext "&$geheimtext)

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

    $nachricht = bitxor($geheimtext,$schluessel)
    MsgBox(0,"Entschlüsselung mit BitXOR","Geheimtext "&$geheimtext&" entschlüsselt mit Schlüssel "& $schluessel&" ergibt Nachricht "&$nachricht)

    [/autoit]


    Beispiel für OR

    [autoit]

    ;Filtern von bspw. Funktionsparametern oder Konstanten
    $Parameter0=7
    $Parameter1=11
    $Parameter2=19
    $Parameter3=35
    $Parameter4=67
    $Parameter5=131

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

    ;einige Parameter zusammenfassen in eine Zahl mittels OR, um nur eine Zahl statt mehrerer in eine Funktion oder DLL zu übergeben
    $or=bitor($Parameter4,$Parameter2,$Parameter0,$Parameter5) ;Reihenfolge egal
    msgbox(0,"BitOR","Zusammenfassung der ausgewählten Parameter in eine Zahl= "&$or)

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

    ;Parameter aus OR herausdröseln
    ;$or =16 zum testen auskommentieren, es wurden ungültige Parameter übergeben
    $para=""
    for $i=0 to 6
    if bitand($or,3)<>3 then exit(msgbox(0,"BitOR","Ungültige Parameterübergabe!!!")) ;abfrage in der Funktion, ob valide Parameter übergeben wurden
    if bitand($or,2^($i+2)+3)=2^($i+2)+3 then $para&="Parameter"&$i&@crlf
    Next
    msgbox(0,"BitOR","Es wurden die "&@crlf&$para&@crlf&"mit BitOR verknüpft")

    [/autoit]
  • [Mini-Tutorial] BitOR und Konsorten.

    • Andy
    • 29. März 2013 um 21:40

    Naja, ein Volladdierer ist ja nicht unbedingt der Sinn und Zweck für die Bit-Operationen.

    So in etwa meine ich das:
    BitAnd wird u.a. verwendet, um vollständige Übereinstimmung der gesetzten Bits zu überprüfen

    Spoiler anzeigen
    [autoit]

    $a = 3 ;00000011
    $b = 11 ;00001011
    ;sind alle Bits von $a auch in $b gesetzt?
    $erg = BitAND($a, $b)
    If $erg = $a Then
    MsgBox(0, "BitAnd", "Die Bits von " & $a & " sind auch in " & $b & " alle gesetzt")
    Else
    MsgBox(0, "BitAnd", "Die Bits von " & $a & " sind in " & $b & " alle oder teilweise nicht gesetzt")
    EndIf

    [/autoit]
  • [Mini-Tutorial] BitOR und Konsorten.

    • Andy
    • 29. März 2013 um 21:26

    Hi,
    schön erklärt, jetzt fehlt nur noch die ANWENDUNG dafür^^
    Also den Fall, wieso man überhaupt ein AND,OR, oder gar ein XOR benötigt :D

  • Kolisionsabfrage von einem Quadrat und Rechteck

    • Andy
    • 29. März 2013 um 21:17
    Zitat

    Bei Funktioniert es auch so, aber wenn man den Ball nicht Trifft geht das Spiel Trotzdem weiter...

    ach so^^
    Dann schau dir mal die Rückgabe der _RectCollision()-Funktion an...

    Weiterhin solltest du dir auch mal die Variableninhalte anschauen, wenn der Ball den Schläger trifft / nicht trifft.

    Das generelle Problem hängt daran, dass du die Koordinaten bzw. die Achsen falsch benennst...
    In einer GUI ist der Nullpunkt oben links.
    Nach RECHTS zählt man dann X
    Nach UNTEN Y

    Du machst das genau umgekehrt. Das ist so lange kein Problem, wie du auch deine eigenen Funktionen benutzt.
    Wenn du aber Funktionen benutzt, die das Koordinatensystem "richtig" (falsches Wort, aber ich hoffe du verstehst was ich meine) verwenden, dann muss die Funktion scheitern!

    Entweder, du schreibst alle externen Funktionen um (und das würde ich nicht machen^^) oder du schreibst dein Script um, so dass aufsteigende X nach rechts und aufsteigende Y nach unten laufen :thumbup:

    Die Abfrage nach der Kollision erfolgt dann so:

    [autoit]

    $ret = _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)

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

    If $ret = True Then
    MsgBox(0, "Getroffen!", $ret,2) ;2 sekunden warten
    Else
    MsgBox(0, "Nicht getroffen!", $ret,2) ;2 sekunden warten
    EndIf

    [/autoit]
  • FileRead Problem

    • Andy
    • 29. März 2013 um 18:30

    Hi,
    wenn es nicht gerade um die letzten hundertstel Sekunden Performance geht und nur einfache Textdateien einmalig ausgelesen werden müssen, kann man sich das FileOpen()-Gedöns auch sparen und direkt per

    [autoit]

    $text=FileRead(@desktopdir & "\Quellcode.txt")

    [/autoit]

    auslesen.

  • Kolisionsabfrage von einem Quadrat und Rechteck

    • Andy
    • 29. März 2013 um 18:24

    Hi,
    dein Beispielscript funktioniert bei mir einwandfrei.
    Ich kann das linke Paddel mit den Hoch/Runter-Tasten bewegen und den Ball zurückspielen.
    Das rechte Paddel hat einen "Automatikmodus" ^^

    Wenn du mit dem rechten Paddel auch noch spielen willst, musst du bei jeder der Kollisionen die Koordinaten der Paddel tauschen, d.h. Treffer auf dem Linken Paddel => Kollisionsabfrage (Rechtes Paddel,Kugel). Das Tauschen würde ich in die Funktion _RectCollision() packen.

    Schräges Laufen der Kugel erhält man, indem zu der x-Koordinate auch noch die y-Koordinate verändert wird. Nach einer Kollision (mit dem Rand nur oben und unten) wird dann einfach y=-y. Nach einer Kollision mit dem Paddel x=-x und y=-y

  • [3.3.9.5] Fragen zu Strukturen

    • Andy
    • 29. März 2013 um 08:12

    Hi,
    Nested Structs habe ich schon mit Hilfe dieses Scripts benutzt.
    Btw. mehr OOP braucht kein Mensch^^

  • Kolisionsabfrage von einem Quadrat und Rechteck

    • Andy
    • 29. März 2013 um 07:39

    Hi,

    Spoiler anzeigen
    [autoit]

    Func _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)
    ;Author: Faweyr
    Return $iX1 + $iWidth1 > $iX2 And $iX1 < $iX2 + $iWidth2 And $iY1 + $iHeight1 > $iY2 And $iY1 < $iY2 + $iHeight2
    EndFunc ;==>_RectCollision

    [/autoit]


    oder

    [autoit]


    Func _RectCollision($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2)
    ; Prog@ndy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall($userdll, "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Return $r[0] <> 0
    EndFunc ;==>_RectCollision

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

    Func _intersection($Rect1X1, $Rect1Y1, $Rect1X2, $Rect1Y2, $Rect2X1, $Rect2Y1, $Rect2X2, $Rect2Y2) ;ergebnis ist die fläche der überschneidung
    ; Andy
    Local Const $tagRECT = "long;long;long;long"
    Local $1 = DllStructCreate($tagRECT)
    Local $2 = DllStructCreate($tagRECT)
    Local $3 = DllStructCreate($tagRECT)
    DllStructSetData($1, 1, $Rect1X1)
    DllStructSetData($1, 2, $Rect1Y1)
    DllStructSetData($1, 3, $Rect1X2)
    DllStructSetData($1, 4, $Rect1Y2)
    DllStructSetData($2, 1, $Rect2X1)
    DllStructSetData($2, 2, $Rect2Y1)
    DllStructSetData($2, 3, $Rect2X2)
    DllStructSetData($2, 4, $Rect2Y2)
    Local $r = DllCall($userdll, "int", "IntersectRect", "ptr", DllStructGetPtr($3), "ptr", DllStructGetPtr($1), "ptr", DllStructGetPtr($2))
    If @error Then Return SetError(1, 0, 0)
    Local $x1 = DllStructGetData($3, 1)
    Local $y1 = DllStructGetData($3, 2)
    Local $x2 = DllStructGetData($3, 3)
    Local $y2 = DllStructGetData($3, 4)
    Local $flaeche = ($x2 - $x1) * ($y2 - $y1)
    Return $flaeche
    EndFunc ;==>_intersection

    [/autoit]

    Die Suche nach "Kollision" im Forum findet übrigens ca. hundert Threads. Ich kann mir nicht vorstellen, dass dort keine verwertbaren Beispiele dabei sind...

    Übrigens würde auch eine Suche nach "Pong" weiterhelfen, dort kann man sich ansehen, wie das Problem bei fertigen Spielen gelöst wurde.

  • Sonderzeichen beim Verzeichniss auslede.

    • Andy
    • 26. März 2013 um 21:07

    Hi,

    das funktioniert, indem du in der DOS-Box den DIR blablub-Befehl in eine Batchdatei schreibst.
    In der ersten Zeile dieser Batchdatei änderst du dann die Codepage mit:

    chcp 1252

    Die Änderung der Codepage bewirkt die "Zeichenumwandlung", und bleibt nur so lange bestehen, wie die CMD läuft...
    Problem bei dieser Lösung ist, dass du bei Eingaben in der CMD dann die Sonderzeichen nicht mehr verwenden kannst, d.h. bei einem
    DIR /b /n > test.txt
    werden nun auch Dateien mit Sonderzeichen im Namen in die Textdatei geschrieben, allerdings funktionieren die Sonderzeichen ggf im @scriptdir nicht mehr^^
    Wenn in Scriptdir "Sonderzeichen" bspw. das "Ä" in c:\test\ÄÄ\vv wäre, dann gibts Ärger...
    Hab den Mist hinter mir, daher einen 3-Zeiler in AutoIt geschrieben, der die Funktion erfüllt, welche in der RUN-Zeile ausgeführt wird...

  • Ein COM Objekt aus einer nicht registrierten DLL verwenden?

    • Andy
    • 22. März 2013 um 19:43

    Wieso probierst du es nicht einfach aus?

    http://www.microsoft.com/resources/docu…2.mspx?mfr=true
    regsvr32 funktioniert auch unter WIN7

  • GDI+ 3D Object Viewer (Wavefront .obj Format)

    • Andy
    • 20. März 2013 um 20:45

    Hi,
    wie gehabt, sehr schick!

    Wenn ich am Wochenende mal bissl Zeit habe, schreibe ich mal die Linien-Zeichenfunktion in Asm, bzw. das hab ich schon, ist nur irgendwo vergraben^^
    Wenn die Eck-Koordinaten in einer Struct liegen, kann man die auch gleich mit dem Asm-Prog auslesen. Das sollte dann einiges beim Zeichnen beschleunigen...

  • TCP Script will einfach nicht

    • Andy
    • 17. März 2013 um 08:58

    ...oder auch HIER
    Es ist schon traurig, wenn man nicht mal in der Lage ist, die in der AutoIt-Hilfe befindlichen Client- und Server- Scripte zu starten....

  • AutoIT Software

    • Andy
    • 16. März 2013 um 15:39

    Hi,

    Zitat

    ich möchte mich nun ab sofort intensiv mit AutoIT beschäftigen.

    Was möchtest du überhaupt damit machen bzw. wie kommst du darauf, dass AutoIt dir hilfreich sein könnte?

  • #Tidy_Parameters [ gelöst ] | WM_KEYDOWN [ gelöst ]

    • Andy
    • 16. März 2013 um 07:39

    Eukalyptus hatte doch dazu schon einmal etwas geschrieben...

    Spoiler anzeigen
    [autoit]

    $hGui = GUICreate("Example 1 - Press any key to exit...", 400, 100)
    GUISetState()
    $sKeyboardState = _WinAPI_GetKeyboardState(1)
    While _WinAPI_GetKeyboardState(1) = $sKeyboardState
    Sleep(100)
    WEnd
    GUIDelete($hGui)

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

    Sleep(500)

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

    $hGui = GUICreate('Example 2 - Press "A" to exit...', 400, 200)
    GUISetState()
    $aKeyboardStateOld = _WinAPI_GetKeyboardState()
    While 1
    $aKeyboardState = _WinAPI_GetKeyboardState()
    If $aKeyboardState[65] <> $aKeyboardStateOld[65] Then ExitLoop
    Sleep(100)
    WEnd
    GUIDelete($hGui)

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

    Sleep(500)

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

    $hGui = GUICreate('Example 3 - Type...', 400, @DesktopHeight - 100)
    $hLabel = GUICtrlCreateLabel("", 2, 2, 396, @DesktopHeight - 104)
    GUISetState()
    While GUIGetMsg() <> -3
    $aKeyboardState = _WinAPI_GetKeyboardState()
    $sKeys = "I" & @TAB & "CHR" & @TAB & "State" & @TAB & "Toogle" & @LF
    For $i = 10 To 90
    $sKeys &= $i & @TAB & Chr($i) & @TAB & BitAND($aKeyboardState[$i], 0xF0) & @TAB & BitAND($aKeyboardState[$i], 0x0F) & @LF
    Next
    GUICtrlSetData($hLabel, $sKeys)
    Sleep(100)
    WEnd

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _WinAPI_GetKeyboardState
    ; Description ...: Returns the status of the 256 virtual keys
    ; Syntax.........: _WinAPI_GetKeyboardState($iFlag=0)
    ; Parameters ....: $iFlag - Return Type
    ; 0 Returns an array[256]
    ; 1 Returns a string
    ; Return values .: Success - Array[256] or String containing status of 256 virtual keys
    ; Failure - False
    ; Author ........: Eukalyptus
    ; Modified.......:
    ; Remarks .......: If the high-order bit is 1, the key is down; otherwise, it is up.
    ; If the key is a toggle key, for example CAPS LOCK, then the low-order bit is 1
    ; when the key is toggled and is 0 if the key is untoggled
    ; Related .......: _IsPressed
    ; Link ..........;
    ; Example .......;
    ; ===============================================================================================================================
    Func _WinAPI_GetKeyboardState($iFlag = 0)
    Local $aDllRet, $lpKeyState = DllStructCreate("byte[256]")
    $aDllRet = DllCall("User32.dll", "int", "GetKeyboardState", "ptr", DllStructGetPtr($lpKeyState))
    If @error Then Return SetError(@error, 0, 0)
    If $aDllRet[0] = 0 Then
    Return SetError(1, 0, 0)
    Else
    Switch $iFlag
    Case 0
    Local $aReturn[256]
    For $i = 1 To 256
    $aReturn[$i - 1] = DllStructGetData($lpKeyState, 1, $i)
    Next
    Return $aReturn
    Case Else
    Return DllStructGetData($lpKeyState, 1)
    EndSwitch
    EndIf
    EndFunc ;==>_WinAPI_GetKeyboardState

    [/autoit]
  • int -> char

    • Andy
    • 11. März 2013 um 19:41

    Hi,

    so etwa?

    [autoit]

    $struct_int=dllstructcreate("int;int")
    dllstructsetdata($struct_int,1,1145128260) ;wandle die "integer"-Zahlen mal in 0x..... um, und schau dir dann die ascii-tabelle in der Hilfe an
    dllstructsetdata($struct_int,2,1178944834) ;vor weiteren Fragen nach little/big endian googeln ^^

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

    $struct_char=dllstructcreate("char[8]",dllstructgetptr($struct_int))

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

    $char=dllstructgetdata($struct_char,1)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $char = ' & $char & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Das 7 Byte Programm

    • Andy
    • 10. März 2013 um 10:00

    Hi,
    wer die Programme auch auf "Hightech"-(64Bit) Betriebssystemenm laufen lassen möchte, könnte sich HIERAnregungen zur Installation einer sog. DOSBOX holen...

  • Webseite aktualisieren / GUI streamen / GET?

    • Andy
    • 9. März 2013 um 12:13

    Und wie ist die Vorgehensweise?

  • AutoIt Compiler (Project Perseus)

    • Andy
    • 9. März 2013 um 11:58

    Hi,

    Zitat

    Ich meine so triviale Sachen wie StringLen wurden doch schon 1000 mal geschrieben und veröffentlicht.

    Eine "Funktion" Stringlen (also das Zählen aller Zeichen) ist per se schon Mumpitz und nur Zeitverschwendung, da spätestens nach jeder beliebigen stringbearbeitenden Funktion doch die Länge des Strings bekannt ist!
    In einer "richtigen" Programmiersprache hat genau diese Funktion nichts weiter zu tun, als auf eine Speicherstelle zu verweisen, in der die Stringlänge gespeichert ist! Es kommt nur auf die Implementation/Definition eines "Strings" an, wieso nicht einfach das erste dword/qword des "Strings" mit der Stringlänge belegen?!
    Wieviele Vergleiche/Abfragen auf das Stringende und damit Rechenpower könnten sich einsparen lassen, solch ein Konzept einzusetzen (was es übrigens bei allen Funktionen, die ein Handle als Speicherstelle zur Beschreibung der Eigenschaften oder Funktions-Ein/Ausgabe benutzen, schon gibt ;) )

    Btw, der Link ist tot, gibt es schon Updates?

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™