質問: 基本的にはC++ ( BetterCってやつですが )で趣味でやっています。 C++の実行ファイルとは別にバッチファイルなりJScriptなりでショートカットファイルを生成してエンドユーザが使いやすくするための処理ができたらなぁと思い、 JScriptでショートカットファイルを生成するファイルを生成しました。 で、欲が出てきて、Tip系のサイトを見ると WSH を使う場合 「ファイルを開くダイアログ」見たいなのを出すことができるようなので試してみました。 ですが、「オートメーションエラー」なんちゃらでエラーが出て、ggって見ると「Windowsではあっても"**XPのみ**"しか使えない」ようです。 ( ピンポイントすぎ... ) で、ほかに方法はないかなと探してみたところ、Excelの機能を使う方法とIEを使う方法がありました。 でも何気に重たい ( 遅い ) です。 で、VBScript と JScriptを混合させることができる WSFなるものを見つけました。 WSHでJScriptとVBScriptを共存させてみる このWSFなるものを使ってVBScript側でもいいからどうにか実現できないものでしょうか? VBA ( Excel VBA )とかだと 【エクセルVBA】Windows APIで外部プログラムを呼び出すための第一歩 のようなやり方でWindows APIのDLL ( カーネルとか? ) を呼び出せるようですが、VBScriptには declare がありません。 で、Excelの機能を使う方法もありますが、上記で言ったようにちょっと重い。 できるなら C++で組んだ DLL ( WinAPIのファイルを開くダイアログをさらに呼び出しやすくラップしただけ。 ) を呼び出したいのですが、 Stack Overflowさんの過去質問とかでは「不可能。使えるとしてもせめて中間にVBのDLLをおいて"間接的に"操作しろ」みたいな回答か「カテゴリが違う」みたいな回答ばかりでどうやればいいのか... VBScriptであれば VBAみたいに使うことが可能ならそのまま組めるのですが... つまり聞きたいこととしては、 ■ どうやって「ファイルを開くダイアログ」なんかを使うか ( できるだけ IEやExcelは使わずに ) ■ どうやって Windows APIのDLLなんかを使うことができるか ( オプショナルですが、これがわかれば 上のやつが簡単に解消できるので ) です。 [情報] 言語: WSF? ( VBScriptとJScriptを混在させている ) OS: Windows XP/7/10 Excel: ネットカフェ等ではインストールされていないことがあるのでなるべく使いたくない... 宜しくお願い致します。
回答: WSHから直接dllを呼び出すことはできません。 DynaWrapやDynaCallなどのCOMモジュールがフリーで提供されていますので、それを使うことでWIN32APIにアクセスできるようになります。 私は以下のサイトにあるSFC mini(DynaCall)で試してみました(日本の方が作成していていくらか安心なので) ダウンロードして展開したフォルダの中にサンプルプログラムがあります。 今回の例だとOpenFile.vbsを参照すると良いでしょう。 備忘 私だけかもしれませんが、実行に少々手間取りました。 というのも実行環境は64bitなんですが、WSHからCOMを利用する場合、COMが32bitか64bitかで使用するWscriptを切り替える必要がありました。 DynaCallは32bitのようですが、単純にvbsファイルを実行すると64bit版のwscriptが起動され失敗します。 以下のように明示的に32bit版wscriptを使うようにする必要がありました。 C:\Windows\SysWOW64\wscript OpenFile.vbs