2011-11-02 35 views

Trả lời

5

Cách thực hiện điều này là gọi API Windows ShellExecuteEx() qua động từ properties. Có nhiều trình bao bọc Python cấp cao khác nhau về điều này nhưng tôi đã không thành công trong việc đưa bất kỳ trình nào trong số chúng hoạt động với động từ properties. Thay vào đó tôi sẽ sử dụng cũ tốt 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) 

Lý do tôi đặt lệnh gọi là sleep là hộp thoại thuộc tính được hiển thị dưới dạng cửa sổ trong quá trình gọi. Nếu thực thi Python chấm dứt ngay lập tức sau cuộc gọi đến ShellExecuteEx, thì không có gì ở đó để phục vụ hộp thoại và nó không hiển thị.

+0

Tuyệt vời, công trình này tuyệt vời - cảm ơn rất nhiều! Một trong những điều tôi đã thử là tương tự như thế này. Tôi đã không gọi giấc ngủ trong tập tin thử nghiệm của tôi để có thể dừng nó hoạt động. Tôi cũng đã không sử dụng wintypes và chỉ đi qua Không cho hầu hết các thông số của ShellExecuteEx. Đã đến lúc đọc lên trên ctypes! –

+0

@ David, cảm ơn bạn rất nhiều! Yo're đáng sợ! –

Các vấn đề liên quan