掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
起動元からの重複起動の歯止め? (ID:104982)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あたしの上げた方法ですが試して見たところいくつか問題があったので 1.Enabledでボタン制御した時点で次のフォ-カスに遷移してしまうので その部分の考慮が必要です 2.Enabledを廃止した場合Formにフォーカスを移動するとかの処理が必要です。。 ↑を無視した場合↓の様になります ↓の関数は単純にForm上にコマンドボタンしかないメニューのイメージです。 コマンドボタンがいくつもプログラム起動とか戻る?終了?とかのイメージです Public Declare Function GetActiveWindow _ Lib "user32" () As Long 'アクティブウィンドウのハンドル取得 Public Sub nfTest() Dim lhWnd As Long 'Windowhwnd Dim bExit As Boolean '同期LoopOutフラグ Dim oCont As Object 'オブジェクトの参照用 On Error Resume Next 'エラースルー 'スレッド待機フラグを下ろす bExit = False '画面コントロール全てを検索 For nCnt = 0 To Screen.ActiveForm.Count - 1 'コマンドボタンのみ検出、Enabledメソッドを持つもの If TypeOf Screen.ActiveForm.Controls(nCnt) Is CommandButton Then 'イベント通知の認識破棄 Screen.ActiveForm.Controls(nCnt).Enabled = False End If Next 'フラグが立つまで同期待機 Do Until bExit 'アクティブウィンドウのハンドル取得 lhWnd = GetActiveWindow '当プロジャクトのアクティブフォームのハンドルとスレッド上のアクティブウィンドウハンドルが違う? If Screen.ActiveForm.hWnd <> lhWnd Then 'スレッド待機フラグを立てる bExit = True End If 'イベントキューを逃がす DoEvents Loop 'イベント通知認識破棄のコマンドボタン全ての再起 For nCnt = 0 To Screen.ActiveForm.Count If TypeOf Screen.ActiveForm.Controls(nCnt) Is CommandButton Then Screen.ActiveForm.Controls(nCnt).Enabled = True End If Next 'エラークリア Err.Clear End Sub プログラム起動後に↑の処理で待機させ 実行プログラムにフォーカス遷移しない場合(延々とEnterKeyによるClickイベントを拾ってる状態)待機しながらClickイベントを逃がしています。 Form上にコマンドボタン以外が存在する場合は追加する事になりますが イメージとしては上記の様な感じでしょうか? Form上にコマンドボタンをいくつか置いてCallして見れば解ると思います。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.