2011-11-02 8 views
7

में फ़ाइल के लिए एक्सप्लोरर के गुण संवाद दिखाएं क्या Python का उपयोग कर विंडोज में फ़ाइल के लिए गुण संवाद दिखाने का कोई आसान तरीका है?विंडोज

मैं उसी विंडो को दिखाने की कोशिश कर रहा हूं जो पॉप अप करता है जब आप एक्सप्लोरर में फ़ाइल पर राइट क्लिक करते हैं और गुण चुनें।

उत्तर

5

ऐसा करने का तरीका properties क्रिया को पारित करने वाले विंडोज ShellExecuteEx() API को कॉल करना है। इस के विभिन्न उच्च स्तरीय पायथन रैपर हैं लेकिन मैं उनमें से कोई भी properties क्रिया के साथ काम करने में सफल नहीं हुआ हूं। इसके बजाय मैं अच्छे पुराने ctypes का उपयोग करूंगा।

import time 
import ctypes 
import ctypes.wintypes 

SEE_MASK_NOCLOSEPROCESS = 0x00000040 
SEE_MASK_INVOKEIDLIST = 0x0000000C 

class SHELLEXECUTEINFO(ctypes.Structure): 
    _fields_ = (
     ("cbSize",ctypes.wintypes.DWORD), 
     ("fMask",ctypes.c_ulong), 
     ("hwnd",ctypes.wintypes.HANDLE), 
     ("lpVerb",ctypes.c_char_p), 
     ("lpFile",ctypes.c_char_p), 
     ("lpParameters",ctypes.c_char_p), 
     ("lpDirectory",ctypes.c_char_p), 
     ("nShow",ctypes.c_int), 
     ("hInstApp",ctypes.wintypes.HINSTANCE), 
     ("lpIDList",ctypes.c_void_p), 
     ("lpClass",ctypes.c_char_p), 
     ("hKeyClass",ctypes.wintypes.HKEY), 
     ("dwHotKey",ctypes.wintypes.DWORD), 
     ("hIconOrMonitor",ctypes.wintypes.HANDLE), 
     ("hProcess",ctypes.wintypes.HANDLE), 
    ) 

ShellExecuteEx = ctypes.windll.shell32.ShellExecuteEx 
ShellExecuteEx.restype = ctypes.wintypes.BOOL 

sei = SHELLEXECUTEINFO() 
sei.cbSize = ctypes.sizeof(sei) 
sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_INVOKEIDLIST 
sei.lpVerb = "properties" 
sei.lpFile = "C:\\Desktop\\test.txt" 
sei.nShow = 1 
ShellExecuteEx(ctypes.byref(sei)) 
time.sleep(5) 

कारण मैं sleep करने के लिए कॉल में डाल कि गुण संवाद बुला प्रक्रिया में एक खिड़की के रूप में दिखाया जाता है। यदि पाइथन निष्पादन योग्य ShellExecuteEx पर कॉल के तुरंत बाद समाप्त हो जाता है, तो संवाद सेवा करने के लिए वहां कुछ भी नहीं है और यह प्रदर्शित नहीं होता है।

+0

शानदार, यह बहुत अच्छा काम करता है - बहुत बहुत धन्यवाद! मैंने कोशिश की चीजों में से एक इस तरह के समान था। मैं अपनी टेस्ट फाइल में नींद नहीं बुला रहा था, जिससे यह काम करना बंद कर देता। मैं भी Wintypes का उपयोग नहीं कर रहा था और ShellExecuteEx के अधिकांश मानकों के लिए बस कोई नहीं गुजर रहा था। Ctypes पर पढ़ने के लिए समय! –

+0

@ डेविड, बहुत बहुत धन्यवाद! तुम जबरदस्त हो! –