Remove win32com dependency by using ctypes to invoke win32 API.
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Sep 2010 10:18:49 +0000 (10:18 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Sep 2010 10:18:49 +0000 (10:18 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4238 38d2e660-2303-0410-9eaa-f027e97ec537

wizard/BFolderPage.py

index 6af6a651808475a05485295b4703f3da49d03dd5..9623394d1d423227e6dd09524876fceb5fc4de41 100644 (file)
@@ -136,10 +136,15 @@ class BFolderPage(BWizardPage):
         if stored_folder != "":
             self._destination_folder = stored_folder
         elif os.name == "nt":
-            from win32com.shell import shell, shellcon
-            self._destination_folder = shell.SHGetFolderPath(0, shellcon.CSIDL_PERSONAL, 0, 0)
-            del shell
-            del shellcon
+            def _winGetSpecialFolder(csidl):
+                from ctypes import windll, create_unicode_buffer
+                MAX_PATH = 4096
+                buf = create_unicode_buffer(MAX_PATH)
+                if not windll.shell32.SHGetSpecialFolderPathW(0, buf, csidl, False):
+                    raise WindowsError("cannot get special folder location")
+                return buf.value
+            CSIDL_PERSONAL = 5
+            self._destination_folder = _winGetSpecialFolder(CSIDL_PERSONAL)
         else:
             self._destination_folder = os.path.expanduser("~")
         self.pageContent.directoryEdit.setText(self._destination_folder)