2009-05-06 9 views
2

Ich habe ein Szenario, in dem ich brauche, um einen Skript zusammen einen Eintrag in dem folgenden Registrierungsschlüssel für den aktuellen Benutzer hinzuzufügen:Windows XP, HKCU ... LastVisitedMRU maximale Anzahl von Elementen erlaubt?

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU\ 

Ich versuche, die maximale Anzahl der Werte in diesem Schlüssel erlaubt, um herauszufinden, damit ich mein Skript am Ende noch einmal anheften kann. Die Wertnamen beginnen am Anfang des Alphabets, aber ich möchte nicht annehmen, dass sie bei "Z" enden.

Hintergrund: Wir packen eine proprietäre (d. H. Nicht unsere eigene, haben wir keinen Zugriff auf die Quelle) -Anwendung und versuchen, seine Standard-Datei -> Open-Speicherort festlegen. Nach vielen schmerzhaften Snapshot- und File/Regmon-Sessions scheint dies der richtige Weg dafür zu sein. Ich weiß, es ist sehr hackisch, aber es funktioniert, ich habe die Theorie manuell getestet. Das heißt, ich bin durchaus offen für Vorschläge, wie man das Win32-freundlicher machen kann - unter der Annahme, dass die Anwendung keinen besseren Mechanismus dafür hat.

+1

Sie meinen, die Datei-> Öffnen Sie den Speicherort für eine andere Anwendung und nicht Ihre eigenen, nicht wahr? –

+0

@Factor: Ich verstehe Ihre Frage nicht ... Ich meine den File-> Open-Speicherort für diese Anwendung, die wir verpacken. –

Antwort

8

Dieser Registrierungsschlüssel enthält, für jeden Namen der ausführbaren Datei, dass das Verzeichnis, dass die Anwendung zuletzt hat seine SaveAs (und vielleicht sparen, ich bin sicher nicht) in.

Jeder Brief enthält Informationen für eine ausführbare Datei und die MRUList hält die Reihenfolge (das ist wichtig).

Mine ist bei "y" ausgereizt und meine MRUList ist sxahmcjierfobglyuqpdtwvkn.

Von Experimenten, wenn ich eine SaveAs von einer Anwendung, die bereits dort ist, tun, es ersetzt nur die Informationen für diesen Brief und verschiebt es an die Vorderseite der MRUList.

Wenn die Anwendung nicht da ist und nicht alle Buchstaben sind in der MRUList, packt es den ersten verfügbaren Buchstaben, legt die Informationen in diesem Schreiben legt dann den Brief an der Vorderseite des MRUList.

Wenn die Anwendung nicht vorhanden ist und alle Buchstaben verwendet werden, greift sie die letzte auf MRUList, legt die Informationen in diesen Buchstaben und bewegt sie dann zur Vorderseite der MRUList.

Ich bemerke, dass das Ausführen einer SaveAs für eine brandneue Anwendung gibt mir nicht z Brief, es verwendet die letzte in der `MRUList '.

Die Schlüssel selbst sehen nur aus wie UCS-2 (16-Bit Unicode, ASCII mit eingestreuten Nullbytes in meiner Australien-Version von Windows, Ihre Laufleistung kann für internationale Varianten variieren) und sie enthalten dann den nullterminierten ausführbaren Namen das nullterminierte Verzeichnis.

Und in Bezug auf Ihren Kommentar über keinen Zugriff auf die Quelle dieser Anwendung, spielt es keine Rolle. Es ist nicht diese Anwendung, die diese Schlüssel ändert. ComDlg32 ist der übliche Dialog von Windows selbst (Öffnen, Speichern als, Drucker einrichten usw.).

Wenn Sie die MRU für eine bestimmte Anwendung festlegen möchten, gehen Sie folgendermaßen vor.

1/Suchen Sie in den Buchstabentasten nach dieser Anwendung. Wenn Sie es finden, fahren Sie mit Schritt 3 fort.

2/Holen Sie sich den nächsten verfügbaren Brief, der nicht in der MRUList ist. Wenn der MRUList bereits alle Buchstaben a bis yoder hat, sind Sie nicht sicher, dass y immer der letzte sein wird (es kann an anderer Stelle in der Registrierung konfigurierbar sein), greifen Sie den letzten Buchstaben, der am Ende der MRUList.

3/Jetzt haben Sie Ihren Brief. Ändern oder erstellen Sie diesen Buchstabenschlüssel mit den UCS-2-Daten für Ihre Anwendung und Ihr Verzeichnis (beide null-terminiert).

4/Ändern Sie die MRUList, um Ihren Brief an die Front zu setzen.

Dort. Das sollte es tun.

+0

+1 würde gerne versuchen, Yee Bounty selbst zu bekommen, aber ich denke, du hast alles abgedeckt! – Wayne

2

Wenn ich Ihre Situation nicht falsch verstehe, sollte der Standard-Windows-OpenFileDialog eine Eigenschaft namens InitialDirectory haben, die das Verzeichnis angibt, in dem der Dialog geöffnet werden soll.

+0

Ich sehe, was Sie bekommen - ich habe die Frage aktualisiert, um anzuzeigen, dass wir keinen Zugriff auf die Quelle haben - wir packen tatsächlich eine Anwendung neu. –

0

Sind die anderen wichtig? Ich würde erwägen, die anderen fallen zu lassen oder den ersten oder letzten wieder zu verwenden. (Ich würde auch versuchen, nur mit einem beliebigen Zeichen, mit einem, aber Glück kann es funktionieren.)

+0

Am Ende haben wir genau das gemacht - nur den ersten auf jeder Maschine ersetzt, und das Deployment-System den MRUList-Schlüssel schreiben lassen, wenn er nicht existiert (für frisch gebaute Maschinen etc.). Ich lasse nur die Frage/Kopfgeld offen für jetzt, um zu sehen, ob jemand eine Ressource aufzeigen kann, um mehr eingehende Informationen über diese Art von Schlüssel usw. zu erfahren. –

Verwandte Themen