Beiträge von KloMeister
-
-
Ändert leider nichts. Er sagt weiterhin: "Der Befehl "wuauclt.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden."
Selbst wenn ich
ü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.
-
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:Codecall 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:Danke für die Hilfe
-
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.
-
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.
-
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 -
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.
-
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 (kommentiert habe ich da eher nicht)
AutoIt
Alles anzeigen#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
(Verbesserungen wurden in den Code eingebaut 03-08-2016 - 02:39)
Dazu benötigt man eine "Settings.ini"
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 AutostartViel Spaß damit, falls ihr damit etwas anfangen könnt
MfG
-
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.
-
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.
-
So klappt alles (mit der alten Version)
Danke
[autoit][/autoit][autoit][/autoit][autoit]#include <Excel.au3>
[/autoit][autoit][/autoit][autoit]
#include <MsgBoxConstants.au3>Local $oExcel = _ExcelBookAttach("Unit Tracking .xlsx", "FileName")
[/autoit]
Local $test = $oExcel.ActiveSheet.Cells($oExcel.ActiveSheet.Rows.Count, 1).End(-4162).Row
msgbox(0,"",$test) -
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,
-
-
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
-
McAfee blockt den Spaß übrigens. Allerdings nicht den Installer sondern nur das .zip File und den Source. im .zip.. Siehe Anhang
-
Ah cool, danke...
Mal den Befehl genau durchzulesen lesen hätte mir wohl geholfen
Ich hatte einfach stupide die "Beispiele" getestet, wo leider bei _SoundPlay die Wait Funktion deaktiviert war.
Vielen Dank
-
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]
[autoit][/autoit][autoit][/autoit][autoit]
und_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!
-
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.
-
Das geht z.B. so:
[autoit][/autoit][autoit][/autoit][autoit]#include <MsgBoxConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>$Form1_1 = GUICreate("URL Open", 450, 300, 191, 90)
[/autoit][autoit][/autoit][autoit]
$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")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
[/autoit][autoit][/autoit][autoit]
$aSel = _GUICtrlEdit_GetSel($Edit1)if $aSel[0] <> $aSelold then
[/autoit][autoit][/autoit][autoit]
;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$aSelold = $aSel[0]
[/autoit][autoit][/autoit][autoit]endif
[/autoit][autoit][/autoit][autoit]
sleep(100)
WEndFunc Close()
[/autoit]
Exit
EndFunc -
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.