Excel VBA質問箱 IV

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

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


6397 / 13644 ツリー ←次へ | 前へ→

【45445】アプリケーション名(クラス)が起動するたびに変わる場合の判断方法 FJ 06/12/24(日) 23:47 質問[未読]
【45446】Re:アプリケーション名(クラス)が起動する... Kein 06/12/25(月) 0:12 発言[未読]
【45447】Re:アプリケーション名(クラス)が起動する... Blue 06/12/25(月) 1:04 発言[未読]

【45445】アプリケーション名(クラス)が起動するた...
質問  FJ  - 06/12/24(日) 23:47 -

引用なし
パスワード
   特定アプリケーションの複数回起動を防ぐため、アプリケーションが起動しているかチェックし、アプリケーションが起動していない時のみアプリケーションを起動するマクロを作成したいのですが、アプリケーション名(クラス名)が、起動のたび変わるため、下記ロジックで対応できません。どうしたらよいか教えてください。

【ロジック内容】

'定義宣言
Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Const strClassName As String = "SciCalc@@@@"

Public Const strEXEName As String = "C:\Program Files\xxxxx.exe"

Sub S_calc()
  Dim rc As Long
  Dim lngProcessId As Long  'Shell関数の戻り値
   
  rc = FindWindow(strClassName, vbNullString)
          
  'ウィンドウハンドルが取得できた場合は起動しない
  If rc <> 0& Then
    MsgBox "xxxxはすでに起動しています!!"
    Exit Sub
  End If

  lngProcessId = Shell(strEXEName, vbNormalFocus)
End Sub

@@@@の部分が起動のたびに変更します。起動のたびに変わるため、起動チェック「rc = FindWindow(strClassName, vbNullString)」のステップが思ったような動きをしてくれません。ワイルドカード(*)を使ってみたのですが、うまくいきませんでした。何とかこのようなアプリケーションの起動チェックを行う方法はないでしょうか??ご教授よろしくお願いします。

【45446】Re:アプリケーション名(クラス)が起動す...
発言  Kein  - 06/12/25(月) 0:12 -

引用なし
パスワード
   二重起動の防止でなく、立ち上げたソフトが終了したかどうかを
チェックすればよいのなら↓を参考に。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips052.htm
(URLの先頭4文字は半角に変更する)

【45447】Re:アプリケーション名(クラス)が起動す...
発言  Blue  - 06/12/25(月) 1:04 -

引用なし
パスワード
   # クラス名が毎回変わるアプリって、、、

ワイルドカードみたいな使い方はできないので、
EnumWindows関数もしくはFindWindowEx関数を使って、
トップレベルのウィンドウを全て列挙して、GetClassName関数で
クラス名をチェックしていくしかないでしょう。

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