Nein, nur die ID eintragen: ControlCommand($hWnd, '', 346, 'Check', '')
Ich nehme ID nur ungern, weil diese häufig dynamisch sind und bei jedem Aufruf einen andren Wert haben.
Beiträge von BugFix
-
-
Mal nebenbei: Warum das mühsame Auseinanderfriemeln, statt ausschliesslich CN abzufragen?
-
Du kannst auch die ID verwenden anstatt "CLASS/INSTANCE".
Um das Fenster mit Teilen des Textes (also hier das Wort "Aktualisierung") zu erkennen, setze die Option: Opt("WinTitleMatchMode", 2) -
Wenn du WinWaitActive verwendest, bekommst du sowieso das Handle zurück:
AutoIt; statt: $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung" $hWnd = WinGetHandle($sTitle) WinWaitActive($sTitle) ; verwende: $sTitle = "Arbeitsplatzaktualisierung - Aktualisierung" $hWnd = WinWaitActive($sTitle)Hast du eventuell eine Option gesetzt, dass Fenster auch mit Teilen des Namens erkannt werden und somit das falsche Fenster ermittelt wird?
-
Checkbox ist ein Button.
Und für fremde Fenster gelten keine GUI-Befehle, sondern Window-Befehle.AutoIt
Alles anzeigen; Handle des Fensters holen $sTitle = "Arbeitsplatzaktualisierung - Neuinstallation" $hWnd = WinGetHandle($sTitle) ; Checkbox ist ein Button, ebenso wie Radio #cs "IsChecked", "" Returns 1 if Button is checked, 0 otherwise "Check", "" Checks radio or check Button "UnCheck", "" Unchecks radio or check Button #ce ; ist checked? $iResult = ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'IsChecked', '') ; check ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'Check', '') ; uncheck ControlCommand($hWnd, '', '[CLASS:Button;INSTANCE:1]', 'UnCheck', '') -
-
Na dann bau dir mal zusammen:
- multiline
- cn=(alles-ausser-Komma)
- Flag 3 (Array) -
-
$memberof ist ja ein Array
Es wird in der Funktion ein Array, du mußt nur die Variable deklarieren (Global $irgendeineVariable). Die Funktion macht daraus ein Array, befüllt es und gibt die Anzahl der Member zurück. Die Member selber sind dann in der vorab deklarierten Variable verfügbar.
-
$GUI_CHECKED + $GUI_ENABLE
Poooh - DAS kann tödlich sein. Nicht in diesem Fall, aber Konstanten enthalten oft Kombinationen von Werten. Wenn du dann addierst, wird unter Umständen eine völlig andere Kombination als gewollt entstehen.
Deshalb dafür ausschliesslich BitOr verwenden (so wie bei der Abfrage BitAnd).AutoIt
Alles anzeigen$a = BitOR(1,2,4,8) ConsoleWrite('Result: ' & $a & @CRLF) $a = (1+2+4+8) ConsoleWrite('Result like before: ' & $a & @CRLF) $a = BitOR(1,2,4,8,4,8) ; 4 and 8 2-times ==> BUT NOT added!! ConsoleWrite('Result: ' & $a & @CRLF) $a = (1+2+4+8+4+8) ; 4 and 8 2-times ==> AND ALSO added!! ConsoleWrite('Result is different: ' & $a & @CRLF) -
Steht doch im Funktionskopf:
Func _ADGetGroupMemberOf(ByRef $memberof, $groupdn, $sort = 0)
$sort ist optional, der Rest muß übergeben werden. Wobei $memberof eine ByRef-Variable ist, die also bereits vorher deklariert sein muss. -
[OT]
Mir ist heute alles Banane, aber sowas von.
- absolut gängige Aussage
[/OT] -
Hi,
meine Mutter ist inzwischen etwas schwach auf den Ohren. Da ist der Lautsprecher eines Flat-TV keine Erbauung (wirklich guter, klarer Klang nur hinter dem TV
).
Nun wollte ich da was Basteln. Eine Bedingung: Nicht noch eine Fernbedienung.
Meine Überlegung war jetzt, ein paar gute PC-Lautsprecher zu verwenden, Kopfhörerausgang hat der TV.Was ich jetzt nicht sicher weiß: Regelt die Lautstärkeänderung der Fernbedienung auch den Kopfhörerausgang? Konnte es noch nicht testen, war noch nicht vor Ort. Ich nehme aber an - ja.
Könnt ihr PC-Lautsprecher empfehlen? Klangregelung ist zwingend erforderlich um den Ton in den für meine Mutter hörbaren Frequenzbereich zu transponieren.
Ein zusätzlicher Kopfhörerausgang am Lautsprecher (parallel zu betreiben) wäre auch nicht schlecht, ihr Mann hört noch schlechter und braucht eigentlich einen Kopfhörer.Falls ihr mir bei meiner Suche helfen könnt, eventuell selber derartiges hinter euch habt, ich bin für jeden Tipp dankbar.
-
Da sich mal wieder im Forum jemand für AutoIt-OOP interessiert hat, möchte ich mal noch eine weitere Spielerei nachschieben: Gui-Elemente als Objekte. Dazu habe ich einige Gui-Ctrl "objektisiert"

Das Beispiel:
AutoIt
Alles anzeigen#include "oopAU3.au3" ; == Assignment Objekterstellung: Global $objGui = _objGUI_Create Global $objBtn = _objGUI_ButtonCreate Global $objInput = _objGUI_InputCreate Global $objRadio = _objGUI_RadioCreate Global $objCheck = _objGUI_CheckBoxCreate Global $objLabel = _objGUI_LabelCreate ; == Erstellen Gui + Zuweisen Events + Show in Einem $oGUI = $objGui('Test').Event('_MyDblClick', $_ON_DBLCLICK_).Event('_MyRightClick', $_ON_SECUP_).Event('_End', $_ON_CLOSE_).Show ; == Erstellen Button + Hintergrundfarbe + Event in Einem $oBtn_1 = $objBtn($oGUI, 'Button 1', 10, 10, 150, 22).BkCol(0xFFFFFF).Event('_BtnClick') $oBtn_2 = $oBtn_1.Clone('Button 2').y(40).Col(0xFFFFFF).BkCol(0x0000FF).Event('_BtnClick') ConsoleWrite('Text 1. Button: ' & $oBtn_1.Read & @CRLF) ; Methode 'Read' ConsoleWrite('Text 2. Button: ' & $oBtn_2.Text & @CRLF) ; Eigenschaft 'Text' ; == Erstellen Input mit InfoText $oInp = $objInput($oGUI, '', 10, 70, 200).InfoText('Gib mir Input ;-)') ; == Erstellen Radio mit Event / und $GUI_CHECKED $oRadio_1 = $objRadio($oGUI, 'Input ReadOnly', 20, 95, 90).Event('_RadioClick') $oRadio_2 = $oRadio_1.Clone('Input Zugriff').x(130).Checked.Event('_RadioClick') ; == Erstellen Checkbox mit Event $oCB_1 = $objCheck($oGUI, 'Button 1 - ROT', 10, 130, 150).Event('_CBClick') $oCB_2 = $oCB_1.Clone('Button 2 - WEISS').y(155).Event('_CBClick') ; == Erstellen Label + weiteren Button $oLbl_1 = $objLabel($oGUI, 'Label-1', 10, 185, 120, 22) $oLbl_2 = $oLbl_1.Clone('Label-2').y(207) $oBtn_3 = $objBtn($oGUI, 'Set Size Lbl-2', 260, 185, 100, 22).Event('_Lbl2_Font') ;~ Sleep(2000) ;~ $oGUI.Title = "Das ist ein neuer Titel" ;~ Sleep(2000) ;~ $oGUI.x = 200 ;~ Sleep(2000) ;~ $oGUI.y = 100 ; == Syntactic Sugar: MainLoop als Call $__MainLoop__() Func _Lbl2_Font() $oLbl_2.FontName('Courier New') Sleep(1000) $oLbl_2.FontName('Segoe UI').FontSize(8.5) ;~ ConsoleWrite('FontSize: ' & $oLbl_2.FontSize() & ' pt' & @CRLF) EndFunc Func _BtnClick() Local $aEvt = _objGUI_EventArray() ; [ID, Objekt] For $i = 1 To $aEvt[0][0] If @GUI_CtrlId = $aEvt[$i][0] Then ConsoleWrite('Klick: ' & '[CLASS: ' & $aEvt[$i][1].__class__ & '], Text: ' & $aEvt[$i][1].Text & @CRLF) ExitLoop EndIf Next EndFunc Func _MyDblClick() ConsoleWrite('Doppelklick auf GUI' & @CRLF) EndFunc Func _MyRightClick() ConsoleWrite('Rechtsklick auf GUI' & @CRLF) EndFunc Func _RadioClick() Switch @GUI_CtrlId Case $oRadio_1.ID $oInp.ReadOnly Case $oRadio_2.ID $oInp.ReadOnly(0) EndSwitch EndFunc Func _CBClick() Switch @GUI_CtrlId Case $oCB_1.ID If $oCB_1.Checked($_GET) Then $oBtn_1.BkCol(0xFF0000) $oCB_1.Text('Button 2 - WEISS') Else $oBtn_1.BkCol(0xFFFFFF) $oCB_1.Text('Button 2 - ROT') EndIf Case $oCB_2.ID If $oCB_2.Checked($_GET) Then $oBtn_2.BkCol(0xFFFFFF).Col(0x000000) $oCB_2.Text('Button 2 - BLAU') Else $oBtn_2.BkCol(0x0000FF).Col(0xFFFFFF) $oCB_2.Text('Button 2 - WEISS') EndIf EndSwitch EndFunc Func _End() Exit EndFuncIm Anhang sind alle erforderlichen Dateien enthalten, ebenso nochmal das Bsp. aus Post #1
EDIT: Gerade bemerkt: In der Zwischenzeit hat sich etwas geändert mit der AutoIt Version. Wenn ich das Window-HWnd aus dem Speicher abrufe muss ich es vor der Verwendung mit HWnd($hWnd) erst wieder nutzbar machen. Dadurch lief meine Methode .Clone nicht. Jetzt korrigiert.
-
Kann man in AutoIT nicht, die rechenlastigen aufgaben, an irgenteine C++ Bibliothek übergeben, und sich das Ergebnis holen?
Ist auch durchaus üblich, bei denen, die rechenintensive Aufgaben abarbeiten. Da wird z.B. ASM genutzt oder wie ich gerade selbst bei einem Projekt bemerkt habe, kann man die schnarchende Langsamkeit bei rekursiven Dateioperationen einfach von Powershell erledigen lassen, in einem Bruchteil der Zeit, die AutoIt braucht.
Das ist letztlich aber alles OK: AutoIt bietet ein einfach zu nutzendes Interface und wenns schnell gehen muss, wird der Auftrag weitergereicht.
-
Warscheinlich is der Vorteil von ByRef, das es schneller geht, da nix erstellt werden muss sondern immer weiterverarbeitet, richtig?
Die Geschwindigkeit (durch das Sparen des Kopierens des Originals) ist ein Punkt. Aber wesentlicher bei Objekten ist die Nutzung von ByRef bei Methoden des Objektes. Und das geht leider nicht mit AutoIt-OOP. Das Problem hatte ich mal hier geschildert.
-
Hier mal das Pattern erläutert:
Code
Alles anzeigen(\$[_\w]+)(?:\s*=([^,]+))? (\$[_\w]+) - der Variablenname () - in Klammern/ Capture fängt das Ergebnis auf \$ - das Zeichen "$", als Metazeichen muß es mit dem Backslash maskiert werden [] - eine Zeichenklasse für alle Zeichen die im Variablennamen erlaubt sind _ - das Zeichen "_" \w - alle Word-Zeichen (0-9 a-z A-Z) + - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich viele (?:\s*=([^,]+))? - die (optionale) Zuweisung ()? - Capture mit folgendem "?" macht den Inhalt optional ?: - Inhalt soll NICHT im Capture enthalten sein \s* - Leerzeichen mit Quantifier "*", 0 bis unendlich oft = - das Zeichen "=" HIER könnte man nochmal \s* einfügen - mögliches Leerzeichen nach dem Zuweisungsoperator ([^,]+) - der zugewiesene Wert [^,] - eine negierte Klasse, alles ausser dem Zeichen "," ist erlaubt + - Quantifier, Zeichen in der Gruppe mindestens 1 bis unendlich vieleDein Skript habe ich noch nicht getestet.
Ich habe viel mit AutoItOOP experimentiert. Bei einem Problem bin ich aber stecken geblieben: AutoitOOP-Objekte lassen sich nicht ByRef nutzen. Das liegt leider in der Natur dieses Objektes und läßt sich nicht ändern. Dadurch geht leider viel Objekt-Funktionalität verloren. -
Global $bla, $bla2, $bla4="",$bla5=";",$bla6='zomg'
Das ist nicht sehr komplex:
Wenn du die Zuweisungen auch möchtest, als Pattern: $sPattern = '(\$[_\w]+)(?:\s*=([^,]+))?' Wenn eine Variable eine Zuweisung hat folgt sie im Array nach dem Variablennamen.AutoIt$sLine = 'Global $bla, $bla2, $bla4="",$bla5=";",$bla6="zomg"' $sPattern = '(\$[_\w]+)(?:\s*=[^,]+)?' $aResult = StringRegExp($sLine, $sPattern, 3) For $i = 0 To UBound($aResult) -1 ConsoleWrite($aResult[$i] & @CRLF) Nextstringreplace( $source, ", _", "\b" )
Ich würde mit einem Leerzeichen ersetzen, aber nur die Fortschreibung: StringReplace( $source, " _", " " )
EDIT: Da es eingelesen ist, hängt noch ein Zeilenumbruch hinter, der muß natürlich auch mit weg.
-
Zitat
- > MULTI DEKLARATIONS dont work yet
- > DEKLARATIONS With a LINKEBREAK dont work yet
1. Meinst du mit Multideklarationen Deklarationen mit selben Namen in unterschiedlichem Scope?
2. Deklarationen mit Linebreak aufzulösen ist recht easy: Skript einlesen, Zeilenfortschreibungen löschen, ParsenFür beides findest du schon Lösungen hier im Forum. Ich habe das für SciTE-AddOns verwendet, schau mal in der Lua-Abteilung.
-
Wie kann ich beide Arrays vergleichen und das doppelte rausschmeissen?
Du kannst auch mal hiermit probieren.