[AutoIt] If Else Stringvergleich

fatSquirrel

Ensign
Registriert
Juni 2014
Beiträge
197
Nabend,

hoffentlich bin ich im richtigen Unterforum. Ich bin gerade ziemlich am verzweifeln.
Ich möchte mir mit AutoIt ein paar Skripte schreiben, mit denen ich im Xonar DGX Treiber zwischen den Wiedergabegeräten wechseln kann. Das funktioniert soweit auch alles, nun aber zum Problem:

Das Skript soll überprüfen, ob bereits der "Kopfhörer" ausgewählt ist oder nicht und je nachdem eine Aktion durchführen.
Code:
$string = "Kopfhörer"
$string2 = ControlGetText("Xonar DGX Audio Center", "", "[CLASS:ComboBox; INSTANCE:5]")

MsgBox(64,"",$string2)

If $string == $string2 Then
MsgBox(64,"","Matched !")
Else
MsgBox(64,"","Didn't match..")
EndIf
Das Problem ist, dass er mir jedes Mal sagt, die Auswahl würde nicht übereinstimmen, obwohl er den "Kopfhörer" auch ausliest, wenn er angewählt ist.
auswahl.png einlese.png ergebnis.png
Weiß jemand, wie ich das Problem lösen kann?

lg fatSquirrel
 
Hey, danke für die Antwort.
Den Thread kenne ich schon. Leider hilft er mir aber nicht bei meinem Problem weiter. Ich bekomme es ja hin, dass ich per Makro zwischen Kopfhörer und Lautsprecher wechseln kann, aber diese if-Funktion will einfach nicht funktionieren...
 
Benutze die Funktion StringCompare()

$res=StringCompare($string,$string2)

MsgBox(64,"",$res)

wenn res < 0 dann enthält string2 weitere nicht sichtbare zeichen
Siehe auch AutoIt function

bei 0 wäre es gleichheit und bei >0 wäre string2 kürzer

nachtrag
oder probier mal mit klammern
if ($string == $string2) then
nachtrag 2: nee, quatsch, macht keinen unterschied :D
wenn string2 größer ist, dann kann kannst du ihn mit StringTrimLeft() auf die Zahl der Zeichen in "Kopfhörer" kürzen , oder mit
StringInStr() schauen ob string1 Teil von string2 ist
 
Zuletzt bearbeitet:
Erstmal ein großes Danke an dich!
$res ist -1, wenn Kopfhörer in dem Feld steht. Habe dann deinen Vorschlag mit StringInStr() umgesetzt und jetzt funktioniert's.

Kannst du mir vielleicht gleich noch bei einem anderen Problem helfen?
Ich würde gerne mit einem Skript "Dolby Headphone" auswählen, aber laut dem Window Info Tool "existiert das Kästchen nicht". Kann man einem Mausklick, mit Bezug (x, y) auf das Fenster, ausführen lassen?
Ich habe es schon mit Mouseclick() versucht, aber dann geht er immer von der Position meines Messzeigers aus.
 
Du kannst mit ControlClick() ein bekanntes Fenster steuern oder
mittels AutoIt-Optionen den Modus für die Mauskoordinaten von global (Bildschirm) auf lokal (aktives Fenster) setzen
AutoItSetOption ("MouseCoordMode", 0) oder
Opt("MouseCoordMode", 0)

Parameter 0=relativ zum fenster, 1=absolut(bildschirm), 2=client area des aktiven bereichs

viel Spaß beim umsetzen und viel Erfolg
 
Und nochmal Danke dafür. Funktioniert auch wunderbar.
Eine letzte allgemeine Frage hab ich noch. Gibt es eine Möglichkeit, dass Skript auszuführen, ohne dass es in den Vordergrund kommt?
 
ich verstehe die Frage nicht. Wenn ich ein AutoIt Skript starte, dann ist es, solange kein Fenster geöffnet wird, unsichtbar. Oder bezog sich die Frage auf das Fenster für die Audioeinstellungen. Da hab ich leider keine Antwort, ob oder wie man das ohne sichtbare GUI laufenlassen kann.

Gruß
 
So in etwa. Ich hatte die Überlegung, ob es möglich ist, dass Skript und die Bedienfenster im Hintergrund/minimiert durchführen zu lassen. Aber das geht ja scheinbar nicht.
 
minimiert geht,
dazu kann man entweder eine Verknüpfung anlegen und dort von "normales Fenster" auf minimiert starten umstellen,
oder für dein Skript die GUI für die Audioeinstellung minimiert starten

$res = Run("Namedesprogramms", "Arbeitssverzeichnis", @SW_Hide [oder @SW_minimize])

wenn res == 0 dann konnte das programm nicht gestartet werden, sonst process id als rückgabewert

Programmname und Arbeitsverzeichnis natürlich mit Pfadangabe einsetzen.

Es wird dann nur das Programmsymbol in der Taskleiste erscheinen. Für mich ist das zwar nicht "unsichtbar" aber vllt ist es was du meintest.

Gruß
 
Zuletzt bearbeitet: (RS)
Danke für die Antwort. Ich werde es heute mal ausprobieren.

Nachtrag: Hat funktioniert.
 
Zuletzt bearbeitet:
Zurück
Oben