
いつもお世話になります
今、AutoCadLtをShellで立ち上げて自動作業のプログラムを作成していますが
立ち上がってコマンド入力が出来るまで、Acadremoconwo 使ったり、sleepを使って
ごまかしていますが、Win64またはWin32を使って出来るのでないかと思いいろいろ記事を
探していましたが、なかなか見つかりませんでしたので教えてください
Dim lngProcessID As Long
Dim lngProcess As LongPtr
Dim lngExitCode As Long
Dim rc As LongPtr
'...AutoCadを起動
Set shellobj = CreateObject("WScript.Shell")
ChDrive "C"
ChDir "C:\Program Files\Autodesk\AutoCAD LT 2018"
'ShellObj.Run "acadlt.exe", 1, False
lngProcessID = shell("acadlt.exe", vbNormalFocus)
'ハンドルを取得
lngProcess = OpenProcess(PROCESS_QUERY_INFORMATION, _
1, _
lngProcessID)
’コマンド入力が可能まで待つ
Set Acad = CreateObject("AcadRemocon.Body")
abc = Acad.acwaitprompt(, retIndex, True)
If retIndex = -1 Then
MilliTimer = 15000
DoEvents
Sleep MilliTimer
こんな記事も見つかましたが使い方がいまいち分かりません
'アプリケーションが立ち上がるまで待つ
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long)
Public Declare Function FindWindow Lib "user32.dll" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
'指定したアプリケーションを最前面に表示するとともに、
'指定したアプリケーションをアクティブにします。
Public Declare Function SetForegroundWindow Lib "user32.dll" _
(ByVal hwnd As Long) As Long
'指定のウィンドウがキーボードマウス入力ができるか調べる
Public Declare Function IsWindowEnabled Lib "user32" ( _
ByVal hwnd As Long ) As Long
'AcrobatのWindowのハンドル番号hwnd取得
hwnd = 0
Do While hwnd = 0
Call Sleep(100)
hwnd = FindWindow("AdobeAcrobat", vbNullString)
'Acrobatを最前面に表示。アクティブ。
Call SetForegroundWindow(hwnd)
Loop
'Acrobatを利用する処理
'Acrobatウィンドウがキーボード入力ができる状態になるまで待つ
While IsWindowEnabled(hwnd) = 0&
DoEvents
Application.Wait Now + TimeValue("00:00:01")
Wend
現在はとりあえず稼働していますが、これから先のことを考え
ちゃんとしたものを作りたいと考えています
以上、よろしくお願い申し上げます
No.1ベストアンサー
- 回答日時:
前の結果(#11248964)をみないままに。
私の考え方を書いておきます。内容的にちょっとハードなものなので、気持ちがのらないと答えをつける気が起きません。
といっても、特別に解決方法があるわけではありません。
要するに、オーバーヘッドの時間差をプログラム的に解決する方法なんてわからないというのが、正直な回答です。
ひとつふたつアドバイスとしては、
Application.Wait Now + TimeValue("00:00:01")
こういう方法は、うまくないというしかありませんね。Excelだとは思いますが、Excel Applicationをいちいち呼び出ししなくて、直接、一連のAPIで処理したほうがよいということです。
API Sleep を使うなり、APIのGetTickCount,+ SetTimer で、「秒」単位で刻んでチェックを入れるとかします。
-----
それはとかもく、手元にある書籍などをざっと見ていましたら
大村あつしさんの『Win32 API プログラミング入門』AI出版
「アプリケーションを起動してユーザーが入力できる状態になるまで待機する。」
という項目がありました。もうここまでの内容になりますと、私はサッパリです。
古いコードで、ソースは、少し手直ししました。
https://ideone.com/veajrY
設定に間違いがなければ、みれるはずです。
丸写しに近いので、著作権上の問題が残りますが、閲覧数は限りなく低いかと思います。
適当な期間が過ぎましたら、削除するつもりでいます。
こんにちは
いつもありがとうございます
https://ideone.com/veajrYからダウンロードして
実行モジュール名を変えて実行してみましたが
AutoCadLtではすぐ入力可能になってしまいダメでした
(ワードは試していません)
そこで『Win32 API プログラミング入門』の中古本を買ってみましたが
サンプルプログラムのダウンロードページが見つかりません
もし、知っていたら教えてもらえますか?
またもしダウンロードしていたら、それをもらえますか?
すみません厚かましくて
申し訳ございません、よろしくお願い申し上げます
No.2
- 回答日時:
とりあえず、こちらを載せておきます。
前のは魚拓にも残っていませんでした。
大村あつしのExcel VBA Win64/32 APIプログラミング
https://www.shuwasystem.co.jp/support/7980html/4 …

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
-
4
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
5
vbaから他のアプリを終了
Visual Basic(VBA)
-
6
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
7
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
10
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
11
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
12
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
13
ExcelVBAでスペースキー操作したい
Excel(エクセル)
-
14
特定のシートのみ再計算させない方法は?
Excel(エクセル)
-
15
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
16
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
17
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
18
Vba アプリケーションが立ち上がるまで待つ(再)
Excel(エクセル)
-
19
Excel-VBAの「しばらくお待ちください」のダイアログが自動的に閉じない
Excel(エクセル)
-
20
別インスタンスのエクセルを制御したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フレームワーク「4.8.1」で、[S...
-
pccNTmon.exeとntrtscan.exeの違い
-
VBSで2バイト文字の送り方の質...
-
Vba アプリケーションが立ち上...
-
コンソールアプリケーションの...
-
プログラムをアクティブにしな...
-
VB6の強制終了について
-
vb6で異なるのプロジェクト間で...
-
VB6での二重起動(複数起動)の制...
-
OSによるWinExecの動...
-
VBSでのSendKeysでの画面の最小化
-
Accessフォームからの外部アプ...
-
vb.net2003での二重起動防止に...
-
Console Applicationをタスクト...
-
VB2008で作成したアプリケーシ...
-
MFCアプリケーションでの終了コ...
-
アプリケーションをVBS(WSH?)で...
-
Macターミナルで実行中のプログ...
-
VBSの処理中一旦処理を止めて再...
-
バックグラウンドのプロセスの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WSH(VBScript)でアプリケーショ...
-
フレームワーク「4.8.1」で、[S...
-
VB.NETでMessageBoxを表示した...
-
コンソールアプリケーションの...
-
SetWindowPosについて
-
pccNTmon.exeとntrtscan.exeの違い
-
Accessフォームからの外部アプ...
-
初回接続の遅い原因について
-
Console Applicationをタスクト...
-
VBSでのSendKeysでの画面の最小化
-
Vba アプリケーションが立ち上...
-
イラストレーターCS4のシリアル...
-
MFCアプリケーションでの終了コ...
-
実行時のコマンドプロンプトを...
-
C#でGUI・CUIの判断する仕方を...
-
アプリケーションをVBS(WSH?)で...
-
OSによるWinExecの動...
-
vb6で異なるのプロジェクト間で...
-
SYSTEM権限でプロセス機動
-
VB.NETでフォームアクティブの...
おすすめ情報