![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
WindowsXPでVB6.0でプログラムを組んでますが、その中であるEXEファイルを起動するようにしています。しかし、そのEXEが起動している場合は二重起動を避けるようにしたいのです。
使っているPCで起動されているいくつかのEXEから目的のEXEが起動しているかどうかを知りたいです。
FindWindowを使うには開いているファイル名まで変数の中に渡さなければならないため使えません。(開いているファイル名は不明として下さい)
タスクマネージャーの「プロセス」タブのイメージ名に出てくるexeファイル名を取得できればいいのですが、方法をご存知の方おられませんか?
No.2ベストアンサー
- 回答日時:
ご参考にしてください。
Sub ProcessID()
Dim objSet
Dim obj
Dim Locator
Dim Server
'
Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Server = Locator.ConnectServer
Set objSet = Server.ExecQuery("Select * From Win32_Process")
'
For Each obj In objSet
MsgBox "プロセス名=" & obj.Caption
Next
Set objSet = Nothing
Set obj = Nothing
Set Server = Nothing
Set Locator = Nothing
End Sub
No.3
- 回答日時:
こんにちは。
> FindWindowを使うには開いているファイル名まで変数の中に渡さなければ
> ならないため使えません。(開いているファイル名は不明として下さい)
FindWindow の第1引数はクラス名を、第2引数にはウインドウタイトルを
渡します。ファイル名が不明であっても特定された EXE ならクラス名は固定
だと思いますので、問題ないと思いますよ。
FindWindow ではハンドルが取得できないものなのでしょうか?
■ WMI を使った方法(#2 ご回答にあるとおり)
動作環境を Win2000/XP/Vista(?) 等に限定すれば、WMI の Win32_Process
クラスが使えます。Win9x 系, NT4.0 で WMI を利用するには、別途でイン
ストールが必要になります。
http://www.microsoft.com/downloads/details.aspx? …
■ API を使った方法
Win95, NT5.0以降 で動作させる必要があるなら、API を使います。
こんな感じです。
Option Explicit
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * 260
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" ( _
ByVal dwFlags As Long, _
ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" ( _
ByVal hSnapshot As Long, _
ByRef lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" ( _
ByVal hSnapshot As Long, _
ByRef lppe As PROCESSENTRY32) As Long
Private Const TH32CS_SNAPPROCESS As Long = &H2
Sub EnumProcessSample()
Dim hSnap As Long
Dim rc As Long
Dim pe As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
pe.dwSize = LenB(pe)
rc = Process32First(hSnap, pe)
Do While CBool(rc > 0)
' // process id
Debug.Print "0x" & Right$("00000000" & Hex$(pe.th32ProcessID), 8);
Debug.Print vbTab;
' // file name
Debug.Print Left$(pe.szExeFile, InStr(pe.szExeFile, vbNullChar) - 1)
rc = Process32Next(hSnap, pe)
Loop
End Sub
■ トリッキーな方法
Word.Application の Tasks コレクションを利用します。
参考URL [ Office TANAKA - Excel VBA(実行中のタスク一覧(非API)) ]
http://officetanaka.net/excel/vba/tips/tips61.htm
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) エクセルの実行ファイルについての質問です。 1 2023/05/04 03:58
- その他(セキュリティ) exeファイルの個人情報について 3 2023/06/29 17:36
- Windows 10 exeファイルが起動しない 4 2022/06/05 16:13
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- 労働相談 合意済み仕様の商品納入後における仕様変更要求への対応について 5 2023/04/19 09:41
- フリーソフト TJA-Player3 Develop Rewhite 2 2023/05/04 21:24
- マルウェア・コンピュータウイルス pcがウィルス感染しているかもしれません。変な声が聞こえます。 1 2022/05/03 00:43
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- アプリ アプリケーションが見つかりません 2 2022/07/13 21:07
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
VB6.0 SHELLで起動したプログラムを終了さしたいのですが
Visual Basic(VBA)
-
VBプログラムの終了
Visual Basic(VBA)
-
ウィンドウのタイトルからプロセス取得
Visual Basic(VBA)
-
-
4
プロセスIDの取得方法について
Visual Basic(VBA)
-
5
VBの画面サイズについて
Visual Basic(VBA)
-
6
配列を関数に渡す方法
Visual Basic(VBA)
-
7
コマンドプロンプト
Visual Basic(VBA)
-
8
VB6.0-整数と余りを求める
Visual Basic(VBA)
-
9
VB6.0 オブジェクトを一覧で表示
Visual Basic(VBA)
-
10
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
11
VB6のWScript.Shellについて
Visual Basic(VBA)
-
12
VB6のListの使い方
Visual Basic(VBA)
-
13
任意のフォームが表示されているかを知りたい
Visual Basic(VBA)
-
14
VBでExcelが起動されているか知りたい
Visual Basic(VBA)
-
15
フォームを開く時のイベント処理
Visual Basic(VBA)
-
16
[VB6] フォームを閉じる方法について
Visual Basic(VBA)
-
17
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
18
VBでクリックイベントを発生させたいです
Visual Basic(VBA)
-
19
起動中のアプリ、ソフトの取得
Visual Basic(VBA)
-
20
プロセスIDからウィンドウハンドルを取得する方法
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSで起動したアプリが前面表示...
-
VBSから別のVBS起動するとき変...
-
アウトルックが起動しているか...
-
「FindWindow」、ウィンドウハ...
-
Windows上のプログラム。「予め...
-
C#のフォームから起動するブラ...
-
VBAでOutlookを終了させたい Ex...
-
EclipseとTomcat使用時、すぐに...
-
VB6で呼び出し元の情報を取得す...
-
ウィンドウを終了させたい・・・
-
EXCEL VBAから他アプリケーショ...
-
gccプログラムで複数の実行ファ...
-
64bitで作ったEXEを32bitで起動...
-
ASPでPMT関数が使いたい...
-
別のクラスからのタイマの起動方法
-
MSDOS(バッチファイル)でプロセ...
-
VBで実行中のEXEファイルの情報...
-
HTMLでメーラーの起動&メール送付
-
iPad) URL Schemeを使ってアプ...
-
クリスタルレポート v10 旧バ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
分かる人は簡単なのだろうが、v...
-
VBAでOutlookを終了させたい Ex...
-
VBSから別のVBS起動するとき変...
-
VBで実行中のEXEファイルの情報...
-
WinSCPで画像のように puttyを...
-
VBSで起動したアプリが前面表示...
-
Windows上のプログラム。「予め...
-
ACCESS VBAで別のACCESS(mdb)を...
-
Process.Startで起動したアプリ...
-
64bitで作ったEXEを32bitで起動...
-
VBSでExcelのUserFormをエクス...
-
EXCEL VBAから他アプリケーショ...
-
VBAでSeleniumからChromeを起動...
-
フォームの最前面が効かない
-
AppActivateについて
-
VBAでIEが起動しているか...
-
VB6で呼び出し元の情報を取得す...
-
Vba アプリケーションが立ち上...
-
exeファイルを実行するとすぐに...
おすすめ情報