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

Beiträge von KloMeister

  • Batch Script verhält sich anders, wenn es durch AutoIt gestartet wird

    • KloMeister
    • 8. Juni 2021 um 09:51

    Moin,

    wenn ich es als x64 kompiliere, dann funktioniert es tatsächlich. Wieder was gelernt, das mit der Umlenkung wusste ich nicht.

  • Batch Script verhält sich anders, wenn es durch AutoIt gestartet wird

    • KloMeister
    • 7. Juni 2021 um 14:55

    Ändert leider nichts. Er sagt weiterhin: "Der Befehl "wuauclt.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

    Selbst wenn ich

    Code
    call %WINDIR%\system32\wuauclt.exe /resetauthorization /detectnow

    über AutoIt ausführe, gehts nicht. Aber mit Doppelklick auf die Batch gehts


    Macht überhaupt keinen Sinn, ist bestimmt wieder so ein Windows 10 Sicherheitsding, damit Malware oder so, bestimmte Dinge nicht ausführen kann.

  • Batch Script verhält sich anders, wenn es durch AutoIt gestartet wird

    • KloMeister
    • 7. Juni 2021 um 13:46

    Hallo,

    ich habe folgendes Problem: Ich habe eine Batch Datei die die sogenannte WSUS Client ID zurücksetzt und erneuert. (Das Script benötigt man, wenn man ein Windows Image auf mehrere PCs aufspielt, damit diese dann eine einzigarte ID haben und der WSUS Server zwischen den Systemen unterscheiden kann.)


    Hier mal ganz kurz das Script dazu:

    Code
    call net stop wuauserv 
    call reg Delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientId /f  
    call reg Delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate /v SusClientIDValidation /f 
    call net start wuauserv 
    call wuauclt.exe /resetauthorization /detectnow
    pause


    Soweit funktioniert das auch, bis auf das "call wuauclt.exe /resetauthorization /detectnow", dort sagt er, dass er die Datei nicht findet. Komischerweise findet er die Datei nur nicht, wenn die .bat Datei über AutoIt gestartet wird, wenn ich das Batch Script von Hand ausführe klappt alles. Die Übergabe des vollständigen Pfads zur "wuauclt.exe" als auch ein Ausführen als Administrator ändert nichts. Die Datei sollte eigentlich in System32 zu finden sein. Wenn ich andere Anwendungen daraus starte über AutoIt und einer Batch wie z.B. Calc.exe, dann funktioniert es problemlos.

    Warum verhält sich das Ausführen durch AutoIt anders (insbesondere bei dieser wuauclt.exe), als wenn ich die Batch von Hand ausführe und wie behebe ich das Problem?

    So rufe ich die .bat auf:

    Code
    run( @ScriptDir & "\Tools\RebuildSusClientID.bat")

    Danke für die Hilfe

  • Tastatur entprellen / Keyboard anti bouncing

    • KloMeister
    • 3. August 2016 um 15:41

    Wie funktioniert das jetzt mit der .ini? Weil bei mir sagt er jetzt nurnoch keine .ini File gefunden. So wie ich das verstanden habe schaut der nach einer .ini Datei im aktuellen Ordner, egal wie sie heißt? Scheint aber wohl nicht zu funktionieren

    Und das du den "Delay" jetzt abhängig von der Verzögerung für die "Wiederholrate" machst, versteh ich auch nicht. Das sind die Eigenschaften wenn ich eine Taste gedrückt halte. Wenn ich eine Taste einzeln wiederholt drücke, dann kann die Verzögerung deutlich geringer sein als diese eingestellte für die gedrückte Taste. Als Gamer wäre das fatal wenn ich 500ms keine Taste mehr drücken könnte.

    Das Prellen ist ja ein mechanischer Prozess der sich wahrscheinlich im µs Beriech, höchstens niedrigen ms Bereich befindet.

  • Tastatur entprellen / Keyboard anti bouncing

    • KloMeister
    • 3. August 2016 um 12:26

    Die Garantie ist wahrscheinlich schon abgelaufen und außerdem wird meine Tastatur (Zowie Celeritas) nichtmehr hergestellt, wird also schwer da überhaupt noch Ersatz zu bekommen.

    Kostete leider um die 100€

    Irgendwann wenn mir mal wieder ein Modell einer mechanischen Tastatur zusagt, schlage ich wieder zu... Solange muss ich jetzt wohl noch mit dieser Tastatur auskommen.

  • Tastatur entprellen / Keyboard anti bouncing

    • KloMeister
    • 3. August 2016 um 02:33

    Vielen Dank für die Analyse des Codes!
    Ja das passiert wenn man sich Beispiele kopiert, die anpasst und dann einige Rückstände im Code bleiben. (Sonderlich sorgfältig war ich allerdings nicht)

    Ich habe das meiste verbessert (Der SourceCode oben im ersten Post wurde angepasst, damit die Besucher gleich den aktuellsten Code sehen ohne alles lesen zu müssen). Bis auf den Array der bei Beginn eingelesen werden sollte, ist soweit alles eingebaut.


    Nun habe ich allerdings eine Frage. Ich habe jetzt nichtmehr mit Hotkeyset geblockt, sondern indem ich "Return 1" zurückgebe. Damit werden allerdings alle Tasten (kurzzeitig) geblockt (Fällt zwar nicht auf, weil eh Niemand so schnell tippt, aber trotzdem eher doof). Welchen Wert muss ich zurückgeben, damit wirklich nur die entsprechende Taste (kurzzeitig) geblockt wird, die auch gedrückt wurde?
    Danke

  • Tastatur entprellen / Keyboard anti bouncing

    • KloMeister
    • 2. August 2016 um 21:53

    Die Tasten werden über HotKeySet geblockt, die Abfrage über HotKey wäre aber zu kritisch, da die Taste ja erstmal geblockt werden würde. Ich müsste sie also dann mit Hilfe von Send durch AutoIt nachträglich senden. Wie viel Delay wäre das wohl? Wer möchte als Gamer Delay auf seinen Tasten haben?

    Deswegen wird die gedrückte Taste über einen Hook abgefragt (was wohl die schnellste Methode ist) und auch noch gesendet, anschließend geblockt für xx Millisekunden.

  • Tastatur entprellen / Keyboard anti bouncing

    • KloMeister
    • 2. August 2016 um 02:14

    Guten Tag,

    Ich habe eine mechanische Tastatur (MX-Brown Switches von Cherry), die immer wieder mehrfache Tastenanschläge erzeugt (bei bestimmten Tasten), obwohl die Taste nur einmal gedrückt wurde. Damit bin ich nicht der Einzige, solche Probleme sind häufiger anzutreffen (insbesondere bei mechanischen Tastaturen).

    Um dieses Problem zu lösen und ohne eine neue Tastatur erwerben zu müssen, habe ich eine Software programmiert, die eine softwareseitige "entprellung" ermöglicht.


    Hier der Sourcecode, ist eine Menge WinApi Kram, steigt wahrschenlich niemand durch :D (kommentiert habe ich da eher nicht)

    AutoIt
    #include <MsgBoxConstants.au3>
    #include <StructureConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <TrayConstants.au3>
    Opt("TrayMenuMode", 3)
    Global $g_hHook, $g_hStub_KeyProc, $g_sBuffer = ""
    Global $DelayTime = IniRead(@WorkingDir & "\Settings.ini", "Delay", "Time_ms", "5")
    Global $Keys = IniRead(@WorkingDir & "\Settings.ini", "Used_Chars", "Chars", "")
    Global $Auto = IniRead(@WorkingDir & "\Settings.ini", "Autostart", "Enable", "")
    Global $pause = 0
    if $DelayTime > 200 then $DelayTime = "200"
    Main()
    Func Main()
       OnAutoItExitRegister("Cleanup")
       Local $idExit = TrayCreateItem("Exit")
       if $Auto = "yes" then
       RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Anti_Key_Bouncing", "REG_SZ", @ScriptFullPath)
    Else
       RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "Anti_Key_Bouncing")
    EndIf
        $g_hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
       $g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($g_hStub_KeyProc), _WinAPI_GetModuleHandle(0))
        While 1
    	  If TrayGetMsg() = $idExit Then ExitLoop
        WEnd
    EndFunc
    ; callback function
    Func _KeyProc($nCode, $wParam, $lParam)
     If $nCode < 0 Then Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
    	 Local $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
        If $wParam = $WM_KEYUP Then
    	 if (DllStructGetData($tKEYHOOKS, "vkCode") > 1) then
    		 for $i = 1 to StringLen($Keys)
    		 if DllStructGetData($tKEYHOOKS, "vkCode") = Asc(StringMid(StringUpper($Keys),$i,1)) then
    			AdlibRegister("Delay", $DelayTime)
    			$pause = 1
    		 endif
    		 Next
    		 endif
    	  EndIf
    	  if $pause = 1 then
    	  return 1
    	  else
    	  Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)
    	  endif
    EndFunc   ;==>_KeyProc
    Func Cleanup()
        _WinAPI_UnhookWindowsHookEx($g_hHook)
        DllCallbackFree($g_hStub_KeyProc)
    EndFunc   ;==>Cleanup
    Func Delay()
    $pause = 0
    AdlibUnRegister("Delay")
    EndFunc
    Alles anzeigen

    (Verbesserungen wurden in den Code eingebaut 03-08-2016 - 02:39)


    Dazu benötigt man eine "Settings.ini"

    Code
    [Delay]
    Time_ms=6
    [Used_Chars]
    Chars=uioln
    [Autostart]
    Enable=yes


    Erklärung der Settings:
    [Time] - Time_ms = Entprell Zeit in Millisekunden
    [Used_Chars] - Chars = Buchstaben die entprellt werden sollen
    [Autostart] - Enable = yes für Autostart, irgendetwas anderes für keinen Autostart


    Viel Spaß damit, falls ihr damit etwas anfangen könnt

    MfG

  • TeamSpeak3 in Channel gehen

    • KloMeister
    • 15. April 2015 um 11:17

    Vor einigen Jahren hat mal jemand eine UDF für TS3 geschrieben, die diverse Kommandos bereits integriert hat:

    http://www.autoitscript.com/forum/topic/11…eamspeak-3-udf/

    Vielleicht hilft dir das ja auch etwas weiter.

  • BASS UDF / DLL: Equalizer mit Filtern; Stör-Geräusche meiden

    • KloMeister
    • 27. März 2015 um 12:29

    Wenn ein Signal zu stark verstärkt wird (Was bei starken Boosts diverser Frequenzen der Fall sein sollte), dann führt das zur Überstuerung (Clipping) am Ausgang.

    http://de.wikipedia.org/wiki/%C3%9Cber…alverarbeitung)

    Sinusförmige Signale werden dann oben abgeschnitten und rechteckig. Wenn du eine Frequenz besonders stark anheben willst, ohne Clipping zu erzeugen, dann musst du den Gesamtpegel vorher reduzieren, damit du mehr "Headroom" nach oben hast.

  • Anzahl gefüllter Zeilen einer Spalte bekommen in Excel (Möglichst Effizient und schnell)

    • KloMeister
    • 4. März 2015 um 16:01

    So klappt alles (mit der alten Version)

    Danke

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

    #include <Excel.au3>
    #include <MsgBoxConstants.au3>

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

    Local $oExcel = _ExcelBookAttach("Unit Tracking .xlsx", "FileName")
    Local $test = $oExcel.ActiveSheet.Cells($oExcel.ActiveSheet.Rows.Count, 1).End(-4162).Row
    msgbox(0,"",$test)

    [/autoit]
  • Anzahl gefüllter Zeilen einer Spalte bekommen in Excel (Möglichst Effizient und schnell)

    • KloMeister
    • 27. Februar 2015 um 14:00

    Keine Ahnung welche AutoIt Version du hast bzw. mit welchen Include Files du arbeitest, aber bei mir gibt es nichtmal den Befehl " _Excel_Open()"

    Davon steht auch nichts in der Help Datei.

    Es gibt bei mir "_ExcelBookOpen" oder "_ExcelBookAttach"


    Edit: Habe mal nachgeschaut. Anscheinend wurde im letzten Jahr enorm an den Excel-Funktionen gearbeitet. Meine Version war schon 1 Jahr alt. Jetzt habe ich ein Problem, weil alle meine Funktionen auf die alten UDFs abgestimmt waren.

    Edit2: Ich habe auch mal versucht den Code kompatibel zu bekommen, aber mein 550 Zeilen Code lässt sich da nicht so einfach anpassen. Besonders Befehle wie "_ExcelReadCell" und "_ExcelWriteCell" wurden herausgenommen und durch die Range-Befehle ersetzt. Leider ist der Befehlaufbau nicht gleich, so das ein Replace ausgeschlossen ist. Man müsste da wieder Gehirngrips reinstecken und alles durchgehen...

    Mir wäre es dann lieber das Projekt mit den alten Includes fertigzustellen. Falls es auch da eine Möglichkeit gibt die Zeilen zu bekommen, würde ich diese Variante vorziehen.

    Zu sagen ist noch, dass ich das Excel Dokument über "_ExcelBookAttach" in neuer Version "_Excel_BookAttach" anbinde,

  • Anzahl gefüllter Zeilen einer Spalte bekommen in Excel (Möglichst Effizient und schnell)

    • KloMeister
    • 27. Februar 2015 um 13:43

    Ist das eine AutoIt Funktion oder redest du gerade von der internen Makro Sprache?

    Ich möchte das gerne alles aus AutoIt heraus machen!

  • Anzahl gefüllter Zeilen einer Spalte bekommen in Excel (Möglichst Effizient und schnell)

    • KloMeister
    • 27. Februar 2015 um 13:19

    Hallo,

    Ich möchte herausfinden wie viele Zeilen in einer bestimmten Spalte (A) gefüllt sind.

    Ich habe bereits 2 Methoden ausfindig machen können, die leider viel Rechenaufwand benötigen.
    "_ExcelReadArray" und "_ExcelReadCell"

    Damit dauert es leider sehr lange eine über 1000 zeilige Spalte einzulesen und mit einer Schleife zu prüfen wann die Zeile(n) leer ist / sind. Zumal eine leere Zeile kein eindeutiger Indiz für das Ende eines Excel-Dokuments ist. Es kann durchaus passieren dass mal 1-2 Abstandszeilen vorkommen.

    Ich brauche eine Funktion die mir sagt wo die letzte beschriebene Zeile im Excel Dokument der Spalte A ist. Also wäre ein rückwärts Einlesen sicher kein schlechter Ansatz.

    Aber wenn ich mit ExcelReadCell bei z.B. 10000 Rückwärts anfange und checke wann die erste Zeile geschrieben ist, kann das schonml 5 Minuten dauern.

    Hat da jemand eine Idee wie man an die Sache herangeht?

    Danke

  • ISN AutoIt Studio

    • KloMeister
    • 26. Februar 2015 um 14:33

    McAfee blockt den Spaß übrigens. Allerdings nicht den Installer sondern nur das .zip File und den Source. im .zip.. Siehe Anhang

  • .wav File abspielen, ohne erzeugendem Delay?

    • KloMeister
    • 24. Februar 2015 um 20:18

    Ah cool, danke...

    Mal den Befehl genau durchzulesen lesen hätte mir wohl geholfen :D

    Ich hatte einfach stupide die "Beispiele" getestet, wo leider bei _SoundPlay die Wait Funktion deaktiviert war.

    Vielen Dank

  • .wav File abspielen, ohne erzeugendem Delay?

    • KloMeister
    • 24. Februar 2015 um 16:15

    Hallo,

    Ich möchte dem Nutzer meines Programmes durch entsprechende Töne (die durchaus 3-5 Sekunden dauern können), signalisieren wie der Programm-Status ist bzw. ob Fehler aufgetreten sind (Es handelt sich um ein Barcode-Scanner Tool, bei dem der Anwender in der Regel nicht auf dem Bildschirm schaut).

    Mit:

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

    SoundPlay

    [/autoit]


    und

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

    _SoundPlay

    [/autoit]

    Läuft der Code leider solange nicht weiter, wie das .wav File abgespielt wird. Gibt es eine Möglichkeit, dies zu umgehen aus der eigenen Anwendung heraus? Weitere .exe Dateien über shell auszuführen, die einen Sound abspielen, wäre nur eine Notfall-Lösung. Am liebsten wäre mir eine einzelne Anwendung.

    Danke!

  • Letzte Zeile einer sich ändernden .txt auslesen und eine textausgabe erstellen

    • KloMeister
    • 19. Februar 2015 um 00:22

    Kompliziert ist da Garnichts bisher.
    Verrate uns doch mal um was für einen Chat es sich genau handelt. Zeilen aus einer Log-File auszulesen ist nicht unbedingt die beste Wahl, ebenso ist es nicht die beste Wahl über "Sendkeys" Tasten zu senden, die den Anwender stören. Da gibt's wesentlich bessere Wege.
    Wenn es sich um eine normale Windows Anwendung handelt, kann man vermutlich alles über die "Handles" auslesen sowie direkt in entsprechende Textfelder schreiben. Bei einigen Chat-Protokollen kann man wie BufFix bereits schon sagte, die Pakete (Nachrichten) direkt abfangen und senden, das wäre ebenfalls eine bessere Variante, als den Umweg über ein Logfile.

    Gerade als Anfänger ist die Herangehensweise oft verkehrt bzw. ist der Weg nicht sonderlich effizient gewählt.

  • URL in Edit control erstellen

    • KloMeister
    • 17. Februar 2015 um 11:04

    Das geht z.B. so:

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

    #include <MsgBoxConstants.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiEdit.au3>

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

    $Form1_1 = GUICreate("URL Open", 450, 300, 191, 90)
    $Edit1 = GUICtrlCreateEdit("Hallo das ist ein text http://www.google.de" & @CRLF & "Test bla http://www.AutoIt.de", 104, 104, 241, 89)
    GUISetState(@SW_SHOW)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")

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

    Opt("GUIOnEventMode", 1)

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

    Global $aSelold

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

    While 1

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

    If _WinAPI_GetFocus() = GUICtrlGetHandle($Edit1) Then
    $aSel = _GUICtrlEdit_GetSel($Edit1)

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

    if $aSel[0] <> $aSelold then
    ;msgbox(0,"Pos",$aSel[0]) - Nur fuers Programmieren um den Bereich der URL herauszufinden
    switch $aSel[0]
    case 22 to 36
    msgbox(0,"","Google wurde geklickt")
    ;Hier URL Oeffnen
    case 47 to 60
    msgbox(0,"","AutoIt wurde geklickt")
    ;Hier URL Oeffnen
    EndSwitch
    endif

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

    $aSelold = $aSel[0]

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

    endif
    sleep(100)
    WEnd

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

    Func Close()
    Exit
    EndFunc

    [/autoit]
  • _stringbetween andersrum

    • KloMeister
    • 10. Februar 2015 um 15:11

    Also, wenn es verboten ist mit AutoIt direkt den YouTube Titel auszulesen, dann musst du wohl die extra von YouTube zur Verfügung gestellte API nehmen, die unter anderem das selbe ermöglicht.

    https://developers.google.com/youtube/getting_started


    Damit zu arbeiten wird wohl erlaubt sein, ansonsten würde YouTube diese nicht extra für Anwendungsprogrammierer bzw. Webprogrammierer zur Verfügung stellen.
    Ich denke ein paar Video-Titel auszulesen ist keine Straftat, wenn YouTube diese Funktion extra in einer API anbietet.

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™