Показать окно свойств проводника для файла в Windows - PullRequest
7 голосов
/ 02 ноября 2011

Есть ли простой способ показать диалоговое окно свойств файла в Windows, используя Python?

Я пытаюсь показать то же самое окно, которое появляется, когда вы щелкаете правой кнопкой мыши файл в Проводнике и выбираете Свойства.

1 Ответ

5 голосов
/ 02 ноября 2011

Способ сделать это - вызвать API Windows ShellExecuteEx(), передав глагол properties.Существуют различные высокоуровневые оболочки Python, но мне не удалось заставить их работать с глаголом 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, заключается в том, что диалог свойств отображается как окно в вызывающем процессе.Если исполняемый файл Python завершается сразу после вызова ShellExecuteEx, то нет ничего, что могло бы обслуживать диалог, и оно не показывалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...