EXEファイル以外のファイル、テラタームのマクロ、ttlファイルを実行させたいのですが。
どなたか教えてください。
API関数にShellExecuteというのがあります。
これを使うと、拡張子が関連付けされたプログラムから
実行させることができます。
ShellExecuteの使い方はこのサイトのVisualBasicの
「API技術関連」のなかで説明してくれてあります。
あと、ShellExecuteの機能拡張版でShellExecuteEx
というのもありますが、それも検索サイトとか調べれば
結構たくさん参考文献がでてきますよ^^
こんな回答でOKでしょうか^^?
あっ、こんなところに書いてあったのですね。
何となく出来そうな感じです。
「API技術関連」の中に書かれている、ウインドウのハンドルと
定数(SW_××参照)とは、どう言う意味なのですか?
ハンドルですが、いつも0とかMe.wHndとかに設定して
いますが・・・すいません。よく知りません^^;(オイオイ
nShowCmdの定数ですが、Shell関数と同様に外部アプリ
実行時のウィンドウサイズ等の指定ができます。
vbMaximizedFocus(最大化)のようなVBの定数も使え
るようですが、下記のような定数を標準モジュールなんか
に入れておくのが一般的みたいです。
'指定のウインドウを非表示にし、他のウインドウをアクティブ化
Public Const SW_HIDE = 0
'指定のウインドウをアイコン化し、タスクリスト内のトップレベルウインドウをアクティブ化
Public Const SW_MINIMIZE = 6
'ウインドウをアクティブ化し表示。ウインドウが最大化/最小化されているときは元のサイズにする
Public Const SW_RESTORE = 9
'ウインドウをアクティブ化し、現在の位置とサイズで表示
Public Const SW_SHOW = 5
'ウインドウをアクティブ化し、最大表示
Public Const SW_SHOWMAXIMIZED = 3
'ウインドウをアクティブ化し、アイコン化
Public Const SW_SHOWMINIMIZED = 2
'ウインドウをアイコン化。現在アクティブなウインドウはアクティブなまま
Public Const SW_SHOWMINNOACTIVE = 7
'ウインドウを表示。現在アクティブなウインドウはアクティブなまま
Public Const SW_SHOWNA = 8
'以前に表示された位置とサイズで表示。現在アクティブなウインドウはアクティブなまま
Public Const SW_SHOWNOACTIVATE = 4
'SW_RESTORE と同じ
Public Const SW_SHOWNORMAL = 1
何故でしょう…
電卓は起動するのですが、拡張子のファイル名とディレクトリパスだけを
変えると起動しなくなります。
Calc.exe → ttermpro.exe
c:\windows\ → c:\Program Files\TTERMPRO\
単純ミスのような気もするのですが…
中に半角スペースが入っていると、コマンドラインが途中で区切られてしまいます。
ダブルクオーテーションで囲んでください。
VB基本関数のShell関数にも、そういう注意があったような気もしますけど…。
どうしたことでしょう?
半角スペースもなく間違っていないと思われるのですが…
もちろん、『ttermpro.exe』をダブルクリックすれば
ソフトは起動します。
Private Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hWnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
Private Const SW_SHOW = 5 'ウインドウをアクティブにする
Private Sub Command1_Click()
Dim Ret As Long
Ret = ShellExecute(Me.hWnd, "Open", "Calc.exe", "c:\windows\", "", SW_SHOW)
End Sub
Private Sub Command2_Click()
Dim Ret As Long
Ret = ShellExecute(Me.hWnd, "Open", "ttermpro.exe", "C:\Program Files\TTERMPRO\", "", SW_SHOW)
End Sub
むーっ(^^;;;
VBの文字列でダブルクオーテーションを文字列の中に入れるには、""とクオーテーションを2個おきます。
ディレクトリ名に半角スペースが入っているので、あのままだと起動しません。
ちなみに、SW定数ですけど、
じつはShell関数のものとまったく同じなみたいです。
あそこにはVBで宣言されているほうのものをいれても別に問題はありません。
vbNormalFocusとか。
ShellExecuteの第四引数はパラメータ,となっていますが。
> Ret = ShellExecute(Me.hWnd, "Open", "Calc.exe", "c:\windows\", "", SW_SHOW)
これが動くのは,単にCalc.exeがパスの通ったところにあるからで,
Ret = ShellExecute(Me.hWnd, "Open", "C:\Windows\Calc.exe", "", "", SW_SHOW)
が正しいと思いますが……。
申し訳ありません。たかみちえどの。
ディレクトリ名に半角スペースが入っているところは
「Program」と「Files」の間の事でしょうか?
とりあえずは、YuOどのの言われるように、第三引数に追加すると起動しました。
Ret = ShellExecute(Me.hwnd, "Open", "C:\Program Files\TTERMPRO\ttermpro.exe", "", "", SW_SHOW)
動いちゃえば良いって言えば良いんですが、何故あれだと動かないかが気になります。
>「Program」と「Files」の間の事でしょうか?
そうです。
> 動いちゃえば良いって言えば良いんですが、何故あれだと動かないかが気になります。
簡単にはYuOさんも言っていますけど、
この第4、第5引数は、起動時の"作業ディレクトリ"などを決めているに過ぎず、
最初のままだと、ファイル名そのものしか指定していないことになるので、
起動できません。
それから、Windowsの電卓が起動できたのは、ただの偶然です。
あれはたまたまWindowsのフォルダにあったから、
ファイル名だけで起動できたんです。
AutoExec.batのことは知っていますか?
そのファイル中でPATH変数に指定されているパスは、
全て、"パスが通っている"フォルダです。
そこにあるディレクトリは、パスが省略されたときなどに、
自動的に参照されます。
(普通PATH変数にはWindowsフォルダが指定してあります。
なので、Windowsフォルダは、"パスが通っている"ことになります)
さてPATH変数のことですけど、便利だからといってあんまり無駄にパスを追加しないこと。
環境変数領域というものがありますからね。
詳しく知るには、さすがにマイクロソフトのMSDNが一番参考になります。
http://www.microsoft.com/JAPAN/developer/library/jpuipf/_win32_shellexecute.htm
あと、ブックマークに下のURLをいれておくと、すぐマイクロソフトのサイトで調べられます。
ちなみに、Opera以外では英語も日本語も入力できます。
JavaScriptがオフになってると使用できません。
javascript:q=prompt("Please input the name of API etc.");if(q) location.href='http://search.microsoft.com/Default.asp?&so=RECCNT&boolean=ALL&siteid=japan&p=1&nq=NEW&btnsearch=%8C%9F%8D%F5&ig=1&ig=2&ig=3&ig=4&ig=5&ig=6&ig=7&ig=8&ig=9&ig=10&ig=11&ig=12&i=00&i=01&i=02&i=03&i=04&i=05&i=06&i=07&i=08&i=09&i=10&i=11&qu='+escape(q)
登録するときには、一切改行しないようにしてください。。
ぢゃわどの
たかみちえどの
YuOどの
遅くなりましたが、ありがとうございました。
出張で席を外しておりました。
ツイート | ![]() |