![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になります
すみません、先日(8/13)に投降したばかりの質問の再投稿で申し訳ございませんが
教えてもらった大村あつしさんの「Win32 API」の記事やほかの記事をみていろいろ
試してみましたがみんな上手くいきませんでした
そこで質問なのですが
大村あつしさんの本の中に「VBAから以下のような起動する手法は推奨できません。
あくまでもWaitForInputIdle関数の使用例として参考にしてください」と有ります
これは、VBAで出来ないという事なのでしょうか?
また、ほかのウェブから下記のプログラムを試してみました
Option Explicit
Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type
Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
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
Private Const STARTF_USESHOWWINDOW = &H1
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" _
(ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
lpProcessAttributes As Any, _
lpThreadAttributes As Any, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
lpEnvironment As Any, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function WaitForInputIdle Lib "user32" _
(ByVal hProcess As Long, _
ByVal dwMilliseconds As Long) As Long
Public Function ShellEx(ByVal sPath As String, Optional ByVal sParam As String = "") As Boolean
Dim tStInfo As STARTUPINFO
Dim tPrInfo As PROCESS_INFORMATION
On Local Error GoTo Error_Handler
ShellEx = False
With tStInfo
.cb = LenB(tStInfo)
.dwFlags = STARTF_USESHOWWINDOW
.wShowWindow = 6
End With
'アプリケーションを実行しプロセスを作成する
If CreateProcess(vbNullString, sPath & " " & sParam, ByVal 0&, _
ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, _
vbNullString, tStInfo, tPrInfo) = 0 Then GoTo Error_Handler
Do
If WaitForInputIdle(tPrInfo.hProcess, &HFFFFFFFF) = 0 Then Exit Do
Loop
ShellEx = True
Exit Function
'====== エラー処理
Error_Handler:
MsgBox "?G???[No:" & Err.Number & vbCrLf & "?G???[??e:" & Err.Description, vbCritical
Err.Clear
End Function
Sub Test()
Dim strApplicationName As String
strApplicationName = "C:\Program Files\Autodesk\AutoCAD LT 2018\Acadlt.exe"
Debug.Print ShellEx(strApplicationName)
End Sub
起動させたら、すぐにTrueが出てプログラムは入力状態を待つことは出来ないようです
以上、何度もすいません
よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
大村あつしさんの本の中に「VBAから以下のような起動する手法は推奨できません。
あくまでもWaitForInputIdle関数の使用例として参考にしてください」と有ります
これは、VBAで出来ないという事なのでしょうか?
出来ないと言う事ではありません。
私は、本を拝読したことがないので詳細は分かりませんが、文中に推奨しない根拠が示されていると思います。
Win32 API と言う事で、WindowsOS、Excel、AutoCAD、共に32bit版だと思いますが、
仕様において的外れかもしれませんが、を起動する目的の為だけなら、あくまで、だけですが、
もっとシンプルにWshShell Runメソッドで実現した方が良いかと思います。
参考:https://vbabeginner.net/vba%E3%81%A7%E4%BB%96%E3 …
>起動させたら、すぐにTrueが出てプログラムは入力状態を待つことは出来ないようです
どの様な状態で何を示しているか、私には、わかりません。プログラムとは何のプログラムですか?
If WaitForInputIdle(tPrInfo.hProcess, &HFFFFFFFF) = 0 Then Exit Do
0が返っているにもかかわらず、起動できないと言う事でしょうか?
>先日(8/13)に投降した
記事も見つかりませんでしたし、AUTOCADについても知識がありませんが
仕様などわからないので、AUTOCADのAPIでしたら、フォーラム(US)があるようですので、そちらに投稿された方が
有益な情報を得られる可能性が高いと思います。また、起動に関する記事もすでにあるみたいですね。
Visual Basic Customization https://forums.autodesk.com/t5/visual-basic-cust …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows上のプログラム。「予め...
-
VBAでOutlookを終了させたい Ex...
-
VBSで起動したアプリが前面表示...
-
Windowsの起動時間
-
Javaアプレットを起動するJREの...
-
VBSから別のVBS起動するとき変...
-
MSペイントを画像ファイル名を...
-
C#のフォームから起動するブラ...
-
エクセル起動時別プロセスで開く
-
VB6で呼び出し元の情報を取得す...
-
VBSでExcelのUserFormをエクス...
-
アウトルックが起動しているか...
-
(VB初心者) VB起動時既に起動さ...
-
VB6からエクセルの印刷機能...
-
(英辞郎のような)不正コピー...
-
64bitで作ったEXEを32bitで起動...
-
vba 時間の引き算 例えば 15:00...
-
Visual Studio 「AnyCpu」について
-
Designer.vbは直接コードをいじ...
-
VBAで不特定枚数印刷をしたいで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
VBSで起動したアプリが前面表示...
-
Windows上のプログラム。「予め...
-
Process.Startで起動したアプリ...
-
VBで実行中のEXEファイルの情報...
-
VBSから別のVBS起動するとき変...
-
EXCEL VBAから他アプリケーショ...
-
exeファイルを実行するとすぐに...
-
VBAでSeleniumからChromeを起動...
-
VBSでExcelのUserFormをエクス...
-
フォームの最前面が効かない
-
AppActivateについて
-
タスクスケジューラでPerlが動...
-
ウィンドウを終了させたい・・・
-
C# 他のアプリケーションを優先...
-
MSペイントを画像ファイル名を...
-
64bitで作ったEXEを32bitで起動...
-
分かる人は簡単なのだろうが、v...
-
VB6で呼び出し元の情報を取得す...
おすすめ情報