ऐसा करने का तरीका 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
पर कॉल के तुरंत बाद समाप्त हो जाता है, तो संवाद सेवा करने के लिए वहां कुछ भी नहीं है और यह प्रदर्शित नहीं होता है।
स्रोत
2011-11-02 19:52:48
शानदार, यह बहुत अच्छा काम करता है - बहुत बहुत धन्यवाद! मैंने कोशिश की चीजों में से एक इस तरह के समान था। मैं अपनी टेस्ट फाइल में नींद नहीं बुला रहा था, जिससे यह काम करना बंद कर देता। मैं भी Wintypes का उपयोग नहीं कर रहा था और ShellExecuteEx के अधिकांश मानकों के लिए बस कोई नहीं गुजर रहा था। Ctypes पर पढ़ने के लिए समय! –
@ डेविड, बहुत बहुत धन्यवाद! तुम जबरदस्त हो! –