Python Windows вызвать rundll32 модально
Нужно в Windows из приложения на Python (GUI на tkinter) открыть сертификат так, чтобы созданное окно было модальным. Т.е. сертификат должен открыться так:
Сам сертификат я могу открыть с помощью os.startfile, например:
os.startfile(cert_file_name.cer)
или с помощью subprocess, например:
subprocess.Popen(["C:\\Windows\\system32\\rundll32.exe", "cryptext.dll,CryptExtOpenCER", "cert_file_name.cer"])
Но в обоих случаях сертификат будет открыт как отдельный процесс. Можно ли открыть сертификат как модальное окно?
Ответы (1 шт):
Автор решения: Сергей Кох
→ Ссылка
Я думаю, что можно сымитировать "модальность":
- Открыть одновременно модальное окно, с помощью Toplevel и функций .grab_set() и .wait_window(), и окно сертификата (через subprocess.Popen).
- Сделать настоящее модальное окно невидимым .withdraw().
- Переодически проверяете завершился ли процесс с сертификатом.
- Если окно с сертификатом закрыто(или закрывается), то зыкрываете и настоящее модальное окно, тем самым делая активным основное окно. Я набросал заготовку с os.startfile на первые два пункта, для демонстрации:
import os
from tkinter import *
def func():
os.startfile('cert_file_name.cer')
top = Toplevel(root)
top.grab_set()
top.withdraw()
top.wait_window()
root = Tk()
label = Label(root, text='Текст')
label.pack()
(button := Button(root, text='open', command=func)).pack()
root.mainloop()
