Ja, danke Bernd. Das wars, was ich suchte.
Hab in diesem Zusammenhang ein anderes Problem. (Subscript used with non-Array variable)
Vielleicht hast du ja dort den entscheidenden Durchblick.
Beiträge von BugFix
-
-
Das ist die Fehlermeldung, die ich manchmal (nicht immer bekomme).
Hier das Script:Spoiler anzeigen
C
Alles anzeigen#include <GUIConstants.au3> #include <GuiList.au3> #NoTrayIcon Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\" $Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1) $Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266) $List1 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_restore = GUICtrlCreateButton("Wiederherstellen", 390, 65, 136, 36) $Button_add = GUICtrlCreateButton("Eintrag hinzufügen", 390, 125, 136, 36) $Button_del = GUICtrlCreateButton("Markierten Eintrag löschen", 390, 185, 136, 36) $Button_end = GUICtrlCreateButton("Ende", 390, 245, 136, 36) GUISetState(@SW_SHOW) $Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1) $Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66) $Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_cancel2 = GUICtrlCreateButton("Abbrechen", 30, 95, 121, 26) $Button_add_back = GUICtrlCreateButton("Hinzufügen", 220, 95, 121, 26) $Form3 = GUICreate("ACHTUNG!", 531, 96, -1, -1) GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel wird gelöscht! Ein Backup wird erstellt.", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xff0000) GUICtrlSetState(-1, $GUI_DISABLE) $Button_deltrue = GUICtrlCreateButton("Löschen", 20, 55, 85, 25) $Button_delfalse = GUICtrlCreateButton("Nicht Löschen", 430, 55, 85, 25) GUICtrlSetState(-1, $GUI_FOCUS) $Form4 = GUICreate("Gelöschte Einträge wiederherstellen", 552, 304, -1, -1) $Group4 = GUICtrlCreateGroup("Vorhandene Backups", 20, 15, 341, 266) $List4 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_cancel4 = GUICtrlCreateButton("Abbrechen", 390, 185, 136, 36) $Button_restore_back = GUICtrlCreateButton("Eintrag wiederherstellen", 390, 245, 136, 36) If FileExists(@ScriptDir & "\outlk_key.ini") Then GUICtrlSetState($Button_restore, $GUI_SHOW) Else GUICtrlSetState($Button_restore, $GUI_HIDE) EndIf _ReadSubKeyRefreshList() While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end ExitLoop Case $msg = $Button_add GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form2) Case $msg = $Button_del GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form3) Case $msg = $Button_deltrue $EntryDel = GUICtrlRead($List1) If $EntryDel <> "" Then _GetKeyToBackupINI() RegDelete($RegKey&$EntryDel) GUICtrlSetState($Button_restore, $GUI_SHOW) Else MsgBox(4096, "Achtung!", "Es wurde kein Eintrag ausgewählt.") EndIf GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) _ReadSubKeyRefreshList() Case $msg = $Button_delfalse GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) Case $msg = $Button_add_back $NewEntry = GUICtrlRead($Input1) If _GUICtrlListSelectString($List1, $NewEntry, -1) = $LB_ERR Then If $NewEntry <> "" Then _AddKeys4NewEntry($NewEntry) GUISetState(@SW_SHOW, $Form1) GUISetState(@SW_HIDE, $Form2) _ReadSubKeyRefreshList() Else MsgBox(4096, "Achtung!", "Kein neuer Eintrag erstellt!") EndIf Else MsgBox(4096, "Achtung!", "Eintrag existiert bereits!") EndIf Case $msg = $Button_cancel2 GUISetState(@SW_HIDE, $Form2) GUISetState(@SW_SHOW, $Form1) Case $msg = $Button_restore GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form4) _BackupList() Case $msg = $Button_cancel4 GUISetState(@SW_HIDE, $Form4) GUISetState(@SW_SHOW, $Form1) Case $msg = $Button_restore_back $EntryRestore = GUICtrlRead($List4) If $EntryRestore <> "" Then _RestoreKeyFromBackupINI() IniDelete(@ScriptDir & "\outlk_key.ini", $EntryRestore) If FileGetSize(@ScriptDir & "\outlk_key.ini") = 0 Then FileDelete(@ScriptDir & "\outlk_key.ini") GUICtrlSetState($Button_restore, $GUI_HIDE) EndIf $EntryRestore = "" GUISetState(@SW_HIDE, $Form4) GUISetState(@SW_SHOW, $Form1) _ReadSubKeyRefreshList() Else MsgBox(4096, "Achtung!", "Kein Eintrag zur Wiederherstellung ausgewählt.") EndIf EndSelect WEnd Exit Func _ReadSubKeyRefreshList() Dim $i=0 Dim $Wert, $Fehler=0 GUICtrlSetData($List1,"") Do $i+=1 $Wert=RegEnumKey($RegKey, $i) $Fehler=@Error If $Fehler=0 Then GUICtrlSetData($List1, $Wert) EndIf Until $Fehler<>0 EndFunc Func _AddKeys4NewEntry($NewEntry) RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry) EndFunc Func _GetKeyToBackupINI() Dim $RegTypes[8] $RegTypes[1] = "REG_SZ" $RegTypes[2] = "REG_EXPAND_SZ" $RegTypes[3] = "REG_BINARY" $RegTypes[4] = "REG_DWORD" $RegTypes[5] = "" $RegTypes[6] = "" $RegTypes[7] = "REG_MULTI_SZ" Dim $i = 0 Dim $Wert, $val, $Fehler = 0 Do $i+=1 $Wert = RegEnumVal($RegKey&$EntryDel, $i) $Fehler = @Error If $Fehler = 0 Then $val = RegRead($RegKey&$EntryDel, $Wert) IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val & ";" & $RegTypes[@extended] ) EndIf Until $Fehler <> 0 EndFunc Func _RestoreKeyFromBackupINI() $INISection = IniReadSection(@ScriptDir & "\outlk_key.ini", $EntryRestore) For $i = 1 To $INISection[0][0] $StrSplit = StringSplit($INISection[$i][1],";") RegWrite($RegKey&$EntryRestore, $INISection[$i][0], $StrSplit[1], $StrSplit[0]) Next EndFunc Func _BackupList() $var = IniReadSectionNames(@ScriptDir & "\outlk_key.ini") If @error Then MsgBox(4096, "Achtung!", "Keine gesicherten Einträge vorhanden.") Else For $i = 1 To $var[0] GUICtrlSetData($List4, $var[$i]) Next EndIf EndFunc
In Zeile 165 tritt der Fehler auf
For $i = 1 To $INISection[0][0]
For $i = 1 To $INISection^ ERRORDer fehler ist sicher berechtigt
Ursache ist eine zu diesem Zeitpunkt gelöschte INI-Datei.
Allerdings werden mir die Einträge aus der INI noch zur Auswahl (Wiederherstellung) angeboten.
Ich hab es mehrfach probiert:
1. neuen Eintrag (Schlüssel) angelegt
2. diesen Eintrag gelöscht (Sicherung wird in INI erstellt)
3. gelöschten Eintrag wiederhergestellt (Eintrag wird aus INI entfernt und wenn diese dann leer, wird INI gelöscht
Manchmal gehts, manchmal nicht.Wahrscheinlich ein Aufruf am falschen Ort zur falschen Zeit.
Naja, falls jemand den Fehler erspäht - ich bin dankbar für jeden Hinweis. -
Also meine Tochter (10) rennt bloß noch mit Brasilien-Klamotten durch die Gegend.
Meine Emotionen hierzu sind geringfügig mehr als die eines Eiswürfels.
-
Hi,
um mein Programm (Outlook Journaleintragstyp benutzerdefiniert) noch etwas komfortabler zu gestalten wollte ich automatisch vor dem Löschen eines Registryeintrages den Schlüssel mit allen Werten in einer INI-Datei sichern. Das klappt auch gut und sieht dann so aus:Hier die Funktion:
Code
Alles anzeigenFunc _GetKeyToBackupINI() Dim $i = 0 Dim $Wert, $val, $Fehler = 0 Do $i+ = 1 $Wert = RegEnumVal($RegKey&$EntryDel, $i) $Fehler = @Error If $Fehler = 0 Then $val = RegRead($RegKey&$EntryDel, $Wert) IniWrite ( @ScriptDir & "\outlk_key.ini", $EntryDel, $Wert, $val ) EndIf Until $Fehler <> 0 EndFunc
Aber leider wird hierbei die Information über den Registry Eintragstyp nicht mit übernommen. Die ersten beiden Einträge sind REG_DWORD der Rest REG_SZ.
Wenn ich den Schlüssel wiederherstellen möchte brauche ich aber den Typ. Bin völlig konsterniert.Edit:
Mir ist grad aufgefallen, dass die INI-Datei leider doch nicht so geeignet ist. Denn wenn ich diese auslesen will, müßte ich ja wissen wie die INI-keys (=REG-Werte) heißen.
Vielleicht hat jemand eine brauchbare Idee?
:help: -
So, mir ist noch eingefallen, dass jemand
- einen leeren String eintragen will
- keinen Eintrag zum Löschen markiert hat
- einen Eintrag der bereits existiert eintragen willDas wird jetzt alles abgefangen.
Spoiler anzeigen
C
Alles anzeigen#include <GUIConstants.au3> #include <GuiList.au3> #NoTrayIcon Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\" $Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1) $Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266) $List1 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_add = GUICtrlCreateButton("Eintrag hinzufügen", 390, 125, 136, 36) $Button_del = GUICtrlCreateButton("Markierten Eintrag löschen", 390, 185, 136, 36) $Button_end = GUICtrlCreateButton("Ende", 390, 245, 136, 36) GUISetState(@SW_SHOW) $Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1) $Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66) $Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_cancel = GUICtrlCreateButton("Abbrechen", 30, 95, 121, 26) $Button_add_back = GUICtrlCreateButton("Hinzufügen", 220, 95, 121, 26) $Form3 = GUICreate("ACHTUNG!", 531, 96, -1, -1) GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel für diesen Eintrag wird unwiederruflich gelöscht!", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xff0000) GUICtrlSetState(-1, $GUI_DISABLE) $Button_deltrue = GUICtrlCreateButton("Löschen", 20, 55, 85, 25) $Button_delfalse = GUICtrlCreateButton("Nicht Löschen", 430, 55, 85, 25) GUICtrlSetState(-1, $GUI_FOCUS) _ReadSubKeyRefreshList() While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end ExitLoop Case $msg = $Button_add GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form2) Case $msg = $Button_del GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form3) Case $msg = $Button_deltrue If GUICtrlRead($List1) <> "" Then RegDelete($RegKey&GUICtrlRead($List1)) Else MsgBox(4096, "Achtung!", "Es wurde kein Eintrag ausgewählt.") EndIf GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) _ReadSubKeyRefreshList() Case $msg = $Button_delfalse GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) Case $msg = $Button_add_back $NewEntry = GUICtrlRead($Input1) If _GUICtrlListSelectString($List1, $NewEntry, -1) = $LB_ERR Then If $NewEntry <> "" Then _AddKeys4NewEntry($NewEntry) GUISetState(@SW_SHOW, $Form1) GUISetState(@SW_HIDE, $Form2) _ReadSubKeyRefreshList() Else MsgBox(4096, "Achtung!", "Kein neuer Eintrag erstellt!") EndIf Else MsgBox(4096, "Achtung!", "Eintrag existiert bereits!") EndIf Case $msg = $Button_cancel GUISetState(@SW_SHOW, $Form1) GUISetState(@SW_HIDE, $Form2) EndSelect WEnd Exit Func _ReadSubKeyRefreshList() Dim $i=0 Dim $Wert, $Fehler=0 GUICtrlSetData($List1,"") Do $i+=1 $Wert=RegEnumKey($RegKey, $i) $Fehler=@Error If $Fehler=0 Then GUICtrlSetData($List1, $Wert) EndIf Until $Fehler<>0 EndFunc Func _AddKeys4NewEntry($NewEntry) RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry) EndFunc -
muh_kuh
Ja, ich hab die Beta.
@Schwester
Ich verwalte in Outlook meine Kunden und brauche eine Dokumentation für durchgeführte Tätigkeiten ("Einweisung", "Demo", "Wartung", Reparatur",....).
Da ich von Natur aus faul bin
hab ich halt keinen Bock zu jedem Kunden dann eine Notiz zu machen und o. a. Inhalt reinzuschreiben.
Jetzt hab ich meine Tätigkeiten als Journaltyp, klicke nur noch:
- neuer Journaleintrag
- Eintragstyp (= meine durchgeführte Arbeit)
- Zeit von bis (nicht zwingend)
- Kontakt (mein Kunde)
und ferddisch :tongue: -
Hallo,
alle die mit Outlook arbeiten, werden bestimmt schon festgestellt haben, dass sich das Journal sinnvoll nutzen ließe, wenn man vernüftige eigene Eintragstypen verwendet.
An all jene richtet sich nachfolgendes Script. Nun könnt ihr nach Herzenslust eigene Eintragstypen kreieren.
Beim Löschen von Outlook-eigenen Typen ist allerdings Vorsicht geboten. Falls ihr die autom. Journalfunktion aktiviert habt, kann es vielleicht zu Problemen führen. Hab ich aber nicht explicit getestet. - Nur der Vorsicht halber. :]
Wie immer, wenn es um die Registry geht - your own risk.
Wem das verwendete Icon nicht zusagt [8] , der kann auch gern ein anderes verwenden. Einfach in der Registry nachschauen, welche Icons von anderen Einträgen genutzt werden und davon eins auswählen.
Na dann viel Spaß!
Spoiler anzeigen
Code
Alles anzeigen#include <GUIConstants.au3> Const $RegKey="HKEY_CURRENT_USER\Software\Microsoft\Shared Tools\Outlook\Journaling\" $Form1 = GUICreate("Outlook Journal-Eintragstyp", 552, 304, -1, -1) $Group1 = GUICtrlCreateGroup("Vorhandene Journaltypen", 20, 15, 341, 266) $List1 = GUICtrlCreateList("", 35, 35, 311, 227, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_add = GUICtrlCreateButton("Eintrag hinzufügen", 390, 125, 136, 36) $Button_del = GUICtrlCreateButton("Markierten Eintrag löschen", 390, 185, 136, 36) $Button_end = GUICtrlCreateButton("Ende", 390, 245, 136, 36) GUISetState(@SW_SHOW) $Form2 = GUICreate("Neuen Eintragstyp hinzufügen", 377, 151, -1, -1) $Group2 = GUICtrlCreateGroup("Eintragstyp", 30, 15, 311, 66) $Input1 = GUICtrlCreateInput("", 40, 40, 291, 26, -1, $WS_EX_CLIENTEDGE) GUICtrlCreateGroup("", -99, -99, 1, 1) $Button_add_back = GUICtrlCreateButton("Hinzufügen", 220, 95, 121, 26) $Form3 = GUICreate("ACHTUNG!", 531, 96, -1, -1) GUICtrlCreateLabel("Achtung! Der Registry-Schlüssel für diesen Eintrag wird unwiederruflich gelöscht!", 20, 15, 492, 30, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN)) GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif") GUICtrlSetBkColor(-1, 0xff0000) GUICtrlSetState(-1, $GUI_DISABLE) $Button_deltrue = GUICtrlCreateButton("Löschen", 20, 55, 85, 25) $Button_delfalse = GUICtrlCreateButton("Nicht Löschen", 430, 55, 85, 25) GUICtrlSetState(-1, $GUI_FOCUS) _ReadSubKeyRefreshList() While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE Or $msg = $Button_end ExitLoop Case $msg = $Button_add GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form2) Case $msg = $Button_del GUISetState(@SW_HIDE, $Form1) GUISetState(@SW_SHOW, $Form3) Case $msg = $Button_deltrue If GUICtrlRead($List1) <> "" Then RegDelete($RegKey&GUICtrlRead($List1)) Else MsgBox(4096, "Achtung!", "Es wurde kein Eintrag ausgewählt.") EndIf GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) _ReadSubKeyRefreshList() Case $msg = $Button_delfalse GUISetState(@SW_HIDE, $Form3) GUISetState(@SW_SHOW, $Form1) Case $msg = $Button_add_back $NewEntry = GUICtrlRead($Input1) _AddKeys4NewEntry($NewEntry) GUISetState(@SW_SHOW, $Form1) GUISetState(@SW_HIDE, $Form2) _ReadSubKeyRefreshList() EndSelect WEnd Exit Func _ReadSubKeyRefreshList() Dim $i=0 Dim $Wert, $Fehler=0 GUICtrlSetData($List1,"") Do $i+=1 $Wert=RegEnumKey($RegKey, $i) $Fehler=@Error If $Fehler=0 Then GUICtrlSetData($List1, $Wert) EndIf Until $Fehler<>0 EndFunc Func _AddKeys4NewEntry($NewEntry) RegWrite($RegKey&$NewEntry, "AutoJournaled", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "JournalByContact", "REG_DWORD" , 00000000) RegWrite($RegKey&$NewEntry, "Large Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Small Icon", "REG_SZ" , "[8]") RegWrite($RegKey&$NewEntry, "Description", "REG_SZ" , $NewEntry) EndFunc -
Hi pee,
für die von mir schon erwähnte Doppelmonitorkarte "Jeronimo" gab es eine Software (Hydravision glaub ich). Mit der konntest du das Verhalten festlegen.
Welcher Monitor die #1 ist läßt sich normalerweise in den Anzeigeeinstellungen umschalten. Du siehst dort die Monitore 1 und 2 und kannst in der Combobox auswählen welcher zu 1 und welcher zu 2 wird.Hab noch das Menü angehängt. Dort für die andere Karte das Häkchen rein für primär.
-
Also erstmal Danke!
bernd670
Ja, genau so klappt es. Ich dachte eigentlich auch, dass die ControlId anstelle des Handle genutzt werden kann. Aber diese Funktion verlangt tatsächlich explicit das Handle.ytwinky
GUICtrlSetState() ist hier völlig wirkungslos. Ich nehme mal an, weil wir hier kein Control sondern eine GUI haben.
Und soweit ich weiß, zählen Button, Label, Combobox etc. zu den Controls, nicht aber die GUI selber. -
Bisher hab ich ja nur mit einer GUI gearbeitet. Nun teste ich grad das Arbeiten mit mehreren Fenstern.
Dabei ist mir unklar, wieso @SW_HIDE unterschiedlich wirkt. Das Script ignoriert das @SW_HIDE in Zeile 15. Aber in Zeile 19 wirkt es.
Habt ihr eine Erklärung?Spoiler anzeigen
Code
Alles anzeigen#include <GUIConstants.au3> $Form1 = GUICreate("Hauptfenster", 200, 100, -1, -1) $Button1 = GUICtrlCreateButton("Öffne Unterfenster", 50, 40, 100, 30) GUISetState(@SW_SHOW) $Form2 = GUICreate("Unterfenster; style = $WS_CLIPCHILDREN", 400, 200, @DesktopWidth/2 +50, -1, $WS_CLIPCHILDREN) $Button2 = GUICtrlCreateButton("Zurück zum Hauptfenster", 130, 80, 140, 30) While 1 $msg = GuiGetMsg() Select Case $msg = $GUI_EVENT_CLOSE ExitLoop Case $msg = $Button1 GUISetState(@SW_HIDE, "Hauptfenster") GUISetState(@SW_SHOW, "Unterfenster") Case $msg = $Button2 GUISetState(@SW_SHOW , "Hauptfenster") GUISetState(@SW_HIDE, "Unterfenster") EndSelect WEnd Exit -
Zitat
Die ganz langen Bezeichnungen der CDVD-Laufwerke auszublenden, verschenkt
Informationen
Ja, darum hatte ich das auch in meiner UDF in meinem 2.ten Beitrag entsprechend abgefragt.
Die Funktion werde ich allerdings noch etwas entschlacken. Völlig richtig: Fertig ist ein Programm nie. :] -
"sachsen-anhaltinisch" gefällt mir auch besser.
Aber offiziell sind wir eben keine "Sachsen-Anhaltiner" sondern "Sachsen-Anhalter". -
:lol:
Da hab ich dich aber total mißverstanden. Du willst also in der GUI "CD-Laufwerke öffnen/schließen" mit Button das Script für die "Bekannten Laufwerke" starten.
Das Script für die Laufwerke einfach vor dem anderen Code ausführen aber die GUI dazu erst wenn Button gedrückt wird (@SW_SHOW).
Versuch dich mal dran und poste was draus geworden ist.
Bin jetzt zu müde um noch weiter zu denken. Gute Nacht.Edit:
So, jetzt am Morgen kann ich klarer denken.
Es ist besser, die Scripte nicht miteinander zu verquicken sondern bei Betätigung des Button mit "RunWait()" das (kompilierte) Script für die "Bekannten Laufwerke" zu starten. -
Zitat
und noch ein Butten (Bekannte Laufwerke) beim Klick sollte er die auch Öffnen aber ich weiss noch nicht wie ich das in's script einFügen soll.
Ich stell mir grad vor, wie auf Knopfdruck meine Festplatte ausfährt.
-
Super,
das war dann ja eine gelungene sachsen-anhaltische (klingt doof - ist aber richtig) Kooperation. -
Problem gelöst:
Spoiler anzeigen
Code
Alles anzeigenFunc GetNameFromRegistry($Lw) Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $Lw), $c, $i, $va, $ve, $vr For $i=1 To StringLen($Reg)-2 Step 2 $c=Dec(StringMid($Reg, $i, 2)) If $c<>0 Then $Wert&=Chr($c) Next ; jetzt prüfen was es ist ; kein Wert=Festplattenpartition; "GENERIC_FLOPPY_DRIVE"; "CdRomNAME"; "CdRom&Ven_NAME"; "RemovableMedia" Select Case StringInStr($Wert, "GENERIC_FLOPPY_DRIVE")>0 Return "GENERIC FLOPPY DRIVE" Case StringInStr($Wert, "CdRom")>0 $i=StringInStr($Wert, "#")+6 $c=StringInStr($Wert, "__") $va=StringInStr($Wert, "&Ven_")+5 $ve=StringInStr($Wert, "#",0,2) Select Case $va=5 Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ") Case $va>5 $Wert=StringReplace(StringMid($Wert, $va, $ve-$va), "&Prod_", " ") $vr=StringInStr($Wert, "&Rev",0,-1) Return StringReplace(StringLeft($Wert,StringLen($Wert)-($ve-$vr)) & StringReplace(StringRight($Wert, $ve-$vr), "_", ". "),"&", " ") EndSelect Case StringInStr($Wert, "RemovableMedia")>0 Return "RemovableMedia" Case Else Return "Festplattenpartition" EndSelect EndFuncEdit:
ZitatIn der Registry finde ich auch keinen Hinweis auf ein virtuelles Lw.
Ich hab als virtuelle Lw sowohl CloneCD als auch NeroVirtualCD. Beide generieren unter "HKLM\SYSTEM\MountedDevices\DosDevices\" den Eintrag "\??\SCSI#CdRom&Ven_&NAME&Rev....#......"
Was hast du für ein virtuelles Lw ?Edit2:
ZitatDas Laufwerk wird erkannt, aber ich kann es nicht trennen..
Komisch, meine virtuellen Lw werden anstandslos entkoppelt mit "CDTray($lw, "open")". -
Zitat
Wie sieht denn das mit dem GUI aus, schafft das deine 1000 virtuellen Laufwerke ROFL
Vielleicht sollten wir ja noch eine Scrollbar einbauen...

-
Freut mich, dass es euch gefällt.
Am Anfang kommt man sich wirklich ziemlich hilflos vor - vor allem, wenn man eine entfernte Kugel anvisiert und diese dann vorm Queue 'tanzt'. Aber das gibt sich mit steigender Qualifikation.
Mein Lieblingsspiel ist übrigens Rotation.
Also bis dann.PS: Klar hat mir TmN Spaß gemacht. Aber gewinnen macht noch mehr Spaß!!

Edit: @jonk
Sag mal - Dein Signum ist das ein Auszug aus dem daVinci-Code?
-
Hi ytwinky,
Laufwerzuordnung stimmt, nur der Name eines Virtuellen Lw wird wg. fehlender Abfrageposition ("__") nicht ausgelesen. Ich hatte jetzt überlegt, den Namen aus: "HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi" auszulesen. Aber dann fehlt wieder die Lw-Zuordnung.

Ich werd mal noch suchen ob verschiedene Virtuelle Lw eine gemeinsame Komponente beim DosDevice-Eintrag haben. Falls ja, werde ich die Abfrage entsprechend erweitern. ERgebnisse gibts hier.
Bis dann.Edit:
So, habs gefunden. Virtuelle Lw werden nach der "CdRom"-Kennung mit "&Ven" (Virtual Environment) versehen.
Habe deine Funktion "GetNameFromRegistry" angepaßt. Nun klappts auch mit den VirtualCD.Spoiler anzeigen
Code
Alles anzeigenFunc GetNameFromRegistry($Lw) Dim $Wert, $Reg=RegRead("HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices", "\DosDevices\" & $Lw), $c, $i For $i=1 To StringLen($Reg)-2 Step 2 $c=Dec(StringMid($Reg, $i, 2)) If $c<>0 Then $Wert&=Chr($c) Next $i=StringInStr($Wert, "#")+6 $c=StringInStr($Wert, "__") $va=StringInStr($Wert, "&Ven_")+5 ; Ven = Virtual Environment $ve=StringInStr($Wert, "#",0,2) ; Ende Name und Rev-Nr Ven Select Case $va=5 ; kein Ven Return StringReplace(StringMid($Wert, $i, $c-$i), "_", " ") Case $va>5 ; Ven $Wert=StringReplace(StringMid($Wert, $va, $ve-$va), "&Prod_", " ") $vr=StringInStr($Wert, "&Rev",0,-1) ; Rev-Info Ven Return StringReplace(StringLeft($Wert,StringLen($Wert)-($ve-$vr)) & StringReplace(StringRight($Wert, $ve-$vr), "_", ". "),"&", " ") EndSelect EndFunc -
Hi,
gestern beim TmN spielen (man war ich schlecht :comp1: ) hatten wir auch das Free - Billardspiel "Carom3D" angesprochen.
Hier etwas mehr dazu:
- enthält: 3-Band, 4-Ball, 6-Ball, 8-Ball, 9-Ball, Rotation, Card-Ball, Snooker
- Match Type: Normal (bis max. 5 vs. 5) oder Challenge-Mode (1 vs. 1)
- man bekommt Punkte für Sieg und verliert Punkte bei Niederlage
- mit steigender Spielstufe verbessern sich Queueführung, Stoßkraft und techn. Möglichkeiten
- alle Details findet ihr auf http://www.carom3d.com
- Download: http://www.carom3d.com/download/download_client_1.asp
- Im Practice-Mode sind nicht alle Spielarten verfügbar. Durch eine technische Panne war einmal die Version 2.83 mit allen Spielen im Practice-Mode verfügbar. Ein flinker Gamer hat diese Version gesichert. Ich hab sie etwas entschlackt und mit Anweisung zur Nutzung auf meine Web-Site geladen. Wer will, darf zugreifen: Download Carom Full PracticeÜbrigens hat das Spiel tolle Onlinefunktionen per Kommandozeile (z.B. "/where nickname", "/join raumname", Nachricht an Spieler in anderem Raum: "/to nickname text" uva.)
Vielleicht sieht man sich ja mal beim Billard. Enjoy & have fun.