Я работаю над приложением на основе Python, которое использует pywebview для отрисовки пользовательского интерфейса и win32gui для управления окном. Мое приложение гарантирует, что одновременно может работать только один экземпляр, используя мьютекс. При запуске второго экземпляра он восстанавливает существующее окно приложения, если оно свернуто или скрыто за другими экранами.
Проблема возникает при попытке восстановить свернутое окно. Используя следующий код:
Код: Выделить всё
hwnd = win32gui.FindWindow(None, 'Kiosk App')
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
win32gui.SetForegroundWindow(hwnd)
Ожидаемое поведение
- < li>Когда свернутое приложение восстанавливается, его содержимое WebView должно снова появиться правильно и позволить пользователю взаимодействовать с пользовательским интерфейсом.
- Окно восстанавливается и выводится на передний план, но содержимое внутри WebView становится пустым.
- Я проверил, что дескриптор hwnd правильно ссылается на существующее окно приложения.
- Win32gui.ShowWindow и Вызовы win32gui.SetForegroundWindow работают должным образом при запуске приложения.
- Я пытался динамически перезагрузить содержимое WebView во время восстановления, но поведение сохраняется.
Ниже приведена соответствующая часть кода, в которой я выполняю восстановление:
Код: Выделить всё
try:
handle = win32event.CreateMutex(None, True, mutex_name)
last_error = win32api.GetLastError()
if last_error == winerror.ERROR_ALREADY_EXISTS:
print("Another instance of the Kiosk application is already running.")
hwnd = win32gui.FindWindow(None, 'Kiosk App')
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
win32gui.SetForegroundWindow(hwnd)
sys.exit(0)
start_app('./ui/index.html', './keyboard/index.html')
- Версия Python: 3.8
- Используемые библиотеки:
Код: Выделить всё
pywebview==4.1 Код: Выделить всё
pywin32
Попытки устранения неполадок
Основываясь на рекомендациях и предложениях, я уже попробовал несколько подходов к решению проблемы, но ни один из них пока не сработал:
- Обновление содержимого WebView:
Я пытался динамически перезагружать содержимое WebView при восстановлении свернутого окна приложения. Однако это не решило проблему с пустым экраном. - Изменение состояний видимости окна:
Я экспериментировал с различными флагами win32gui.ShowWindow, такими как SW_RESTORE, SW_SHOW и SW_SHOWNORMAL, чтобы правильно восстановить окно. Хотя эти флаги переводят окно на передний план, содержимое внутри WebView остается пустым. - Воссоздание WebView :
Я пытался динамически уничтожить и воссоздать экземпляр WebView во время восстановления. Хотя этот подход работал частично, он вызывал другие проблемы, такие как потеря состояния приложения и пользовательских данных. - Обеспечение состояния переднего плана< /strong>:
Я подтвердил, что окно приложения было правильно установлено на передний план с помощью win32gui.SetForegroundWindow. Проблема сохраняется, несмотря на то, что приложение находится в фокусе.
Ожидаемое поведение
- Когда свернутое приложение восстанавливается, его содержимое WebView должно снова появиться правильно и позволить пользователю взаимодействовать с пользовательским интерфейсом.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ank-screen
Мобильная версия