Как получить путь к каталогу программ меню «Пуск»? - PullRequest
6 голосов
/ 07 февраля 2010

... для текущего пользователя? для всех пользователей?

Я работаю над небольшой программой, которая должна создавать ссылки в меню «Пуск». В настоящее время я жестко программирую, как показано ниже, но это работает только в английских локалях, например, это должно быть "Startmenü" на немецком языке. Каковы более чистые, более портативные подходы?

OUR_STARTMENU = os.environ['ALLUSERSPROFILE'] + '\Start Menu\Programs\Our Stuff'

спасибо

Ответы [ 3 ]

10 голосов
/ 07 февраля 2010

Я слышал о 2 способах сделать это. Во-первых:

from win32com.shell import shell
shell.SHGetSpecialFolderPath(0,shellcon.CSIDL_COMMON_STARTMENU)

Во-вторых, используя объект WScript.Shell (источник: http://www.mail-archive.com/python-win32@python.org/msg00992.html):

import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserProgramsMenu = objShell.SpecialFolders("AllUsersPrograms")
userMenu = objShell.SpecialFolders("StartMenu")

Другой источник: http://blogs.msdn.com/saveenr/archive/2005/12/28/creating-a-start-menu-shortcut-with-powershell-and-python.aspx

2 голосов
/ 07 февраля 2010

Кроме того, CSIDL_COMMON_STARTMENU предназначен для запуска всех пользователей и CSIDL_STARTMENU для запуска текущего пользователя.

1 голос
/ 10 февраля 2010

Друг Люк Пиннер из Environment.gov.au дал решение по электронной почте, в котором используется основной модуль (python 2.5+). Считается, что он многоязычный, так как возвращаемым вызовом API является Unicode. Протестировано на Win7 с японским языком и на другом американско-английском компьютере, изменив вручную меню «Пуск», указав % USERPROFILE% \ Startmenü

''' Get windows special folders without pythonwin
    Example:
            import specialfolders
            start_programs = specialfolders.get(specialfolders.PROGRAMS)

Code is public domain, do with it what you will. 

Luke Pinner - Environment.gov.au, 2010 February 10
'''

#Imports use _syntax to mask them from autocomplete IDE's
import ctypes as _ctypes
from ctypes.wintypes import HWND as _HWND, HANDLE as _HANDLE,DWORD as _DWORD,LPCWSTR as _LPCWSTR,MAX_PATH as _MAX_PATH, create_unicode_buffer as _cub
_SHGetFolderPath = _ctypes.windll.shell32.SHGetFolderPathW

#public special folder constants
DESKTOP=                             0
PROGRAMS=                            2
MYDOCUMENTS=                         5
FAVORITES=                           6
STARTUP=                             7
RECENT=                              8
SENDTO=                              9
STARTMENU=                          11
MYMUSIC=                            13
MYVIDEOS=                           14
NETHOOD=                            19
FONTS=                              20
TEMPLATES=                          21
ALLUSERSSTARTMENU=                  22
ALLUSERSPROGRAMS=                   23
ALLUSERSSTARTUP=                    24
ALLUSERSDESKTOP=                    25
APPLICATIONDATA=                    26
PRINTHOOD=                          27
LOCALSETTINGSAPPLICATIONDATA=       28
ALLUSERSFAVORITES=                  31
LOCALSETTINGSTEMPORARYINTERNETFILES=32
COOKIES=                            33
LOCALSETTINGSHISTORY=               34
ALLUSERSAPPLICATIONDATA=            35

def get(intFolder):
    _SHGetFolderPath.argtypes = [_HWND, _ctypes.c_int, _HANDLE, _DWORD, _LPCWSTR]
    auPathBuffer = _cub(_MAX_PATH)
    exit_code=_SHGetFolderPath(0, intFolder, 0, 0, auPathBuffer)
    return auPathBuffer.value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...