vielen dank euch beiden.
Beiträge von Maximus1
-
-
-
ich will aus heier hosts datei eine squid kompatible liste machen.
file einlesen geht und zeilen lesen geht auch.wenn ich nun aber das sehen will was zwischen ## und ] steht, wird mir nur 0 für nicht vorhanden und nichts für das ist doch irgendwas angezeigt.
[autoit]
wo ist mein fehler?
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
#include <Array.au3>
#include <File.au3>
#include <String.au3>Local $avArray[1]
[/autoit][autoit][/autoit][autoit]
Local $stringleft = '##'
Local $stringright = ']'Local $file = FileOpenDialog ( "", @HomeDrive, "acl datei(*.acl)" , 1)
[/autoit][autoit][/autoit][autoit]If $file = -1 Then
[/autoit][autoit][/autoit][autoit]
MsgBox(0, "Error", "Unable to open file.")Else
[/autoit][autoit][/autoit][autoit]
$zeilen = _FileCountLines($file)
MsgBox(0, "Zeilen", $zeilen)
For $i = 1 To $zeilen
$zeile = FileReadLine($file,$i)
MsgBox(0,"zeile",$zeile)
$string = _StringBetween($zeile, $stringleft, $stringright)
MsgBox(0,"string",$string)
Local $stringclean = StringReplace($zeile, $string, "")If $stringclean <> 0 Then
[/autoit][autoit][/autoit][autoit]
_ArrayAdd($avArray,$stringclean)
EndIfNext
[/autoit][autoit][/autoit][autoit][/autoit][autoit]EndIf
[/autoit][autoit][/autoit][autoit][/autoit][autoit]_ArrayDisplay($avArray)
[/autoit]
FileClose($file)
MsgBox(0, "", "tschuess") -
hallo und danke das du etwas in sachen softwareverteilung machst.
ich habe hier allerdings ein paar probleme mit deinem tool.
1. client.exe :
beim compilieren wird alles was mit _GetIntersection zu tun hat bemängelt. ich habe keine au3 datei dafür.CD:\soft deployment\client.au3(24,10) : ERROR: can't open include file <_GetIntersection.au3>. #include <_GetIntersection.au3> ~~~~~~~~~^ D:\soft deployment\client.au3(199,60) : ERROR: _GetIntersection(): undefined function. $ret = _GetIntersection($programme, $localprogramme, 0, ' ') ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ D:\soft deployment\client.au3 - 2 error(s), 0 warning(s)
2. client.exe zeile 30 :
[autoit]$freigabe = "ProgrammeAutoit$"
[/autoit]
bleibt das so oder muss ich das mit irgendwas austauschen?3. Die grafische oberfläche :
trotz eines programms das ich testweise hinzugefügt habe, taucht es nicht auf.
wenn ich auf wake up klicke beendet sich das script mit folgendem fehlerCodeD:\soft deployment\verteiltool.au3 (438) : ==> Variable used without being declared.: _Rechnerwakeup($typ, $RechnerTreeView_selected) _Rechnerwakeup(^ ERROR
jemand eine idee?
-
die lösung kann ja so einfach sein
ich frage mich warum ich sowas immer übersehe.ich danke dir für deinen tip.
-
dies ist der teil er ärger macht.
in der drittletzten zeile geht der ärger los. wenn ich $sspalte nutze bekomme ich die fehlermelungCodeC:\Program Files\AutoIt3\Include\Excel.au3 (694) : ==> The requested action with this object has failed.: Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn)^ ERROR
wenn ich jedoch eine zahl eingebe ist alles ok. ich kann jedoch keine zahl eingeben, da sich das format der excel tabelle scheinbar jeden tag nach laune des erstelles ändert.ideen?
[autoit]$aArray = _ExcelReadSheetToArray($oExcel, 2) ; Benutzt die vorgegebenen Parameter
[/autoit][autoit][/autoit][autoit]
#region --- CodeWizard generated code Start ---
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical, Modality=Task Modal, Miscellaneous=Top-most attribute
MsgBox(270352, "Welche Spalte (Namen)?", "Schau im nächsten Fenster wo die Namen stehen und Merke dir die Spalte (Senkrecht)")
#endregion --- CodeWizard generated code Start ---
_ArrayDisplay($aArray, "Welche Spalte?")
$namenspalte = InputBox("Welche Spalte?", "In welcher Spalte Standen die namen?")$menge = UBound($aArray)
[/autoit]
MsgBox(0, "reihen", $menge)
For $i = 0 To $menge - 1
GUICtrlSetData($uInput[$i] - 1, $aArray[$i][$namenspalte])
Next
Dim $test[30]
#region --- CodeWizard generated code Start ---
;MsgBox features: Title=Yes, Text=Yes, Buttons=OK, Icon=Critical, Modality=Task Modal, Miscellaneous=Top-most attribute
MsgBox(270352, "Welche Spalte?", "Schau im nächsten Fenster wo die Softwarepakete stehen und Merke dir die Spalte (Senkrecht)")
#endregion --- CodeWizard generated code Start ---
_ArrayDisplay($aArray, "Welche Spalte? (Software)")
$sspalte = InputBox("Welche Spalte?", "In welcher Spalte Standen die Softwarepakete?")
MsgBox(0, "", "-" & $sspalte & "-")
For $j = 1 To $menge - 1;Loop
$sCellValue = _ExcelReadCell($oExcel, $j, $sspalte)
$softarray[$j] = $sCellValue
Next -
hallo leute,
ich habe mich doch noch dran gesetzt und die boxen per for next schleife erstellen lassen.
daraufhin ist mein script von knapp unter 700 zeilen auf gerade mal 250 zeilen geschrumpft.es war doch nicht so viel arbeit wie gedacht und mein projekt ist nun auch fertig und wartet auf den produktiveinsatz die nächste woche.
die daten in arrays, das dann sortieren und per arrayunique und arraysort aufräumen ging recht schnell.
ebenso das einfügen lasen dieser bereinigten daten in die checkboxen.vielen dank für den doch massiven denkanstoss
-
das ist alles gut zu wissen und ich bin dir sehr dankbar für den code, jedoch ist das projekt schon weit vortgeschritten und ein umbauen würde viel zeit kosten.
in folgenden projekten wird der code auf jeden fall einfliessen.daher nochmals zurück zur ursprünglichen fragestellung.
wie kann ich die bestehenden inputboxen aus dem array befüllen? -
danke erstmal für deine hilfe.
es sind insgesammt 90 inputboxen die gefüllt werden sollen/können, die sich aufteilen in 30 user und ihren dazugehörigen nummern (asset). es gibt zudem ca 30 softwarepakete.
die daten bekomme ich aus einer excel tabelle, welche bis zu 30 user nebst ihrer asset nummer und einem feld "software" besteht.... zumindest ist das was ich daraus brauche.
die software ist von user zu user unterschiedlich.ich fragte mich schon wie man da ganze boxen erstellen übersichtlicher und kompakter halten kann, die antwort darauf habe ich somit ganz nebenher bekommen.
das ganze soll schlussendlich dazu dienen altiris schneller mit daten füttern zu können.
edit: wie kann ich die inputboxen denn ansprechen, wenn ich die so anlege?
-
ich will ein excel sheet in bestehende inputboxen einfügen.
[autoit]
das hier habe ich:Func _excelimport()
[/autoit][autoit][/autoit][autoit]
$sFilePath1 = FileOpenDialog("Bitte Excel datei auswählen", @ScriptDir, "Text files (*.xlsx)") ; Diese Datei sollte bereits existieren
$oExcel = _ExcelBookOpen($sFilePath1, 0)If @error = 1 Then
[/autoit][autoit][/autoit][autoit]
MsgBox(0, "Fehler!", "Das Excel-Objekt konnte nicht erstellt werden")
Exit
ElseIf @error = 2 Then
MsgBox(0, "Fehler!", "Die Datei existiert nicht!")
Exit
EndIf
$aArray = _ExcelReadSheetToArray($oExcel) ; Benutzt die vorgegebenen Parameter
_ArrayDisplay($aArray, "Das Array benutzt die vorgegebenen Parameter")
_ExcelBookClose($oExcel) ; Zum Abschluss verlassen wir das Programm
$menge = UBound($aArray)
For $i = 2 To $menge - 1
GUICtrlSetData($Input1, $aArray[$i][6])
NextEndFunc ;==>_excelimport
[/autoit]wie kann ich in der for.... next schleife so lange die nächste inputbox nutzen lassen bis die spalte des arrays abgearbeitet ist?
im anschluss wird das gleiche nochmal mit einer anderen spalte in andere boxen gemacht. da kommt aber stringsplit noch dazu, da ich dort trennzeichen habe. dazu aber vielleicht später. -
update
- wenn weder teilnehmer noch artikel angegeben waren und man den button drückte stürzte das tool ab...... behoben
- screenshots werden nur noch vom tool selbst erstellt und nicht mehr vom ganzen bildschirm.
- fehlermeldungen in der GUI was fehlt erstellt.
- kleines cleanup -
ja die GUI ist mit koda entstanden.
daher auch form 1 und die überflüssigen includes.die box variablen sind noch aus einer frühen version über geblieben.
ich würde mal sagen, das teil ist quick und dirty. :-S
-
ich habe einen generator gebaut, welcher aus bis zu 5 teilnehmern wählt und den dann mit dem zu verteilenden teil verknüpft ausgibt.
ich finde es für verschenkaktionen in foren ganz nützlich.vorgehensweise:
- bis zu 5 leute eingeben und markieren wer dran teilnehmen soll
- was man verteilen will eingeben und jeweiligen radio button klicken
- den großen button klicken
- freuendas tool lässt sich mehrfach bedienen ohne neugestartet werden zu müssen
es wird nach jedem klick auf den button ein screenshot erstelltexe und source ist im zip file
-
es gab ein kleines update
UPDATE:
22.03.2012
- Update durchgeführt und die maximale Anzahl auf 4 Geräte erhöht -
das lässt sich ja auch beliebig erweitern. einfach für mehr devices
[autoit]If $devs > XXXX Then $head = TrayCreateItem($devnamen[XXX])
[/autoit]auswechseln.
das gleiche muss dann aber auch in der while schleife passieren.
[autoit]
desweiteren sollten die variablen für die geräte angepasst werden.If $devs >XXX Then
[/autoit]
Select
Case $msg = $head
Run("SetDefaultAudioDevice.exe" & " " & $reg[XXX] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[XXX] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[XXX], 5, 1)
TrayItemSetState($hdmi, $TRAY_ENABLE)
TrayItemSetState($real, $TRAY_ENABLE)
TrayItemSetState($head, $TRAY_DISABLE)
Sleep(3000)
EndSelect
EndIf
zusätzlich noch was tolles einfallen lassen um die trayitems den dis- oder enablen.@ andi: ne ich glaube ich schlage mich erst mit der api oder anderem rum, wenn ich wirklich nicht mehr hinterrücks weiter komme. ich verbringe so schon mehr zeit mit googlen und testing als mit dem wirklichen schreiben.
ich habe in der zwischenzeit die finger doch nicht ganz davon lassen können und per
[autoit]
[/autoit]
FileInstall("SDAD.exe", @TempDir & "\")
.
.
.
.
.
Run(@TempDir & "\SDAD.exe" & " " & $reg[0] & " " & "communications", "", @SW_HIDE)
Run(@TempDir & "\SDAD.exe" & " " & $reg[0] & " " & "multimedia", "", @SW_HIDE)
sowie res add files im compiler alles zusammengepackt. -
ich habe es gelöst und das anlegen der items und die case auswahl ist noch das einfachste gewesen.
das script liegt fertig im scripte forum.
https://autoit.de/index.php?page=Thread&postID=245711#post245711 -
seit windows vista ist das handling mit den unterschiedlichen soundkarten etwas umständlich geraten.
mich persönlich nervt das so ziemlich und ich suchte nach einer möglichkeit das mit weniger mausklicks zu bewerkstelligen.
ich glaube ich habe es geschafft.mein script plaziert ein icon im tray und lässt diverse vorhandene sounddevices auswählen.
leider ist das setzen der werte in der registry für mich nicht ganz so einfach zu verstehen, da an den wichtigen stellen mit hex werten gearbeitet wird.
daher habe ich mich entschieden auf ein weiteres tool zurück zu greifen, was die werte setzt.
es wird im archiv mitgeliefertFeatures:
Auslesen der Namen der Sounddevices
es werden dynamisch items für 2 bis34 soundkarten gesetzt. (beliebig erweiterbar)
ca 4 mb speicherverbrauch
0% prozessorlast
schnell im umschalten
eine tolle blase die zeigt was gerade an ist
option zum deaktivieren der blase.
das aktive gerät ist ausgegraut (leider erst nach dem ersten setzen)wünsche an euch:
bugreports
tips zur verbesserung geben
im gesamten mithelfen das tool noch besser zu machen.hier nun das prachtstück:
Spoiler anzeigen
[autoit]#region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_Icon=1320412398_emblem-sound.ico
#AutoIt3Wrapper_Outfile=soundchanger mit tray 1.0.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#AutoIt3Wrapper_Run_Tidy=y
#AutoIt3Wrapper_Run_Obfuscator=y
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Constants.au3>
#include <Array.au3>
Opt("TrayMenuMode", 3)Local $reg[1]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $devnamen[1]
Local $blase = 1If @CPUArch = "X64" Then ; wenn x64 dann nimm den 64er regschlüssel
[/autoit] [autoit][/autoit] [autoit]
Global $key = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
Else
Global $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
EndIfFor $i = 1 To 20 ; bis zu 20 geräteschlüssel werden ausgelesen
[/autoit] [autoit][/autoit] [autoit]
Local $var = RegEnumKey($key, $i)
If @error <> 0 Then ExitLoop
$devices = RegRead($key & "\" & $var, "DeviceState") ; status des gerätes (nutzbar?!?)
If $devices = 1 Then ; wenn nutzbar dann steht da eine 1, also nimm das mit auf
$devname = RegRead($key & "\" & $var & "\" & "Properties", "{b3f8fa53-0004-438e-9003-51a46e139bfc},6") ; name des gerätes
_ArrayAdd($reg, $var) ; regschlüssel
_ArrayAdd($devnamen, $devname) ; gerätenamen
EndIf
Next
_ArrayDelete($devnamen, 0)
_ArrayDelete($reg, 0)$devs = UBound($devnamen)
[/autoit] [autoit][/autoit] [autoit]
$hdmi = TrayCreateItem($devnamen[0])
$real = TrayCreateItem($devnamen[1])
If $devs > 2 Then $head = TrayCreateItem($devnamen[2])
TrayCreateItem("")
$noblase = TrayCreateItem("Kein Traytip")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")TraySetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
TraySetClick(1)While 1
[/autoit]
$msg = TrayGetMsg()
Select
Case $msg = $hdmi
Run("SetDefaultAudioDevice.exe" & " " & $reg[0] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[0] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[0], 5, 1)
TrayItemSetState($hdmi, $TRAY_DISABLE)
TrayItemSetState($real, $TRAY_ENABLE)
TrayItemSetState($head, $TRAY_ENABLE)
Sleep(3000)
Case $msg = $real
Run("SetDefaultAudioDevice.exe" & " " & $reg[1] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[1] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[1], 5, 1)
TrayItemSetState($hdmi, $TRAY_ENABLE)
TrayItemSetState($real, $TRAY_DISABLE)
TrayItemSetState($head, $TRAY_ENABLE)
Sleep(3000)
EndSelect
If $devs > 2 Then
Select
Case $msg = $head
Run("SetDefaultAudioDevice.exe" & " " & $reg[2] & " " & "communications", "", @SW_HIDE)
Run("SetDefaultAudioDevice.exe" & " " & $reg[2] & " " & "multimedia", "", @SW_HIDE)
If $blase = 1 Then TrayTip("Sounddevice", "" & $devnamen[2], 5, 1)
TrayItemSetState($hdmi, $TRAY_ENABLE)
TrayItemSetState($real, $TRAY_ENABLE)
TrayItemSetState($head, $TRAY_DISABLE)
Sleep(3000)
EndSelect
EndIf
Select
Case $msg = $noblase
If $blase = 1 Then
$blase = 0
Else
$blase = 1
TrayTip("", "Traytips werden wieder angezeigt", 5, 1)
EndIf
Case $msg = $exititem
ExitLoop
EndSelect
WEndIch hoffe es ist für euch genauso nützlich wie für mich.
Gruß
Maximus1
UPDATE:
22.03.2012
- Update durchgeführt und die maximale Anzahl auf 4 Geräte erhöhtDie neue und zukünftige versionen könnt ihr auf meiner seite laden.
maxtools... fast alle meine tools -
wenn ein server daten auf verdacht schickt, weil da ja evtl. noch jemand sein könnte ist das nicht effizient.
mach es lieber so das der server immer innerhalb von sagen wir mal 10 sekunden ein paket vom client erwartet.
wenn das nicht kommt....... tschüss client.
du ersparst dir damit evtl. sogar jede menge code.aus einer funktion geht man doch mit return beim abbruch raus, oder irre ich mich da?
-
ich habe mir erstmal so beholfen, da ich mit WMI nicht wirklich was anfangen kann.
zur ausführung des scripts braucht ihr noch das tool hier
http://zornsoftware.talsit.info/free-downloads?did=14
das stellt anhand der GUID das jeweilig gewollte ein.
ich wollte das zwar selber machen, aber warum das rad neu erfinden, wenn MS sich mit der API sowieso so geheimnsvoll anstellt
http://social.microsoft.com/Forums/en/Offt…e9-2af63fd4a13eSpoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#Include <Constants.au3>
#include <Array.au3>
Opt("TrayMenuMode",3)Local $reg[1]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $devnamen[1]
Local $blase = 1If @CPUArch = "X64" Then ; wenn x64 dann nimm den 64er regschlüssel
[/autoit] [autoit][/autoit] [autoit]
Global $key = "HKEY_LOCAL_MACHINE64\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
Else
Global $key = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"
EndIfFor $i = 1 To 20
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Local $var = RegEnumKey($key, $i)
If @error <> 0 Then ExitLoop
$devices = RegRead($key&"\"&$var, "DeviceState") ; status des gerätes (nutzbar?!?)
if $devices = 1 Then ; wenn nutzbar dann steht da eine 1, also nimm das mit auf
$devname = RegRead($key&"\"&$var&"\"&"Properties", "{b3f8fa53-0004-438e-9003-51a46e139bfc},6") ; name des gerätes
_ArrayAdd($reg,$var) ; regschlüssel
_ArrayAdd($devnamen,$devname) ; gerätenamen
EndIf
Next
_ArrayDelete($devnamen,0)
_ArrayDelete($reg,0);~ $menge = _ArraySize( $reg ) ; einträge im array
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ for $j = 1 to $menge
;~ TrayCreateItem($devnamen[$j])
;~ Next$hdmi = TrayCreateItem($devnamen[0])
[/autoit] [autoit][/autoit] [autoit]
$real = TrayCreateItem($devnamen[1])
$head = TrayCreateItem($devnamen[2])
TrayCreateItem("")
$noblase = TrayCreateItem("Kein Traytip")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")TraySetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
TraySetClick(1)While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = TrayGetMsg()
Select
Case $msg = $hdmi
Run("SetDefaultAudioDevice.exe"&" "&$reg[0]&" "& "communications","",@SW_HIDE )
Run("SetDefaultAudioDevice.exe"&" "&$reg[0]&" "& "multimedia","",@SW_HIDE )
If $blase = 1 Then TrayTip("Sounddevice", ""&$devnamen[0], 5, 1)
TrayItemSetState ($hdmi,$TRAY_DISABLE)
TrayItemSetState ($real,$TRAY_ENABLE)
TrayItemSetState ($head,$TRAY_ENABLE)
Sleep(3000)
Case $msg = $real
Run("SetDefaultAudioDevice.exe"&" "&$reg[1]&" "& "communications","",@SW_HIDE )
Run("SetDefaultAudioDevice.exe"&" "&$reg[1]&" "& "multimedia","",@SW_HIDE )
If $blase = 1 Then TrayTip("Sounddevice", ""&$devnamen[1], 5, 1)
TrayItemSetState ($hdmi,$TRAY_ENABLE)
TrayItemSetState ($real,$TRAY_DISABLE)
TrayItemSetState ($head,$TRAY_ENABLE)
Sleep(3000)
Case $msg = $head
Run("SetDefaultAudioDevice.exe"&" "&$reg[2]&" "& "communications","",@SW_HIDE )
Run("SetDefaultAudioDevice.exe"&" "&$reg[2]&" "& "multimedia","",@SW_HIDE )
If $blase = 1 Then TrayTip("Sounddevice", ""&$devnamen[2], 5, 1)
TrayItemSetState ($hdmi,$TRAY_ENABLE)
TrayItemSetState ($real,$TRAY_ENABLE)
TrayItemSetState ($head,$TRAY_DISABLE)
Sleep(3000)
Case $msg = $noblase
If $blase = 1 Then
$blase = 0
Else
$blase = 1
TrayTip("", "Traytips werden wieder angezeigt", 5, 1)
EndIf
Case $msg = $exititem
ExitLoop
EndSelect
WEnd;~ Func _ArraySize( $reg )
[/autoit] [autoit][/autoit] [autoit][/autoit]
;~ SetError( 0 )
;~ $index = 0
;~ Do
;~ $pop = _ArrayPop( $reg )
;~ $index = $index + 1
;~ Until @error = 1
;~ Return $index - 1
;~ EndFuncwie man im code sehen kann, soll hier noch nicht ende sein. ich würde gern für jedes gefundene gerät automatisch einen trayeintrag mit den richtigen infos erstellen lassen.
wenn man mehr oder ewniger als meine 3 sounddevices hat kann es zu problemen kommen. das möchte ich damit dann beheben.würde mich freuen, wenn jemand einen heissen tip für mich hat wo ich mal schauen sollte.
-
ich möchte ein tool schreiben, das mir
1. die sounddevices aus der registry liest
2. deren status ausliest (standard oder nicht)ich weiss wo die registyschlüssel sind:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Renderdort verstecken sie sich in den langen zahlen Kolonen
ich habe auch herausgefunden das :
"DeviceState" 1 besagt das dieses gerät sichtbar und nicht deaktiviert ist.
Role:0 Role:1 Role:2 den die art der verwendung angibt .im darunterliegenden schlüssel ist der wert von "{a45c254e-df1c-4efd-8020-67d146a850e0},2" der name des gerätes.
nun will ich meinen soundchanger dahingehend umbaue, das er
1. die sounddevices aus der registry liest
2. deren status ausliest (standard oder nicht)
3. die devices im tray anzeigen
4. im tray den eintrag disabled der eh schon an ist
5. den regeintrag schreibt wie er sein soll.problem dabei ist, das die zahlenkolonen bei allen unterschiedlich sind und ich nun einen weg brauche dennoch die richtigen geräte zu finden.
das auslesen der einzelnen werte nach den zahlenkolonen ist simpel
im tray den disablen ist dann auch simpel
den regeintrag schreiben dann auch.bleibt also nur die frage wie ich den ganzen bereich auslese
das aussieben anhand von "DeviceState" ist dann schon wieder einfach.hier mein bisheriges script (dem einen oder anderen mag es in teilen bekannt vorkommen)
Spoiler anzeigen
[autoit]#Include <Constants.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Opt("TrayMenuMode",3)$hdmi = TrayCreateItem("HDMI")
[/autoit] [autoit][/autoit] [autoit]
$real = TrayCreateItem("Soundkarte")
$head = TrayCreateItem("Headset")
TrayCreateItem("")
$exititem = TrayCreateItem("Beenden")TraySetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
TraySetClick(1)While 1
[/autoit]
$msg = TrayGetMsg()
Select
Case $msg = $hdmi
Run("control mmsys.cpl,@0,0")
;~ ;warten bis das Fenster geöffnet wurde
WinWaitActive("Sound")
$a="HDMI ist nun an"
Send("{DOWN 1}")
; Zur Schaltfläche "Als Standard"
Send("{TAB 2}")
Send("{ENTER}")
Send("{ENTER}")
TrayTip("Sounddevice", ""&$a, 5, 1)
TrayItemSetState ($hdmi,$TRAY_DISABLE)
TrayItemSetState ($real,$TRAY_ENABLE)
TrayItemSetState ($head,$TRAY_ENABLE)
Sleep(3000)
Case $msg = $real
Run("control mmsys.cpl,@0,0")
;~ ;warten bis das Fenster geöffnet wurde
WinWaitActive("Sound")
$a="Soundkarte ist nun an"
Send("{DOWN 2}")
; Zur Schaltfläche "Als Standard"
Send("{TAB 2}")
Send("{ENTER}")
Send("{ENTER}")
TrayTip("Sounddevice", ""&$a, 5, 1)
TrayItemSetState ($hdmi,$TRAY_ENABLE)
TrayItemSetState ($real,$TRAY_DISABLE)
TrayItemSetState ($head,$TRAY_ENABLE)
Sleep(3000)
Case $msg = $head
Run("control mmsys.cpl,@0,0")
;~ ;warten bis das Fenster geöffnet wurde
WinWaitActive("Sound")
$a="Headset ist nun an"
Send("{DOWN 3}")
; Zur Schaltfläche "Als Standard"
Send("{TAB 2}")
Send("{ENTER}")
Send("{ENTER}")
TrayTip("Sounddevice", ""&$a, 5, 1)
TrayItemSetState ($hdmi,$TRAY_ENABLE)
TrayItemSetState ($real,$TRAY_ENABLE)
TrayItemSetState ($head,$TRAY_DISABLE)
Sleep(3000)
Case $msg = $exititem
ExitLoop
EndSelect
WEndideen bitte zu mir