出産前後の痔にはご注意!

いつもお世話になります

今、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

現在はとりあえず稼働していますが、これから先のことを考え
ちゃんとしたものを作りたいと考えています
以上、よろしくお願い申し上げます

A 回答 (2件)

前の結果(#11248964)をみないままに。

私の考え方を書いておきます。
内容的にちょっとハードなものなので、気持ちがのらないと答えをつける気が起きません。
といっても、特別に解決方法があるわけではありません。

要するに、オーバーヘッドの時間差をプログラム的に解決する方法なんてわからないというのが、正直な回答です。

ひとつふたつアドバイスとしては、
  Application.Wait Now + TimeValue("00:00:01")
こういう方法は、うまくないというしかありませんね。Excelだとは思いますが、Excel Applicationをいちいち呼び出ししなくて、直接、一連のAPIで処理したほうがよいということです。
API Sleep  を使うなり、APIのGetTickCount,+ SetTimer で、「秒」単位で刻んでチェックを入れるとかします。
-----
それはとかもく、手元にある書籍などをざっと見ていましたら
大村あつしさんの『Win32 API プログラミング入門』AI出版
「アプリケーションを起動してユーザーが入力できる状態になるまで待機する。」
という項目がありました。もうここまでの内容になりますと、私はサッパリです。

古いコードで、ソースは、少し手直ししました。
https://ideone.com/veajrY

設定に間違いがなければ、みれるはずです。
丸写しに近いので、著作権上の問題が残りますが、閲覧数は限りなく低いかと思います。
適当な期間が過ぎましたら、削除するつもりでいます。
    • good
    • 0
この回答へのお礼

こんにちは
いつもありがとうございます

https://ideone.com/veajrYからダウンロードして
実行モジュール名を変えて実行してみましたが
AutoCadLtではすぐ入力可能になってしまいダメでした
(ワードは試していません)

そこで『Win32 API プログラミング入門』の中古本を買ってみましたが
サンプルプログラムのダウンロードページが見つかりません

もし、知っていたら教えてもらえますか?
またもしダウンロードしていたら、それをもらえますか?

すみません厚かましくて
申し訳ございません、よろしくお願い申し上げます

お礼日時:2019/08/15 11:19

とりあえず、こちらを載せておきます。


前のは魚拓にも残っていませんでした。
大村あつしのExcel VBA Win64/32 APIプログラミング
https://www.shuwasystem.co.jp/support/7980html/4 …
「Vba アプリケーションが立ち上がるまで」の回答画像2
    • good
    • 0
この回答へのお礼

いろいろありがとうございました

これからもよろしくお願いいたします
自分も頑張ります

お礼日時:2019/08/16 09:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング