- ベストアンサー
IEの2重起動抑止
VBでのシステム開発でIEを起動するのに2重起動を抑止するようにしなければなりません。また、そのボタンから起動されたIEのみ2重起動抑止の対象とし、それ以外の場所から起動されたIEが上がっていてた場合はボタンを押せばIEが起動するといった方法がどうしたらいいのかわかりません。ご存知の方がいたら教えてください。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どうやって起動しているのか分からないのですが、とりあえずShellでEXEを直接実行してみました。 (たぶん違うと思うんですけど、サンプルコードに都合がいい方法がShellだったので・・。) 起動したIEのプロセスIDが分かってる場合のサンプルです。 フォームにボタンを1つ貼り付けて、下のコードをコピペしてして下さい。 ----------------------------------- Private Sub Command1_Click() Static pID As Long If Not ChkIEStart(pID) Then pID = Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE") End If End Sub Public Function ChkIEStart(chkProcessID As Long) As Boolean Dim strSQL As String Dim objWk As Object Dim objXlsProc As Object strSQL = "SELECT Handle FROM Win32_Process WHERE Name = 'IEXPLORE.EXE' AND ProcessID = " & chkProcessID Set objWk = GetObject("winmgmts:").ExecQuery(strSQL) ChkIEStart = (objWk.Count > 0) End Function
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ちょっと試してみました。最初、単なる二重起動だと思っていたら、ボタンの起動に対しての二重起動抑止だと分かって、ちょっとまごついてしまいました。 >それ以外の場所から起動されたIEが上がっていてた場合はボタンを押せばIEが起動するといった方法 この意味が、既に、ボタンから、IEが起動されていたら、他の場所で上がっていても、同じくボタンからの起動は抑止されることになります。他の場所から、IE起動しても、ボタンから一度も起動されていないのなら、起動できることになります。 Private Declare Function OpenProcess Lib "kernel32.dll" ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Const PROCESS_QUERY_INFORMATION As Long = (&H400) Private Declare Function GetExitCodeProcess Lib "kernel32.dll" ( _ ByVal hProcess As Long, _ ByRef lpExitCode As Long) As Long Private Const STATUS_PENDING As Long = &H103 Private Const STILL_ACTIVE As Long = STATUS_PENDING Private Sub Command1_Click() Dim Id As Long Static lngProcess As Long Dim lngExitCode As Long Dim rc As Long rc = GetExitCodeProcess(lngProcess, lngExitCode) If lngExitCode = STILL_ACTIVE Then MsgBox "こちらからは、二重起動になります。" Exit Sub End If Id = Shell("C:\Program Files\Internet Explorer\IEXPLORE.EXE", vbNormalFocus) lngProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, Id) End Sub