2016-02-15 3 views
2

У меня есть часть кода, показывающая почтовый ящик, реализованный с использованием ctype lib в python. Мой вопрос: есть ли способ отменить закрытие всего или правого щелчка при создании нескольких сообщений ctype?Можно ли отключить правый щелчок и закрыть все в окне сообщений ctype python?

def msgbox(self,hwnd,msg,thid,pid): 
     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 
     MB_SYSTEMMODAL=0x1000 
     """ 
       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(hwnd, msg+str(operatorMessage), "[Error]", MB_OK | ICON_STOP | MB_SYSTEMMODAL) 

enter image description here

+2

Это не CType MessageBox. 'ctypes' - это интерфейс к библиотекам с API C. Библиотека, которую вы используете, - 'user32.dll', которую предлагает Microsoft. Это их [документация для 'MessageBox'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505 (v = vs.85) .aspx). –

+0

привет, сэр, у вас есть пример кода, чтобы попробовать? – iamcoder

ответ

1

Вы можете отправить win32con.WM_CLOSE закрыть окно сообщения:

import win32con 
ctypes.windll.user32.PostMessageA(hwnd, win32con.WM_CLOSE, 0, 0) 

Чтобы отключить правую кнопку мыши на панели задач вы можете прикрепить вы MessageBox к окну без значка так будет быть невидимым на панели задач (Нет щелчка правой кнопкой мыши).

import ctypes 
import win32con 
import win32gui 


style = win32con.MB_OK 


wc = win32gui.WNDCLASS() 
wc.lpszClassName = "TaskbarDemo" 
rclass = win32gui.RegisterClass(wc) 

hwnd = win32gui.CreateWindow(rclass, "Taskbar Demo", style, \ 
       0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \ 
       0, 0, None, None) 


MessageBox = ctypes.windll.user32.MessageBoxA 
MessageBox(hwnd, 'Message', 'Window title', 0) 

EDIT:

def main(name): 
    try: 
     ...   
     wc.lpszClassName = name 
     ... 

Вызов его:

main("TaskbarDemo") 
main("zefaz") 
... 

и так далее ...

+0

Привет, сэр, спасибо за ваше замечательное предложение ... но в чем разница, когда я использую ctypes.windll.user32.FindWindowA (None, "[Error]"). я пришел к выводу, при создании нового MessageBox нить я получить там HWND = ctypes.windll.user32.FindWindowA (None, «[Error]») и добавить в список затем с помощью для ч в списке: ctypes.windll.user32.PostMessageA (hwnd, win32con.WM_CLOSE, 0, 0) – iamcoder

+0

Привет, сэр, ясно, цель, которую я пытаюсь сделать, - это остановить пользователя, щелкнув правой кнопкой мыши + закрыть все сгенерированные ошибки коробки. Спасибо – iamcoder

+0

у вас есть пример о том, как добиться блокировки/запрета правого клика для них, а не закрыть все окна сообщений? – iamcoder