いつもお世話になります
今、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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) vba Sleep関数について教えてください 1 2023/01/18 10:18
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAで、なぜかSendkeyが効きません。
PowerPoint(パワーポイント)
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
-
4
vbaから他のアプリを終了
Visual Basic(VBA)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
Vba アプリケーションが立ち上がるまで待つ(再)
Excel(エクセル)
-
7
他のアプリケーションの終了処理
Visual Basic(VBA)
-
8
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
9
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
10
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
11
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
12
マクロで、次のコードへ行く前に時間をおくにはどうしたらいいのでしょうか?
その他(Microsoft Office)
-
13
VBAでユーザーフォームの表示を確認
Visual Basic(VBA)
-
14
ExcelVBAで質問です。Workbook_openイベントが発生し
その他(Microsoft Office)
-
15
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
16
起動中のアプリ、ソフトの取得
Visual Basic(VBA)
-
17
VB6.0 SHELLで起動したプログラムを終了さしたいのですが
Visual Basic(VBA)
-
18
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
19
PDFファイルをコピーしてエクセルブックにはりつけるVBA
Excel(エクセル)
-
20
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessフォームからの外部アプ...
-
他アプリケーションの終了
-
イラストレーターCS4のシリアル...
-
コマンドライン版ソフトの意義
-
Vba アプリケーションが立ち上...
-
VBSでのPostMessageについて
-
C# 管理者権限で起動したアプリ...
-
Console Applicationをタスクト...
-
WSH(VBScript)でアプリケーショ...
-
pccNTmon.exeとntrtscan.exeの違い
-
Ctrl + P のメッセージ送信
-
コンソールアプリケーションの...
-
VB.NETで起動させたExcelの多重...
-
外部アプリケーションの起動に...
-
OSの”シャットダウン中”のステ...
-
ダイアログ中の下線付きテキス...
-
outlookが強制終了してしまう
-
タイトルバーのないアプリに二...
-
Macターミナルで実行中のプログ...
-
緯度、経度の 10進法と 60進法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンソールアプリケーションの...
-
Vba アプリケーションが立ち上...
-
フレームワーク「4.8.1」で、[S...
-
VBSでのSendKeysでの画面の最小化
-
イラストレーターCS4のシリアル...
-
vb6で異なるのプロジェクト間で...
-
初回接続の遅い原因について
-
VB.NETでMessageBoxを表示した...
-
MFCアプリケーションでの終了コ...
-
pccNTmon.exeとntrtscan.exeの違い
-
Windowsプログラムのビジー状態...
-
実行時のコマンドプロンプトを...
-
自分自身を更新するプログラム
-
VB.NETでフォームアクティブの...
-
Accessフォームからの外部アプ...
-
Console Applicationをタスクト...
-
httpd.pidって何ですか?
-
VB.NETで起動させたExcelの多重...
-
vcxprojファイルの修正法???
-
「AcroRd32.exe」これってウイ...
おすすめ情報