2015-12-21 4 views
0

У меня есть приложение Python, которое вызывает внешнюю библиотеку (обертка swig на dll) для инициализации камеры. Если камеры нет, внешняя библиотека генерирует ошибку, которую я могу поймать и обрабатывать программно, но также генерирует всплывающее окно, которое необходимо закрыть, прежде чем программа сможет продолжить.Как я могу обрабатывать всплывающие всплывающие всплывающие окна, генерируемые вызываемыми библиотеками в Python?

Мне нужно либо предотвратить появление всплывающего окна, либо программно закрыть всплывающее окно. Возможны ли какие-либо из этих вариантов изнутри python?

Конечный продукт должен иметь возможность автономно работать.

Спасибо!

+0

Какая библиотека ваша программа python использует для создания пользовательского интерфейса программы? QT? GTK? Javascript/HTML/WSGI? У вас есть доступ к коду, который создает всплывающее окно? – NuclearPeon

+0

Прямо сейчас нет графического интерфейса пользователя, просто взаимодействие командной строки на windows7. В документации говорится, что исключенное исключение является исключением java. Я думаю, что код, который генерирует исключение, является открытым исходным кодом, поэтому я должен его найти и просмотреть, но я не хочу его менять. –

+0

Вы имеете дело с сторонним программным обеспечением, это не всегда легко. Есть ли программное обеспечение, которое в настоящее время обрабатывает камеру, что-то от производителя? Возможно, если камера активирована через ваш вызов библиотеки, она пробуждает существующее программное обеспечение, которое выдает окно. Если ваш код не вызывает всплывающее окно, проблема не связана с вашим кодом ... Вы можете попробовать удалить любое существующее программное обеспечение для обработки камеры (но НЕ драйверы). Указывает ли заголовок или содержимое всплывающего окна что-то о том, что его запускает? – NuclearPeon

ответ

0

Это очень грязно ... Я запускаю подпроцесс, который ищет окно предупреждения, прежде чем пытаться его инициализировать. Затем, если камера не активизируется и выдает всплывающее предупреждение, я узнаю ее и убиваю с помощью win32gui.

Соответствующий код в основной функции:

try: 
    subprocess.Popen(["python", "-m", "kill_warning"]) 
    init_camera() 
except NoCamera: 
    print("No camera found!") 

и kill_warning кода (попробуйте один раз в секунду в течение десяти секунд):

import win32gui 
import win32con 
import time 

if __name__ == "__main__": 
    for i in range(10): 
     handle = win32gui.FindWindow(None, r'TIS Initialisation Error') 
     win32gui.PostMessage(handle, win32con.WM_CLOSE,0,0) 
     time.sleep(1) 

Если что-то кажется вам опасным с этим методом, пожалуйста дай мне знать!

Смежные вопросы