2010-02-07 13 views
6

...? सभी उपयोगकर्ताओ के लिए?स्टार्ट मेनू प्रोग्राम निर्देशिका का मार्ग कैसे प्राप्त करें? वर्तमान उपयोगकर्ता के लिए

मैं एक छोटा प्रोग्राम काम कर रहा हूं जिसे स्टार्ट मेनू में लिंक बनाने की आवश्यकता है। वर्तमान में मैं नीचे की तरह हार्डकोडिंग कर रहा हूं, लेकिन यह केवल अंग्रेजी लोकेशंस में काम करता है, उदाहरण के लिए यह जर्मन में "स्टार्टमेनू" होना चाहिए। क्लीनर, अधिक पोर्टेबल दृष्टिकोण क्या हैं?

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

धन्यवाद

उत्तर

1

एक दोस्त, पर्यावरण.gov.au के ल्यूक पाइनर ने ईमेल द्वारा एक समाधान दिया जो कोर मॉड्यूल (पायथन 2.5+) का उपयोग करता है। एपीआई कॉल से वापसी के रूप में बहुभाषी होने का विश्वास यूनिकोड है। जापानी वातावरण के साथ Win7 पर परीक्षण किया गया है, और एक और यूएस-अंग्रेज़ी मशीन पर मैन्युअल रूप से प्रारंभ मेनू बदलकर % करने के लिए बात करने के लिए USERPROFILE% \ StartMenu

''' 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 
+0

एफवाईआई: एमएस 'SHGetFolderPath' के लिए मुझे सबसे अच्छा संदर्भ मिल सकता है [यहां] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181%28v=vs.85%29.aspx) , जो नोट करता है कि इसे ['SHGetKnownFolderPath'] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb762188 (v = vs.85) .aspx के पक्ष में Vista के रूप में बहिष्कृत किया गया है) –

10

मैं यह कर के 2 तरीकों के बारे में सुना है। पहली:

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

दूसरा, WScript.Shell वस्तु का उपयोग कर (स्रोत: http://www.mail-archive.com/[email protected]/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

+0

"एक अन्य स्रोत" लिंक सब कुछ मैं के लिए देख रहा था था! :) – panofish

+1

पहला उदाहरण अपूर्ण है, 'शेलकॉन' परिभाषित नहीं किया गया है। आयात लाइन 'win32com.shell आयात खोल, शेलकॉन' से होनी चाहिए? –

2

इसके अलावा, CSIDL_COMMON_STARTMENU सभी उपयोगकर्ता स्टार्टअप और CSIDL_STARTMENU वर्तमान के लिए के लिए है उपयोगकर्ता स्टार्टअप।

संबंधित मुद्दे