電子書籍の厳選無料作品が豊富!

VBでのシステム開発でIEを起動するのに2重起動を抑止するようにしなければなりません。また、そのボタンから起動されたIEのみ2重起動抑止の対象とし、それ以外の場所から起動されたIEが上がっていてた場合はボタンを押せばIEが起動するといった方法がどうしたらいいのかわかりません。ご存知の方がいたら教えてください。よろしくお願いします。

A 回答 (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
    • good
    • 0

こんばんは。


ちょっと試してみました。最初、単なる二重起動だと思っていたら、ボタンの起動に対しての二重起動抑止だと分かって、ちょっとまごついてしまいました。

>それ以外の場所から起動された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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!