Привет, У меня есть простой код, показывающий окно сообщения с использованием ctypes , но моя проблема заключается в том, что он не добавляет или перекрывает окно сообщений после добавления MB_TOPMOST?Не показывать несколько сообщений с использованием ctypes на python
def msgbox(self,msg):
MB_OK = 0x0
MB_OKCXL = 0x01
MB_YESNOCXL = 0x03
MB_YESNO = 0x04
MB_HELP = 0x4000
ICON_EXLAIM=0x30
ICON_INFO = 0x40
ICON_STOP = 0x10
MB_TOPMOST=0x40000
"""
HEX VALUE LINK
https://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm
"""
writeLogs = WriteLogs(
pathLog = app_config['path_logs'] +"\\"+strftime("%Y_%m_%d")+".log",
timedate = time.strftime("%m/%d/%Y %I:%M:%S %p")
)
writeLogs.appendLogA(msg)
ctypes.windll.user32.MessageBoxA(None, msg+str(operatorMessage), "[Error]", MB_OK | ICON_STOP | MB_TOPMOST)
В вашем теле класса, вы должны установить '_user32 = ctypes.WinDLL ('user32') '. Затем укажите 'self._user32.MessageBoxA'. Проблема заключается в том, что 'ctypes.windll.user32.MessageBoxA' разделяется всеми модулями, поэтому любой модуль может устанавливать атрибуты' argtypes' или 'errcheck' способами, которые нарушают ваш код. – eryksun
привет, спасибо за ваш комментарий, но могли бы вы иметь пример кода, о котором вы говорите? – iamcoder
'msgbox' - это метод некоторого класса, так как первым аргументом является' self'. Я предложил определить '_user32 = ctypes.WinDLL ('user32')' в классе класса, как атрибут класса, который вы можете ссылаться из экземпляра как 'self._user32'. Это будет ваша личная копия 'ctypes.WinDLL ('user32')' вместо использования shared 'ctypes.windll.user32'. Обратите внимание, что 'ctypes.windll.user32' реализуется путем вызова' ctypes.WinDLL ('user32') 'и кэширования результата на загрузчике' ctypes.windll'. Этот экземпляр кэша используется всеми модулями, использующими 'ctypes.windll', чего следует избегать. – eryksun