MB_SYSTEMMODAL=0x1000
MB_ICONINFORMATION=0x00000040
MB_RETRYCANCEL=0x5
IDCANCEL=2
VK_F5=0x74
WM_HOTKEY=0x0312
import ctypes, ctypes.wintypes
import threading
user32 = ctypes.windll.user32
HOTKEY_ID = 1
MODIFIERS = 0 # https://learn.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-registerhotkey#fsModifiers
KEY=VK_F5 # https://learn.microsoft.com/ru-ru/windows/win32/inputdev/virtual-key-codes
def msgbox():
mbox_answer = user32.MessageBoxW(0, "нажмите F5", "прога", MB_SYSTEMMODAL+MB_ICONINFORMATION)
print("msgbox", mbox_answer)
return mbox_answer
if not user32.RegisterHotKey(None, HOTKEY_ID, MODIFIERS, KEY):
print ("Unable to register id", HOTKEY_ID, MODIFIERS, KEY)
sys.exit(2)
msgbox_thread = threading.Thread(target=msgbox)
msgbox_thread.start()
msg = ctypes.wintypes.MSG()
while user32.GetMessageA (ctypes.byref (msg), None, 0, 0) != 0:
if msg.message == WM_HOTKEY:
if msg.wParam == HOTKEY_ID:
break
user32.UnregisterHotKey (None, HOTKEY_ID)
def runcode():
print("your code started")
runcode()
MessageBoxW не понятно как убить. Рекомендую вот это безобразие запустить в отдельном процессе и ждать его по join.