Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


57 / 13005 ツリー ←次へ | 前へ→

【78899】アプリケーション起動完了の判定 ちょろすけ 17/2/21(火) 12:14 質問[未読]

【78905】Re:アプリケーション起動完了の判定 ちょろすけ 17/2/21(火) 22:17 回答[未読]
【78908】Re:アプリケーション起動完了の判定 ちょろすけ 17/2/22(水) 10:17 お礼[未読]

【78905】Re:アプリケーション起動完了の判定
回答  ちょろすけ  - 17/2/21(火) 22:17 -

引用なし
パスワード
   ウッシさん
お相手して下さってありがとうございます。
残念ながら今は確認できる環境が無いので明日試してみたいと思います。
宜しくお願い致します。

▼ウッシ さん:
>こんばんは
>
>済みません、コードの間違いも修正しました。
>
>'API宣言部
>Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
>Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
>Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
>Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
>'定数、変数
>Public Const GW_OWNER = 4
>Public flg As Boolean
>'再帰処理用コールバック関数
>Public Function GetProc(ByVal hWnd As Long, lParam As Long) As Boolean
>  Dim sName As String * 128
>  Dim ret  As Long
>  
>  sName = ""
>  'キャプションを取得
>  ret = GetWindowText(hWnd, sName, Len(sName))
>  '可視状態のウィンドウを調べる
>  If IsWindowVisible(hWnd) Then
>    'オーナーフォームのハンドル取得
>    If GetWindow(hWnd, GW_OWNER) = 0 Then
>      If ret <> 0 Then
>        '判定するアプリケーションのキャプション名
>        If sName Like "対象のWindowキャプション名*" Then
>          '見つかったらフラグをTrueにして、関数から抜ける
>          flg = True
>          Exit Function
>        End If
>      End If
>    End If
>  End If
>  GetProc = True
>End Function
>
>
>Sub test()
>  Dim s As Single
>  s = Timer
>  flg = False
>  Do
>    Call EnumWindows(AddressOf GetProc, 0)
>    'フラグがTrueになる前に10秒経過したらループ抜ける
>    If Timer - s > 10 Then '10秒待ち
>      Exit Do
>    End If
>  Loop Until flg = True
>  '見つかったらフラグはTrue、時間切れならFalse
>  If flg = False Then
>    MsgBox "時間切れ、見つかりません"
>  Else
>    '見つかったので次の処理
>    Stop
>  End If
>End Sub

【78908】Re:アプリケーション起動完了の判定
お礼  ちょろすけ  - 17/2/22(水) 10:17 -

引用なし
パスワード
   ウッシさん
動作させてみたところ無事に動きました。
追加して頂いたコメントは、これから勉強させていただきたいと思います。
助かりました、ありがとうございました。

▼ちょろすけ さん:
>ウッシさん
>お相手して下さってありがとうございます。
>残念ながら今は確認できる環境が無いので明日試してみたいと思います。
>宜しくお願い致します。
>
>▼ウッシ さん:
>>こんばんは
>>
>>済みません、コードの間違いも修正しました。
>>
>>'API宣言部
>>Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
>>Public Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
>>Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
>>Public Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
>>'定数、変数
>>Public Const GW_OWNER = 4
>>Public flg As Boolean
>>'再帰処理用コールバック関数
>>Public Function GetProc(ByVal hWnd As Long, lParam As Long) As Boolean
>>  Dim sName As String * 128
>>  Dim ret  As Long
>>  
>>  sName = ""
>>  'キャプションを取得
>>  ret = GetWindowText(hWnd, sName, Len(sName))
>>  '可視状態のウィンドウを調べる
>>  If IsWindowVisible(hWnd) Then
>>    'オーナーフォームのハンドル取得
>>    If GetWindow(hWnd, GW_OWNER) = 0 Then
>>      If ret <> 0 Then
>>        '判定するアプリケーションのキャプション名
>>        If sName Like "対象のWindowキャプション名*" Then
>>          '見つかったらフラグをTrueにして、関数から抜ける
>>          flg = True
>>          Exit Function
>>        End If
>>      End If
>>    End If
>>  End If
>>  GetProc = True
>>End Function
>>
>>
>>Sub test()
>>  Dim s As Single
>>  s = Timer
>>  flg = False
>>  Do
>>    Call EnumWindows(AddressOf GetProc, 0)
>>    'フラグがTrueになる前に10秒経過したらループ抜ける
>>    If Timer - s > 10 Then '10秒待ち
>>      Exit Do
>>    End If
>>  Loop Until flg = True
>>  '見つかったらフラグはTrue、時間切れならFalse
>>  If flg = False Then
>>    MsgBox "時間切れ、見つかりません"
>>  Else
>>    '見つかったので次の処理
>>    Stop
>>  End If
>>End Sub

57 / 13005 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free