Beiträge von Simpel
-
-
Moin.
Im Moment in dem RunWait beendet wird ist die PID des Prozesses nicht mehr existent sondern ist der Returnwert des sich gerade beendenden Prozesses. Und die WhileWEnd-Schleife geht erst los, wenn der Prozesse, der durch RunWait gestartet wird erst beendet ist. Lies mal in der Hilfe zu RunWait nochmal ganz genau rein, um den Unterschied zu verstehen.
Gruß, Simpel
-
Moin.
Ich habe öfter das Problem, wenn ich auf der Arbeit für 'ne Zeit den Ort und damit die Domain wechsle, dass alle meine installierten Netzwerdrucker verschwunden sind.
Deswegen habe ich mir vor langer Zeit dieses Script geschrieben, dass alle in einer ini abgelegten Drucker neu installiert werden.
CodeLocal $PRT = IniReadSection("H:\_Conrad lokal\Downloads\AutoIt3\_COX\inis\Drucker.ini", "PRT") If @error Then Exit For $i = 1 To $PRT[0][0] RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n \\DRUCKERDOMAIN\GEMEINSAM-GETEILTES-DRUCKER-PRÄFIX" & $PRT[$i][1]) Next Exit
Vielleicht hilft Dir das. Gruß, Simpel
-
Das 2. Display wäre ebenso gesperrt (aber schwarz). Dort wäre somit auch nichts zu sehen.
-
Moin.
Ich habe für meinen Rechner mal was ähnliches gewünscht und habe mir damals den Sperrbildschirm nachgebaut. Ich habe also so getan, als wäre der Schirm von Windows gesperrt aber dabei hatte ich ihn manuell „versperrt“ und konnte somit immer noch dazwischen funken. Allerdings wirst Du das nicht mit den Tasten Stgr+Alt+Del oder Win+L hinbekommen, denn diese sind für Windows reserviert. Da ich aber der einzige User an diesem Rechner war ging das problemlo.
Weitere Möglichkeit, die mir einfällt: Du könntest einen zweiten kleinen Rechner mit Bildschirmchen daneben stellen. Du vernetzt die beiden. Der gesperrte kann weiter Infos in eine gemeinsam geteilte ini schreiben und der Inforechner wertet diese aus.
Gruß, Simpel
-
Moin.
Wenn es wirklich nur darum geht dass nur Du das Programm benutzen sollst, dann brauchst Du auch keinen Benutzernamen. Dann ist ein Passwort in ausreichender Stärke genug:
CodeIf Not _ZugangsKontrolle() Then Exit ConsoleWrite("Hier geht das Programm weiter" & @CRLF) Func _ZugangsKontrolle() Local $sPW = InputBox(" ", " ", "", "*") If $sPW <> "DeinFancyPasswort" Or @error Then Return False Return True EndFunc
Ich würde hier keinen Schnickschnack mit 3 Versuchen etc. machen, denn falls Du Dich vertippst, dann startest Du das Programm eben nochmal. "Title" und "Prompt" bei der InputBox lasse ich auch immer leer, damit es weiter keinen Hinweis gibt, was dort gebraucht wird.
Gruß, Conrad
-
Moin.
Sorry. Ich dachte auch nicht an StringRegExpReplace sondern an:
$aResult = StringRegExp($sString, PATTERN, 3) ; flag=3
ConsoleWrite($aResult[0] & @CRLF)
Also nichts ersetzen, sondern nur pur das Gesuchte rausholen.
Gruß, Conrad
-
-
Moin.
Das Beispiel von @Churanos ohne Gruppen sondern als ein Gesamtrückgabestring:
^(USB\\VID\_[\w\d]+\&PID\_[\w\d]+\\[\w\d\&]+)
https://regex101.com/r/uetJOC/2
Gruß, Conrad
-
Hi.
Ich benutze die UDF WinSnap.au3 dafür. Finden kann mann die hier: https://www.autoitscript.com/forum/topic/12…comment-1317890
Ich habe dann noch die UDF ein bisschen modifiziert, was man hier genauer nachlesen kann: https://www.autoitscript.com/forum/topic/12…comment=1317890
Gruß, Conrad
-
Ja, das dachte ich mir auch schon. Ich versuche mal was und frage bei Details dann noch mal nach.
Gruß, Conrad
-
Mein Tool wird nur dann gestartet, wenn ich den Verdacht einer hängenden Taste habe, da sollte die Schleife nicht das Problem sein.
Aber mich würde schon interessieren, wie Du das optimieren würdest. Hätte das was mit _WinAPI_SetWindowsHookEx() zu tun?
-
Moin. Ich habe über viele Inputs mir mal was anderes gebastelt:
Code
Alles anzeigenOnAutoItExitRegister("_Exit") Global $__inkey_flag = False Global $__Tasta_code[256][2], $hDLL = DllOpen("user32.dll") Global $hGui = GUICreate("Taste klemmt", 400, 115) Global $label1 = GUICtrlCreateLabel("", 10, 10, 380, 30) Global $label2 = GUICtrlCreateLabel("", 10, 40, 380, 30) Global $label3 = GUICtrlCreateLabel("", 10, 70, 380, 30) GUICtrlCreateLabel("", 0, 100, 10, 15) ; Dummy um die ersten 10 Pixel mit HG-Farbe zu füllen GUICtrlSetBkColor(-1, 0xBBBBBB) Global $hStatus = GUICtrlCreateLabel("Gültig für Tastatur mit deutschem Layout. Beenden mit ESC.", 10, 100, 400, 15) GUICtrlSetBkColor(-1, 0xBBBBBB) GUISetState() Local $a While GUIGetMsg() <> -3 $a = _inkey() ;Tastenanzeige GUICtrlSetData($label1, "KEY:" & @TAB & $a) $a = _inkey(1) ;hexcodes GUICtrlSetData($label2, "HEX:" & @TAB & $a) $a = _inkey(2) ;deccodes GUICtrlSetData($label3, "DEC:" & @TAB & $a) Sleep(10) WEnd Exit Func _inkey($flag = 0) ;gibt die gleichzeitig gedrückten Tasten zurück, wenn flag=1 gibt dann tastaturcode zurück If $__inkey_flag = False Then ;nur in der ersten Runde das Tasten-Array füllen $__inkey_flag = True Local $a = [["01", "Left Mouse"], ["02", "Right Mouse"], ["04", "Middle Mouse"], ["08", "BACKSPACE"], ["09", "TAB"], ["0C", "CLEAR ?"], ["0D", "ENTER"], ["10", "SHIFT"], ["11", "CTRL"], ["12", "ALT"], ["13", "PAUSE"], _ ["14", "CAPS LOCK"], ["1B", "ESC"], ["20", "SPACEBAR"], ["21", "PAGE UP"], ["22", "PAGE DOWN"], ["23", "END"], ["24", "HOME"], ["25", "LEFT ARROW"], ["26", "UP ARROW"], ["27", "RIGHT ARROW"], ["28", "DOWN ARROW"], _ ["29", "SELECT ?"], ["2A", "PRINT ?"], ["2B", "EXECUTE ?"], ["2C", "PRINT SCREEN"], ["2D", "INS"], ["2E", "DEL"], ["30", "0"], ["31", "1"], ["32", "2"], ["33", "3"], ["34", "4"], ["35", "5"], ["36", "6"], ["37", "7"], _ ["38", "8"], ["39", "9"], ["41", "A"], ["42", "B"], ["43", "C"], ["44", "D"], ["45", "E"], ["46", "F"], ["47", "G"], ["48", "H"], ["49", "I"], ["4A", "J"], ["4B", "K"], ["4C", "L"], ["4D", "M"], ["4E", "N"], ["4F", "O"], _ ["50", "P"], ["51", "Q"], ["52", "R"], ["53", "S"], ["54", "T"], ["55", "U"], ["56", "V"], ["57", "W"], ["58", "X"], ["59", "Y"], ["5A", "Z"], ["5B", "Left WIN"], ["5C", "Right WIN"], ["5D", "Right MENU"], _ ["60", "NUM0"], ["61", "NUM1"], ["62", "NUM2"], ["63", "NUM3"], ["64", "NUM4"], ["65", "NUM5"], ["66", "NUM6"], ["67", "NUM7"], ["68", "NUM8"], ["69", "NUM9"], ["6A", "NUM*"], ["6B", "NUM+"], ["6C", "NUM."], _ ["6D", "NUM-"], ["6E", "NUM,"], ["6F", "NUM/"], ["70", "F1"], ["71", "F2"], ["72", "F3"], ["73", "F4"], ["74", "F5"], ["75", "F6"], ["76", "F7"], ["77", "F8"], ["78", "F9"], ["79", "F10"], ["7A", "F11"], ["7B", "F12"], _ ["7C", "F13"], ["7D", "F14"], ["7E", "F15"], ["7F", "F16"], ["90", "NUM"], ["91", "SCROLL"], ["A0", "Left SHIFT"], ["A1", "Right SHIFT"], ["A2", "Left CTRL"], ["A3", "Right CTRL"], ["A4", "Left MENU"], ["A5", "Right MENU"], _ ["BA", "Ü", ";"], ["BB", "+", "="], ["BC", ","], ["BD", "-"], ["BE", "."], ["BF", "#", "/"], ["C0", "Ö", "`"], ["DB", "ß", "["], ["DC", "^", "\"], ["DD", "´", "]"], ["DE", "Ä", "#"], ["E2", "<", "n.a."]] For $i = 0 To UBound($a) - 1 $__Tasta_code[Dec($a[$i][0], 2)][1] = $a[$i][1] ; es werden nur bekannte Codes in das Array geschrieben, der Rest bleibt leer Next EndIf Local $string = "" ;gedrückte Tasten For $i = 1 To 254 ;eigentlich nur bis 221 Local $key = DllCall($hDLL, "short", "GetAsyncKeyState", "int", $i) ;~ Local $key = DllCall($hDLL, "short", "GetKeyState", "int", $i) If BitAND($key[0], 0x8000) Then ;MSB gesetzt Switch $flag Case 0 If $__Tasta_code[$i][1] = "" Then $__Tasta_code[$i][1] = "unknown code = 0x" & Hex($i, 2) & " ";falls Tastencode unbekannt $string &= "[" & $__Tasta_code[$i][1] & "]" & @TAB Case 1 $string &= "0x" & Hex($i, 2) & @TAB Case 2 $string &= $i & @TAB EndSwitch EndIf Next Return $string EndFunc ;==>_inkey Func _Exit() DllClose($hDLL) EndFunc
Das funktioniert auch echt fluffig. Nun passiert aber was merkwürdiges. Ich drücke "ASDF" gleichzeitig und bekomme es auch angezeigt. Drücke ich nun "G" oder "H" dazu tauchen diese bei mir nicht auf. Drücke ich nur das "F" im Wechsel mit "G" und "H" kann ich nun die 2 Buchstaben gleichzeitig sehen, aber niemals "FGH" gleichzeitig. Hat da jemand irgendeine Idee?
Gruß, Conrad
-
Moin.
Meine Erweiterung übersetzt nun auch den HEX-Code in das entsprechende Zeichen auf der Tastatur:
AutoIt
Alles anzeigen#Include <WindowsConstants.au3> #include <Misc.au3> ; Achtung deutsche und englische Tastatur haben einige Tasten anders - deswegen gibt es im Array gelegentlich auch ein Ergebnis unter [$i][2] Local $aTastaturZeichen = [["01", "Left Mouse"], ["02", "Right Mouse"], ["04", "Middle Mouse"], ["08", "BACKSPACE"], ["09", "TAB"], ["0C", "CLEAR ?"], ["0D", "ENTER"], ["10", "SHIFT"], ["11", "CTRL"], ["12", "ALT"], ["13", "PAUSE"], _ ["14", "CAPS LOCK"], ["1B", "ESC"], ["20", "SPACEBAR"], ["21", "PAGE UP"], ["22", "PAGE DOWN"], ["23", "END"], ["24", "HOME"], ["25", "LEFT ARROW"], ["26", "UP ARROW"], ["27", "RIGHT ARROW"], ["28", "DOWN ARROW"], _ ["29", "SELECT ?"], ["2A", "PRINT ?"], ["2B", "EXECUTE ?"], ["2C", "PRINT SCREEN"], ["2D", "INS"], ["2E", "DEL"], ["30", "0"], ["31", "1"], ["32", "2"], ["33", "3"], ["34", "4"], ["35", "5"], ["36", "6"], ["37", "7"], _ ["38", "8"], ["39", "9"], ["41", "A"], ["42", "B"], ["43", "C"], ["44", "D"], ["45", "E"], ["46", "F"], ["47", "G"], ["48", "H"], ["49", "I"], ["4A", "J"], ["4B", "K"], ["4C", "L"], ["4D", "M"], ["4E", "N"], ["4F", "O"], _ ["50", "P"], ["51", "Q"], ["52", "R"], ["53", "S"], ["54", "T"], ["55", "U"], ["56", "V"], ["57", "W"], ["58", "X"], ["59", "Y"], ["5A", "Z"], ["5B", "Left WIN"], ["5C", "Right WIN"], ["5D", "Right MENU"], _ ["60", "NUM 0"], ["61", "NUM 1"], ["62", "NUM 2"], ["63", "NUM 3"], ["64", "NUM 4"], ["65", "NUM 5"], ["66", "NUM 6"], ["67", "NUM 7"], ["68", "NUM 8"], ["69", "NUM 9"], ["6A", "NUM *"], ["6B", "NUM +"], ["6C", "NUM ."], _ ["6D", "NUM -"], ["6E", "NUM ,"], ["6F", "NUM /"], ["70", "F1"], ["71", "F2"], ["72", "F3"], ["73", "F4"], ["74", "F5"], ["75", "F6"], ["76", "F7"], ["77", "F8"], ["78", "F9"], ["79", "F10"], ["7A", "F11"], ["7B", "F12"], _ ["7C", "F13"], ["7D", "F14"], ["7E", "F15"], ["7F", "F16"], ["90", "NUM"], ["91", "SCROLL"], ["A0", "Left SHIFT"], ["A1", "Right SHIFT"], ["A2", "Left CTRL"], ["A3", "Right CTRL"], ["A4", "Left MENU"], ["A5", "Right MENU"], _ ["BA", "Ü", ";"], ["BB", "+", "="], ["BC", ","], ["BD", "-"], ["BE", "."], ["BF", "#", "/"], ["C0", "Ö", "`"], ["DB", "ß", "["], ["DC", "^", "\"], ["DD", "´", "]"], ["DE", "Ä", "#"], ["E2", "<", "n.a."]] Local $hDLL = DllOpen("user32.dll"), $hGUI = GUICreate('', 1, 1, -1, -1, $WS_POPUP), $x = 1, $y = 1 ;$x = @DesktopWidth / 2 - 50, $y = @DesktopHeight / 2 ToolTip('Die blockierte Taste wird als Tooltip angezeigt... Abbruch mit ESC!', $x, $y) Sleep(1000) Local $sZeichenDeutsch, $sZeichenEnglisch While True For $i = 1 To 0xFF If _IsPressed(Hex($i, 2), $hDLL) Then If $i = 0x1B Then ExitLoop 2 ; ESC For $j = 0 To UBound($aTastaturZeichen) - 1 If $aTastaturZeichen[$j][0] = Hex($i, 2) Then $sZeichenDeutsch = $aTastaturZeichen[$j][1] $sZeichenEnglisch = $aTastaturZeichen[$j][2] ExitLoop EndIf Next If $sZeichenEnglisch = "" Then ; deutsche und englische Belegung gleich If $sZeichenDeutsch <> "" Then ToolTip('Blockierte Taste: ' & $sZeichenDeutsch & @CRLF, $x, $y) Else ToolTip('Blockierte Taste HEX: ' & Hex($i, 2) & @CRLF, $x, $y) ; keine Übersetzung des HEX-Code im Array gefunden EndIf Else ; deutsche und englische Belegung unterschiedlich ToolTip('Blockierte deutsche Taste: ' & $sZeichenDeutsch & @CRLF & 'Blockierte englische Taste: ' & $sZeichenEnglisch & @CRLF, $x, $y) EndIf While _IsPressed(Hex($i, 2), $hDLL) Sleep(250) WEnd ToolTip('Blockierte Taste: ', $x, $y) $sZeichenDeutsch = "" $sZeichenEnglisch = "" EndIf Next If Not WinActive($hGUI) Then WinActivate($hGUI) Sleep(10) WEnd ToolTip('') DllClose($hDLL)
Immer wenn die deutsche und englische Belegung unterschiedlich sind werden beide angegeben.
Jetzt fehlt mir nur noch die Auswertung der Modifier links oder rechts. Denn dabei wird immer der Standardcode für den Modifier zusammen mit dem Code des Modifiers spezialisiert auf seine Seite angegeben. Mit anderen Worten die linke SHIFT-Taste spukt immer die "10" und "A0" raus. Der Loop wird aber bereits bei einem Treffer von 10 beendet und deswegen gar nicht bis zu A0 durchgeschritten.
Hat da jemand eine Idee dazu? Wenn ich einfach die ["10", "SHIFT"] rauswerfe dann wird meistens der HEX-Code angezeigt und nicht "Left SHIFT".
Gruß, Conrad
-
Moin Andy,
Danke schon mal für die bisherigen Ausführungen. Ich bin in DLLStructs leider gar nicht zu Hause. Da muß ich wohl noch mal ordentlich büffeln, um das wirklich zu verstehen. Den riesigen Zeitgewinn zwischen beiden Methoden habe ich gesehen. Dabei hat sich gezeigt, daß ein weiterer großer Zeitfresser das 400ms-Array ist. Allein:
AutoIt_ArrayDelete($a400msInteger, "0-" & ($i100msSampleCount - 1) & "") ; aus dem 400ms-Array (also Momentary) die obersten 100ms entfernen _ArrayAdd($a400msInteger, $a100msInteger) ; die aktuellen 100ms hinzufügen
frisst pro 100ms-Runde ca. 100ms Zeit. Das ist natürlich Murks.
Was ich aber auch sehe, wenn ich
einschalte, daß mit reinem AutoIt das Array immer die exakten 4800 Werte hat, aber über die DLLStruct die Werte zwischen 4800 und 4812 schwanken. Weißt Du, warum das so ist?
Was Du bisher immer berechnest, ist 1 Kanal Audio hintereinander geschrieben. Es können ja aber bis zu 6 Kanäle sein, die interleaved, im Wechsel codiert sind. In Post 5 habe ich dieses Verhalten bereits berücksichtigt. Wie bekommt man das jetzt mit Deiner Variante hin? Vergrößert sich die Struct mal der Kanäle und greift die K-Filter-Berechnung nur auf die Werte zurück, die nur zu diesem Kanal gehören?
Ich denke mal, daß ich auch ein DLLStruct sowohl für die 400ms, als auch für die 3s schaffen muß und zwar für jeden Kanal extra. Da es Kanäle gibt, die mit Faktor 1,5 und einen Kanal mit Faktor 0 in die Gesamtberechnung eingehen.
Gruß, Conrad
-
Moin
_DebugArrayDisplay ist das alte _ArrayDisplay. Das neue _ArrayDisplay hat keine Knöpfe mehr. Es ist einfach nur zum Anschauen der Arrays.
Gruß, Conrad
-
Also theoretisch könnten die Audiosamples signed Integer 32bit sein. Ich durchdenke aber auch gerade, ob man allen Audiosamples größer 16bit einfach die lower Bytes klaut und 16bit draus macht. Das könnte eine Ungenauigkeit in der Größe des letzten 16bit-Bits sein, vermute ich, aber es ist, glaube ich, genau genug. Die Lautheitswerte werden am Ende mit einer Dezimalstelle angegeben. Ich muss das mal konkret durchrechnen.
Ob 8 Nachkommastellen für die Filterberechnung reicht, muß ich auch ausprobieren.
Gruß, Conrad
-
Ach ja, das könnte Sinn ergeben.
-
-
Moin.
ich hatte gerade versucht Code von ~320 Zeilen zu posten. Dabei sind mir dann die 20.000 Zeichen zum "Verhängnis" geworden. Ich hatte auch viel kommentiert zum besseren Verständnis, daß mußte ich jetzt rausschmeißen, damit es passt. Aufgefallen ist mir dabei, daß Word die Zeichen wohl anders zählt, als das Forum. In Word war ich bereits unter 20.000 mußte für das Forum aber noch ordentlich kürzen.
Für Projekte finde ich 350 Codezeilen eher wenig. Kann in diesem Unterforum die Zeichenanzahl erhöht werden?
Mir ist jetzt einige Male passiert, daß beim Posten die Enter/Return-Taste keine Funktion mehr hatte. Ich habe dann den Post abgeschickt und danach bearbeitet. Da funktionierte dann die Entertaste wieder. Kann sich jemand vorstellen, woran das liegen kann?
Gruß, Conrad