• 締切済み

VB6のShell制御について

VB6のShell制御について 以前http://okwave.jp/qa/q6069911.htmlで 質問させていただき、解決することができました。 取引先などのダイアログexeを何本か開発し、連結テストをした際に PM経由でテスター(エンドユーザー)から「ダイアログ起動中は、起動基のexeを 触らせないようにできないか」と 指摘があり、修正をしています。 Shellのパラメータ等を弄ったり、書籍やネットを調べてみましたが 指摘を満たすようなサンプルが見つかりませんでした。 納期も近く、どのようにすれば指摘点を満たせるか教えていただけないでしょうか? 開発環境 Windows XP PRO SP4 Visual Basic6.0(SP6)

みんなの回答

  • msx68000
  • ベストアンサー率66% (2/3)
回答No.3

shellで別exeを起動して、それが実行中は起動元exeの実行をブロックします。 フォームは隠さずに残しておいてもいいですが、 別exe起動中に触られると「応答なし」という表示になってしまうので それを避けるために隠しています。 Option Explicit Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function WaitForInputIdle Lib "user32" (ByVal hProcess As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32.dll" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Const INFINITE As Long = &HFFFFFFFF Private Const SYNCHRONIZE = 1048576 Private Sub Command1_Click() Call ExecAndWait("calc") End Sub Public Sub ExecAndWait(ByVal launchee As String) Dim procID As Long Dim procHandle As Long Dim ret As Long Me.Hide procID = Shell(launchee, vbNormalFocus) procHandle = OpenProcess(SYNCHRONIZE, 1, procID) ret = WaitForSingleObject(procHandle, INFINITE) ret = CloseHandle(procHandle) Me.Show End Sub

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

起動基のexe にそのような機能があり、それを外部から操作できる (コマンドラインの引数で動作等)が無ければ出来ないでしょう。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>起動基のexeを触らせない もし、フォームを持つプログラムなら、表示中の 画面をDisableにしてしまう方法があります。 こうすると画面は全く操作不能になります。

関連するQ&A

専門家に質問してみよう