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

Beiträge von Carsten8

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 25. Juli 2010 um 21:06

    Ja, es ist liegt scheinbar wirklich am Callback. Ich habe das ganze jetzt so umgeschrieben, dass in der Endlosschleife des Scripts geprüft wird, ob eine Taste gedrückt wird, also nicht mehr mit einem Callback und alles funktioniert wunderbar. Wenn ich die UDF fertig habe, werde ich die hier mal hochladen.

    Danke an alle, die mir geholfen haben :)

    Wenn euch noch Ideen kommen, könnt ihr die natürlich gerne posten.

  • Password-Crypter:

    • Carsten8
    • 25. Juli 2010 um 18:41

    Darter: Aber du warst, als du mit AutoIt angefangen hast, ein Ultra Pro-Coder oder was? :thumbdown:

  • K8055 Board - Abfrage ob Taster gedrückt?

    • Carsten8
    • 25. Juli 2010 um 18:05

    Normalerweise kommt der Fehler nur, wenn DLLCall fehlschlägt. Sprich @error sollte irgendwas ungleich 0 sein. Mach vor die Zeile, in der der Fehler auftritt einfach eine MsgBox oder besser noch ConsoleWrite und lass dir dadurch @error ausgeben.

    Edit: Ok der UDF Fehler lag bei ihm an dem falschen Ort der DLL Datei. Nach dem verschieben gings. Ansonsten war seine DLL scheinbar eine ältere, sodass eine Funktion nicht existierte. Nach ein paar Änderungen klappte es endlich.
    Mit dem anderen Problem konnte ich ihm aber leider nicht helfen.

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 25. Juli 2010 um 10:56

    Das kam in der Konsole dabei raus: http://pastebin.com/zJVT85wA
    Sprich es liegt wirklich am Callback?

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 25. Juli 2010 um 09:31

    Die MsgBox hab ich schon wieder rausgenommen, jetzt tritt der Fehler seltener auf. In der Callback Funktion ist jetzt nurnoch eine einfache If und eine Switch Abfrage, die je nach Tastendruck eine Variable verändert und ein paar Hotkeys registriert bzw. unregistriert. Ich habe im Script dann noch ne While 1 Schleife laufen die eine Grafik erstellt und anzeigt. Ich werde das ganze Script nachher mal posten, muss nur etwas aufräumen, ist etwas unordentlich :)

    Edit: Ok, gerade nochmal getestet, folgender Fehler kam:

    Code
    ==> Variable used without being declared.:
    Return 1
    Return ^ ERROR


    Seit wann gibt's denn sowas ?(

    Edit 2: Ok, danke BugFix, scheint zu funktionieren. Einige Variablen waren scheinbar nicht Global.
    Ich habe hier mal ein Video aufgenommen, das veranschaulicht, was genau passiert. In der "Konsole" unten wird immer dann "Okay" ausgegeben, wenn ich Okay drücke.
    http://www.youtube.com/watch?v=Iv1jfjWv6dA

  • cmd

    • Carsten8
    • 24. Juli 2010 um 23:12

    Einfach wäre es, wenn du statt CMD die Funktionen FileDelete bzw. DirRemove verwendest. Beides sind native AutoIt funktionen und sicher kompatibler als mit CMD zu arbeiten ;)

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 24. Juli 2010 um 22:15

    Habs geändert, scheint zu funktionieren. Jetzt stürzt aber manchmal das ganze Script ab, jedes Mal kurz nachdem mehrere Male "Callback" aufgerufen wird. Wieder mit der Meldung "AutoIt hat ein Problem festgestellt bla..."

    Gerade hatte ich auch

    Code
    C:\Program Files (x86)\AutoIt3\Include\G19.au3 (118) : ==> Variable used without being declared.:
    Return $ret[0]
    Return ^ ERROR

    Was ich gar nicht verstehe, da 118 in der Funktion steckt:

    [autoit]

    Func LcdUpdate($hApplet, $bSync = 0)
    Local $ret = DllCall($dll, "int", "LcdUpdate", "ptr", $hApplet, "int", $bSync)
    If @error Then Return SetError(1, @error, 0)
    Return $ret[0]
    EndFunc ;==>LcdUpdate

    [/autoit]

    Edit: Wenn du Teamviewer hast, kann ich dir das ganze auch gerne mal vorführen.

    Edit 2: Scheint nur aufzutreten, wenn ich die Knöpfe häufig hintereinander drücke. Ohne die MsgBox Anzeige im Callback funktionierts aber auch so :)

    Edit 3: Ok, doch nicht. Verabschiedet sich immernoch ab und zu. Teils geht's sogar einfach zu, ohne irgendwelche Meldungen. Das mit dem "$ret ist nicht definiert" tritt jetzt häufig in der Func LcdUpdate auf.. ich bin am Verzweifeln :S

    Edit 4: Oh mann, ein wenig weiter getestet und jetzt kackt das Skript bei jeden Druck auf die "OK"-Taste ab (mit der Windows Fehlermeldung). Ich geh erstmal schlafen, mal sehn, was sich morgen ergibt. Wie gesagt, wenn du mir per Teamviewer mal über die Schultern schauen könntest, wäre das klasse. Gute Nacht erstmal!

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 24. Juli 2010 um 21:35

    Gibt's auf Amazon zur zeit für ca. 110€, schonmal billiger, als zu dem Zeitpunkt, als ich die gekauft hab -.-

    Jetzt hat sich aber eben noch ein Problem aufgetan.

    Folgender Code:

    [autoit]

    Func LcdWaitActivation($hApplet)
    $ret = DllCall($dll, "int", "LcdWaitActivation", "ptr", $hApplet)
    Return $ret[0]
    EndFunc ;==>LcdWaitActivation

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

    Func LcdUpdate($hApplet, $bSync = 0)
    $ret = DllCall($dll, "int", "LcdUpdate", "ptr", $hApplet, "int", $bSync)
    Return $ret[0]
    EndFunc ;==>LcdUpdate

    [/autoit]

    Manchmal (und auch nur manchmal) sagt mir AutoIt, dass $ret bei den beiden Funktionen (evtl. auch bei anderen) kein Array wäre. Wenn ich @error und $ret in einer MsgBox ausgeben lasse, ist beides 0.
    Wieso denn das? :(

    Achja, noch eine Frage nebenbei, wenn ich LcdWaitActivation aufrufe, wartet das Skript dann auch wirklich?

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 24. Juli 2010 um 21:28

    Hurra, funktioniert, vielen Dank progandy ! :thumbup:

    Dachte das passt so, da es in der Hilfe auch so stand:

    [autoit]

    $handle = DLLCallbackRegister ("_EnumWindowsProc", "int", "hwnd;lparam")
    DllCall("user32.dll", "int", "EnumWindows", "ptr", DllCallbackGetPtr($handle), "lparam", 10)
    DllCallbackFree($handle)

    [/autoit]
  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 24. Juli 2010 um 20:58

    Oh man was bitte ist hier denn schon wieder ein Verstoß? Es gibt mir weder einen unfairen Vorteil (da es schon etwas ähnliches von offizieller Seite gibt, das genau das selbe macht) noch ist das ein Keylogger. Wie bitte soll der LCD meiner Tastatur als Keylogger fungieren? Ich bitte dich.. man kann es auch übertreiben.

  • DllCallbackRegister: Skript stürzt ab?

    • Carsten8
    • 24. Juli 2010 um 20:04

    Guten Abend,

    ich bin (wie in meinem anderen Thread schon erwähnt) dabei ein kleines Applet für den Bildschirm meiner Tastatur zu schreiben. Dazu habe ich mir der Einfachheit halber "AdvanceLCD" [KLICK MICH] runtergeladen und mir mal die Dokumentation sowie ein paar C-Beispiele angeschaut. Alles funktioniert prächtig bis auf die Funktion "LcdSetEventHandler". Die brauche ich, damit mein Script eine Funktion ausführt, wenn eine Taste gedrückt wurde.

    So sieht die Funktion zur Zeit aus:

    [autoit]

    ; $hApplet: Handle des Applets
    ; $EventHandler: Name der Funktion, die ausgeführt werden soll
    ; $hContext: Keine Ahnung, im C-Beispiel aber auch 0
    Func LcdSetEventHandler($hApplet, $EventHandler, $hContext = 0)
    $callback = DllCallbackRegister($EventHandler, "int", "int;ptr;int")
    $ret = DllCall($dll, "int", "LcdSetEventHandler", "ptr", $hApplet, "ptr", DllCallbackGetPtr($callback), "ptr", $hContext)
    DllCallbackFree($callback)
    Return $ret[0]
    EndFunc ;==>LcdSetEventHandler

    [/autoit]

    Der Aufruf sieht so aus:

    [autoit]

    LcdSetEventHandler($hApplet, "Callback", 0)

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

    Func Callback($iEvent, $hContext, $iData)
    MsgBox(0, "Hurra", "Es funktioniert :)")
    Return 1
    EndFunc ;==>Callback

    [/autoit]

    Sobald ich auf meiner Tastatur das Applet aufrufe stürzt das Skript einfach ab. Ohne Fehlermeldung, einfach nur "AutoIt funktioniert nicht mehr und muss beendet werden bla bla bla.".
    Ich bastel an dieser Stelle nun schon ne halbe Ewigkeit, bekomme es aber einfach nicht hin :(

    Ich hoffe ihr könnt mir hier weiterhelfen.

    Vielen Dank im Vorraus,
    Carsten

    PS: Solltet ihr noch was brauchen, Teile des Codes oder sonst was, sagt bitte bescheid.

  • Tastatur "fangen"

    • Carsten8
    • 21. Juli 2010 um 22:45
    Zitat von Inferior

    das wird kaum funktionieren, da das autoitscript immer aktiv sein muss um zu merken das du eine bestimmte taste drückst

    Naja, Dauerschleife und _IsPressed abfragen. Ist ja soweit kein Problem. Ich will nur, dass ich beispielsweise in Word etwas tippe, was dort dann nicht erscheint, sondern lediglich in meinem AutoIt Script.

    Aber wie gesagt, es wird kein Keylogger. Es ist für ein Spiel, genauer gesagt GTA:SA. Es gibt eine Reihe GebäudekomplexIDs die ich möglichst über ein Applet abfragen möchte. Sprich ich gebe z.B. 1.24 ein und mein Script sagt mir "Das ist der und der Ort".

  • Tastatur "fangen"

    • Carsten8
    • 21. Juli 2010 um 22:43

    Hm verstehe nicht was daran Keylogger sein soll, sry. Wenn ihr wollt, dass ich genauer erkläre, wofür es ist, sagt bescheid.

  • Tastatur "fangen"

    • Carsten8
    • 21. Juli 2010 um 22:38

    Naja, im Endeffekt gibt es kein GUI. Ich möchte die Tastatureingaben in jedem Programm/Spiel machen können, diese sollen NUR von meinem AutoIt Script erkannt werden (also nicht vom Spiel oder von Word). Senden will ich hier nichts.

    Einfach gesagt: Eingeben -> AutoIt erstellt ein Bild für den Bildschirm -> Tastatur zeigt das Bild an
    Jedoch soll eben auch NUR AutoIt merken, dass ich was tippe.

  • Tastatur "fangen"

    • Carsten8
    • 21. Juli 2010 um 22:08

    Hi,

    ich habe vor, mir ein kleines Applet (Mini-Anwendung, die in meinem Beispiel auf dem Bildschirm meiner Tastatur angezeigt wird) für meine G19 zu schreiben. In dem Applet muss der Benutzer nach Tastendruck ein paar Zahlen eingeben und die Taste erneut drücken.

    Das ist auch kein Problem. Wenn ich jedoch z.B. in Word bin und eben das Applet benutzen will, schreibt er die Zahlen sowohl im Applet (habe vor, das mit _IsPressed zu lösen) aber auch in Word.

    Ich habe schonmal ein Applet gesehen (nicht in AutoIt geschrieben). Das die Tasteneingaben quasi "abgefangen" hat. Und genau das möchte ich erreichen. Ich habe alledings absolut keinen Plan, wie ich das ganze realisieren könnte :(

    Hat jemand von euch eine Idee?

    Danke schonmal,
    Carsten8

  • [Beendet] µitLight März

    • Carsten8
    • 3. März 2010 um 06:29

    Ich bin genau deiner Meinung.
    Timer an
    Funktion
    Timer aus
    In Datei schreiben

  • eukalyptus hat Geburtstag

    • Carsten8
    • 2. März 2010 um 21:11

    Herzlichen Glückwunsch :)

  • [Beendet] µitLight März

    • Carsten8
    • 2. März 2010 um 20:57

    Mein Spitzenwert ist bis jetzt 336 Millisekunden für alle Zahlen bis 100 000.. Bis 1 000 000 sinds ca. 3 Sekunden :)

    Jetzt nochmal konkrete Fragen:
    Soll ein Array zurückgegeben werden? Oder geschrieben werden?
    Wird das Schreiben in die Zeitberechnung mit eingehen, oder nicht?

    Edit: Und es soll alle Zahlen bis 100000 ausrechnen? Dann bitte im 1. Post korrigieren :)
    Allgemein ist hier alles sehr verwirrend..

    Edit2: Alle Primzahlen bis 1299710 berechnen (sind 100 000 zahlen).. geht das auch? Wenn ja, dann brauch ich bis dahin ca. 2,85 Sekunden (Durchschnitt aus 10 Messungen)

  • Skype - Push-to-talk

    • Carsten8
    • 30. Dezember 2009 um 10:44
    Zitat von Faweyr

    wusste nicht da man über Com auf Skype zugreifen kann...


    Ich auch nicht, habs vor Kurzem durch Zufall herausgefunden :)

  • Skype - Push-to-talk

    • Carsten8
    • 28. Dezember 2009 um 20:17

    Hi,
    da mir die Push-To-Talk Funktion bei Skype fehlte, habe ich mir die schnell in AutoIt nachgerüstet.
    Das Ganze läuft über das Skype COM Objekt.

    Hier der Code:

    [autoit]

    #include <Misc.au3>
    $oSkype = ObjCreate("Skype4COM.Skype") ;Skype Object
    $oSkype.Attach() ;Mit Skype verbinden (Wichtig: Zugriff muss in Skype zugelassen werden!)
    $sAttach = $oSkype.AttachmentStatus

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

    If $sAttach = "Success" Or $sAttach = "Erfolg" Then ;Deutsche und Englische Version
    $oSkype.Mute = "True" ;Mikro standartmäßig auf mute stellen
    While 1
    If _IsPressed("10") Then
    $oSkype.Mute = "False" ;Mikro freischalten bei Tastendruck
    While _IsPressed("10")
    sleep(64)
    WEnd
    $oSkype.Mute = "True" ;Mikro wieder stummschalten
    EndIf
    sleep(100)
    WEnd
    Else
    MsgBox(0, "Fehler", "Verbinden mit Skype fehlgeschlagen!")
    EndIf

    [/autoit]

    Das Script ist nur eine minimale Fassung, wer meint, er brauchts, kann auch noch genauere Fehlerabfragen einbauen.

    Viel Spaß damit :)

    Wenn ich Zeit und Lust habe und Interesse besteht, mach ich mal eine UDF, die etwas mehr Funktionen hat.

    Edit: An alle mit der 64 Bit Version von AutoIt: Ihr müsst das Script im 86x Modus starten/compilieren, da ansonsten Fehler auftreten ;)

    Edit2: Standartmäßig funkt das ganze mit der Shift Taste (10). Wenn eine andere Taste gewünscht ist, bitte die 10 bei _IsPressed ändern.

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™