アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります

今、AutoCadLtの以後にScriptファイルを作成し、その後下記のようにWScript.Shellから
ShellObj.Run でAutocadLtを立ち上げてからコマンドラインにScriptファイルの実行コマンドを
送ろうと考えています

Dim ShellObj
ChDir "C:\Program Files\Autodesk\AutoCAD LT 2018"
ShellObj.Run "acadlt.exe", 1, False

AppActivate "Autodesk AutoCAD"
SendKeys "filedia 0" & Chr(13) & "script" & Chr(13) & Fname & Chr(13), True

しかし、ShellObj.Run での第三パラメータでアプリケーションの終了待ちをFalseにすると
次のAppActivate "Autodesk AutoCAD" のステートメントがAutoCad立ち上げり前に実行されて
実行時エラーになってしまいます
終了待ちをTrueにするとアプリケーションの終了待ちになって、プログラムが待ち状態になってしまいます。

上記の AppActivate "Autodesk AutoCAD" の実行をAutoCadLtの立ち上がり終了を待って実行させるには何か有るのでしょうか?
分かりましたら是非、教えてください
ちなみにOn Error Gotoも使ってみましたが上手く行きませんでした

以上、よろしくお願いします

A 回答 (1件)

こんにちは。



以前、ご質問になられていた内容のような気がします。
もう少し詳しい説明が必要だったのでしょうね。

結論を先にいうと、WScript からですと、SFC mini か、Dynamic Wrapper を使って、Win APIを呼び出しする方法を考えます。今、調べてみると SFC miniのほうがわかりやすいかもしれません。wmi という方法もあるようですが、完璧に行かないような気がしてなりません。

CAD系のソフトは手に入れたいとは思っていますが、とても本格的なものは私は使いこなせません。それに、AutoCAD は、なかなか値段が高いようですから、無料期間30日はあっても、これだけのために、それを試すというのはちょっとできません。

立ち上げたら、
ShellObj.Run "acadlt.exe", 1, False

'×AppActivate は、メソッドで、オブジェクトがありません。
>AppActivate "Autodesk AutoCAD"

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate "Autodesk AutoCAD"
こう書くけれども、これでもうまくいかないはずです。

'×たぶん、これも動かないと思います。
SendKeys "filedia 0" & Chr(13) & "script" & Chr(13) & Fname & Chr(13), True

ShellObj.Run "acadlt.exe", 1, False
この後、ハンドル(hWnd)を取って、起動状態かを調べます。
Class 名は分かりますか? SPY++ か、Vector にある miniSpy で、クラス名を取得して、ハンドルを取ります。

Wscript の書き方は、余計な行が増えますので、わかりやすいように、VBAライクで書きます。
hWnd = FindWindow(strClassName, vbNullString)
SetForegroundWindow hWnd 'これで上に上げる
(ただ、他のソフトを多く立ち上げているとうまくいかないことがあるので、他のGetNextWindow のWin APIと組み合わせが必要なことがあります。

しかし、Sendkey を使う目的で、最前面化させるなら、SendMessage/PostMessage を使えば、最前面化の必要がありません。たぶん、PostMessageのほうがよいと思います。

SFC mini
https://ja.osdn.net/projects/sfcmini/releases/63 …

DyanamicWrapper (私は、こちらをずっと使ってきましたが、難しいです)
http://winbatch.hpdd.de/MyWbtHelp/htm/20100125.H …

ただ、他のソフトウェアをインストールできない環境ですと、Excel オートメーションから、Excel4Macro関数を利用するということになります。

p.s. 前回のユーザー書式の検出方法の考え方は分かっていただけたでしょうか。泥臭いやり方ですが、既存のリストに「ないもの」を探すという考え方でした。
    • good
    • 0
この回答へのお礼

いつもお世話になります
早速のご回答、ありがとうございます

まだまだ未熟者で、はっきり言ってまだ理解できていません
通常の仕事の中でこれからもいろいろと模索が続くと思います
質問の件もご回答に従い勉強させていただきます

それからユーザ書式の件もありがとうございました
同じやり方では有りませんが他との違いを見つけて何とか対処しました

いつも本当にありがとうございます
これからもよろしくお願い申し上げます

お礼日時:2019/05/07 10:39

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