はじめまして、小林と申します。 いつもお世話になっています。m(__)m 早速なのですが、質問させてください。 #長文ですが、ご容赦ください。 R4.52で、以下のようなスクリプトを実行させたいと思っています。 アクションボタンをクリックしたら、何らかのアプリケーションを起 動し、そのアプリケーションの終了を待ってからスクリプトを続けた い。 最初、YIELD関数の詳細を参考にしましたがうまくいきませんでした。 Windows 32bitでのAPI関数は GetModuleUsage ではなく、 (CreateProcessと) WaitForSingleObjectを使用しないといけないよ うです。以下のようにスクリプトを変更してみたのですが、アプリケー ションが起動してくれません?? 何らかの解決方法をご存知でしたら、ご教示願います。m(__)m ===== (Declarations) ' セキュリティ属性に関する情報を定義する構造体 Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type ' 新しいプロセスのメインウィンドウの表示状態を定義する構造体 Type STARTUPINFO cb As Long lpReserved As Long lpDesktop As Long lpTitle As Long dwX As Long dwY As Long dwXSize As Long dwYSize As Long dwXCountChars As Long dwYCountChars As Long dwFillAttribute As Long dwFlags As Long wShowWindow As Integer cbReserved2 As Integer lpReserved2 As Long hStdInput As Long hStdOutput As Long hStdError As Long End Type Const STARTF_USESHOWWINDOW = &H1 Const STARTF_USESIZE = &H2 Const STARTF_USEPOSITION = &H4 Const STARTF_USECOUNTCHARS = &H8 Const STARTF_USEFILLATTRIBUTE = &H10 Const STARTF_RUNFULLSCREEN = &H20 Const STARTF_FORCEONFEEDBACK = &H40 Const STARTF_FORCEOFFFEEDBACK = &H80 Const STARTF_USESTDHANDLES = &H100 Const STARTF_USEHOTKEY = &H200 Const SW_HIDE = 0 Const SW_SHOWNORMAL = 1 Const SW_NORMAL = 1 Const SW_SHOWMINIMIZED = 2 Const SW_SHOWMAXIMIZED = 3 Const SW_MAXIMIZE = 3 Const SW_SHOWNOACTIVATE = 4 Const SW_SHOW = 5 Const SW_MINIMIZE = 6 Const SW_SHOWMINNOACTIVE = 7 Const SW_SHOWNA = 8 Const SW_RESTORE = 9 Const SW_SHOWDEFAULT = 10 Const SW_MAX = 10 ' 新しいプロセスに関する識別情報を定義する構造体 Type PROCESS_INFORMATION hProcess As Long hThread As Long dwProcessId As Long dwThreadId As Long End Type ' 新しいプロセスとそのプライマリスレッドを作成する関数の宣言 Declare Function CreateProcess Lib "Kernel32" Alias "CreateProcessA" _ (Byval lpApplicationName As String, Byval lpCommandLine As String, _ lpProcessAttributes As SECURITY_ATTRIBUTES, _ lpThreadAttributes As SECURITY_ATTRIBUTES, _ Byval bInheritHandles As Long, _ Byval dwCreationFlags As Long, _ lpEnvironment As Any, _ Byval lpCurrentDriectory As String, _ lpStartupInfo As STARTUPINFO, _ lpProcessInformation As PROCESS_INFORMATION) As Long Const DEBUG_PROCESS = &H1 Const DEBUG_ONLY_THIS_PROCESS = &H2 Const CREATE_SUSPENDED = &H4 Const DETACHED_PROCESS = &H8 Const CREATE_NEW_CONSOLE = &H10 Const NORMAL_PRIORITY_CLASS = &H20 Const IDLE_PRIORITY_CLASS = &H40 Const HIGH_PRIORITY_CLASS = &H80 Const REALTIME_PRIORITY_CLASS = &H100 Const CREATE_NEW_PROCESS_GROUP = &H200 Const CREATE_UNICODE_ENVIRONMENT = &H400 Const CREATE_SEPARATE_WOW_VDM = &H800 Const CREATE_SHARED_WOW_VDM = &H1000 Const CREATE_DEFAULT_ERROR_MODE = &H4000000 Const CREATE_NO_WINDOW = &H8000000 Declare Function WaitForSingleObject Lib "Kernel32" (Byval hHandle As Long, Byval dwMilliseconds As Long) As Long Const STATUS_WAIT_0 = &H0 Const STATUS_ABANDONED_WAIT_0 = &H80 Const STATUS_TIMEOUT = &H102 Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0) Const WAIT_ABANDONED = ((STATUS_ABANDONED_WAIT_0) + 0) Const WAIT_TIMEOUT = STATUS_TIMEOUT Const WAIT_FAILED = &HFFFFFFFF ========== Sub Click(Source As Button) Dim udtProcessAttributes As SECURITY_ATTRIBUTES Dim udtThreadAttributes As SECURITY_ATTRIBUTES Dim udtStartupInfo As STARTUPINFO Dim udtProcessInfomation As PROCESS_INFORMATION Dim lngWaitForObjectTimeOut As Long Dim lngWaitForObjectEvent As Long Dim lngWin32apiResultCode As Long 'セキュリティ構造体を初期化 'udtProcessAttributes.nLength = Len(udtProcessAttributes) 'udtThreadAttributes.nLength = Len(udtThreadAttributes) ' 新しいプロセスを作成 lngWin32apiResultCode = CreateProcess( "C:\Windows\Notepad.exe", _ Null, _ udtProcessAttributes, _ udtThreadAttributes, _ False, _ 0, _ Null, _ Null, _ udtStartupInfo, _ udtProcessInfomation) ' 待機するタイムアウト時間を指定 lngWaitForObjectTimeOut = 60 ' 新しいプロセスがシグナル状態になるまで待機 lngWaitForObjectEvent = WaitForSingleObject(udtProcessInfomation.hProcess, lngWaitForObjectTimeOut) ' 待機結果を表示 Select Case lngWaitForObjectEvent Case STATUS_WAIT_0: Messagebox "プロセスは終了" Case WAIT_TIMEOUT: Messagebox "待機はタイムアウト" Case WAIT_FAILED: Messagebox "待機は失敗" End Select End Sub