ウインドウの存在確認 <TOP>
IsWindow 指定のウインドウが、存在するか調べる
FindWindow
クラス名とウィンドウ名が指定された文字列と一致するトップ レベル ウィンドウのハンドルを取得
タイマーで電卓の存在有無を確認し、存在する場合そのハンドル値を表示します。
'================================================================ '= ウインドウの存在を確認 '= (IsWindow.bas) '================================================================ #include "Windows.bi" ' 指定されたウィンドウ ハンドルが既存のウィンドウを識別しているどうかを判断 Declare Function Api_IsWindow& Lib "user32" Alias "IsWindow" (ByVal hWnd&) ' 指定された文字列と一致するクラス名とウィンドウ名を持つトップレベルウィンドウ( 親を持たないウィンドウ)のハンドルを返す。この関数は、子ウィンドウは探さない。検索では、大文字小文字は区別されない Declare Function Api_FindWindow& Lib "user32" Alias "FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$) Var Shared Text(2) As Object Var Shared Button1 As Object Var Shared Timer1 As Object For i = 0 To 2 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Timer1.Attach GetDlgItem("Timer1") Var Shared hWnd As Long '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Shell "Calc.exe" Timer1.SetInterval 100 Timer1.Enable -1 End Sub '================================================================ '= '================================================================ Declare Sub Timer1_Timer edecl () Sub Timer1_Timer() Var ClassName$ As String Var Caption$ As String Var Ret As Long ClassName$ = "SciCalc" Caption$ = "電卓" '電卓のハンドル取得 hWnd = Api_FindWindow(ClassName$, ByVal 0) Text(1).SetWindowText "&&H" & Hex$(hWnd) 'ウインドウの存在確認 Ret = Api_IsWindow(hWnd) If Ret = 0 Then Text(0).SetWindowText "電卓は存在しません!" Button1.EnableWindow -1 Else Text(0).SetWindowText "電卓は存在します!" Button1.EnableWindow 0 End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End