2022年6月23日木曜日

Pywin32 ダイアログを前面に出したい改善

 スケジュールナースGUIは、複数画面の存在を許しています。(内部ソルバーは、一個しか許していないので求解を同時に行うことは出来ませんがソフトを複数起動することは可能です。)なので、前回のコードでは、複数のスケジュールナースを検出してしまう可能性があります。

幸い、次のリリースから、project_file_nameという変数にプロジェクトファイル名を入れているので、これをANDに取れば、複数の検出は防げます。



import win32com.client
import win32gui
import ctypes

MB_TOPMOST=0x00040000
MB_YESNOCANCEL=0x00000003
def winEnumHandler( hwnd, ctx ):
    if win32gui.IsWindowVisible( hwnd ):
        text=win32gui.GetWindowText( hwnd )
        print (hex(hwnd),text )
        if ('スケジュールナース' in text or "Schedule Nurse" in text) and project_file_name in text:
            global sc3_hwnd
            sc3_hwnd=hex(hwnd)
            print("Detected",sc3_hwnd)
sc3_hwnd=0
win32gui.EnumWindows( winEnumHandler, None )
MessageBox = ctypes.windll.user32.MessageBoxW
hwnd=int(int(sc3_hwnd,0))
print("hwnd=",hwnd)
#res=MessageBox(0, '本当に色付き出力にしますか?色付きにするとすごく時間がかかります。', '色付き出力選択',MB_TOPMOST|MB_YESNOCANCEL)
res=MessageBox(hwnd, '本当に色付き出力にしますか?色付きにするとすごく時間がかかります。', '色付き出力選択',MB_TOPMOST|MB_YESNOCANCEL)
        

0 件のコメント:

コメントを投稿