GetOpenFilename api-Aufruf in Windows 7 nicht erlauben den direkten Zugriff auf Meine Dokumente
In vielen meiner Access (2002) - Programme, die ich verwenden GetOpenFileNameA und GetSaveFileNameA Funktionen aus comdlg32.dll. Ich habe oft die anfangs-Verzeichnis des Benutzers (Ordner eigene Dokumente (über Aufrufe SHGetSpecialFolderLocation und SHGetPathFromIDListA von shell32). Das ganze funktioniert einwandfrei unter Windows XP.
Allerdings habe ich vor kurzem umgestiegen auf Windows 7, da meine Entwicklungsumgebung und wurden immer folgende Fehlermeldung:
Können Sie nicht öffnen Sie diese Position mit
diesem Programm. Bitte versuchen Sie einen anderen
Lage.
Die Funktion, die ich nutzen, um Meine Dokumente, Speicherort ist wieder in den richtigen Ordner. Jedoch, selbst wenn ich hart code, das Verzeichnis, in das GetOpenFileNameA aufrufen, ich bekomme immer noch den Fehler.
Stieß ich auf diesen Beitrag: http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/3391f1dd-25b0-4102-9d5c-58309cc72c9d aber auch die Anpassung an die Arbeit mit Access anstelle von Excel, ich hatte kein Glück.
EDIT: Plötzlich ist dies nicht länger ein problem für mich. Ich vermute, ein windows-update ging die Lösung dieses Problems. Weiß jemand, ob das stimmt oder nicht?
EDIT: Es stellt sich heraus, dies ist immer noch ein problem. Auch im Fall, dass es hilft bei der Fehlersuche habe ich festgestellt, dass ich bekomme diese Fehlermeldung und es werden keine speziellen Ordner (eigene Musik, eigene Dokumente, etc). Auch, wenn ich den Speicherort der Ordner "eigene Musik", sagen Sie, C:\Test dann bekomme ich diese Meldung, wenn ich versuche, öffnen Sie den Ordner C:\Test, während die Ordner C:\Users\Mike\Music (das original Meine Musik Ort) öffnet sich ohne Probleme.
- Verwandte Frage hier gepostet: stackoverflow.com/questions/1907866/...
- Warum würde Sie zwingen, die ursprüngliche Verzeichnis MyDocs? Sie sollten nur Kraft einer ersten Verzeichnis, wenn Sie gespeichert, eine Vorherige Auswahl durch den Nutzer oder Ihre app ist irgendwie in der Lage zu erraten, ein nützliches Verzeichnis basiert auf einigen Zustand. ComDlg32 versucht, erinnere mich an einige dieser Infos für Sie als gut. MyDocs ist die Standard-fallback sowieso, so dass es keinen Sinn hat Sie zu zwingen.
- Meistens geben Benutzer einen konsistenten Ausgangspunkt beim exportieren von Daten aus Access. Oft habe ich dem Benutzer mehrere Access-Anwendungen. In der Regel haben Sie eine Ordner-Struktur einrichten, speichern exportiert Informationen in verschiedene Speicherorte basierend auf die app, die Sie exportieren aus. Soweit ich weiß, ComDlg32, erinnert sich die info auf der Grundlage der Prozess ausführbar ist. Leider, sieben völlig unterschiedliche access-Anwendungen haben msaccess.exe als der Prozess ausführbar ist. Die neue IFileDialog hat tatsächlich eine SetClientGUID Eigenschaft, behebt diese Einschränkung.
- Wenn comdlg32.dll hat, dass die Beschränkung auf aktuelle Verzeichnis (d.h., pro ausführbarer Datei und nicht pro Prozess), dann werden viele sollten Sie Graben Sie ein verwenden der Windows-API direkt, die so weit ich je erlebt habe in meiner Access-apps nicht über diese Einschränkung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows 7 erweitert das Konzept einer "Bibliothek", die im Grunde ist ein virtueller Ordner, der umfasst die Inhalte von mindestens zwei der tatsächlichen Unterverzeichnisse. Man Stelle es verwendet die Bibliothek ist der Ordner "Meine Dokumente", die (zumindest standardmäßig) ist eine Bibliothek, die beinhaltet sowohl die Benutzer-Dokumenten-Verzeichnis ("c:\users\whoever\documents") und den öffentlichen Dokumenten-Verzeichnis (C:\users\public\documents").
Als solche, die grundlegende Strategie, die Sie verwenden einfach nicht funktionieren kann-es gibt keinen Weg, der bezeichnet den Ordner "Dokumente". Der Dokumente-Ordner muss angegeben werden, indem eine PIDL, nicht ein Pfad.
Edit: Es ist nicht klar, was Los ist, wenn Sie Sie nicht öffnen können C:\users\user\Documents. Ein kurzer test in C++, funktioniert einwandfrei mit code wie:
OTOH, es gibt keine wirkliche Notwendigkeit, geben Sie die initial-Pfad-der Ordner "Dokumente" ist der Standard sowieso.
Den link, den ich gepostet in meiner ursprünglichen Frage (http://social.msdn.microsoft.com/Forums/en-US/windowsuidevelopment/thread/3391f1dd-25b0-4102-9d5c-58309cc72c9d) hielt die Antwort, nachdem alle. Ich fasse die Dinge hier. Um dieses Verhalten zu beheben, müssen Sie tun, Weg mit dem STRIPFOLDERBIT Flagge in der shell Kompatibilität registry-Eintrag für alle betroffenen Programme.
Im Hinterkopf behalten (und das ist, was ausgelöst mich so lange), dass 32-bit Programme haben Einträge in einem speziellen registry-Abschnitt, wenn Sie 64-bit-windows. Hier ist die quick und dirty: