EXEファイル以外を実行させるには?

解決


ユーボ君  2002-06-12 23:20:20  No: 104358

EXEファイル以外のファイル、テラタームのマクロ、ttlファイルを実行させたいのですが。
どなたか教えてください。


ぢゃわ  2002-06-12 23:37:15  No: 104359

API関数にShellExecuteというのがあります。
これを使うと、拡張子が関連付けされたプログラムから
実行させることができます。

ShellExecuteの使い方はこのサイトのVisualBasicの
「API技術関連」のなかで説明してくれてあります。

あと、ShellExecuteの機能拡張版でShellExecuteEx
というのもありますが、それも検索サイトとか調べれば
結構たくさん参考文献がでてきますよ^^

こんな回答でOKでしょうか^^?


ユーボ君  2002-06-12 23:55:55  No: 104360

あっ、こんなところに書いてあったのですね。
何となく出来そうな感じです。

「API技術関連」の中に書かれている、ウインドウのハンドルと
定数(SW_××参照)とは、どう言う意味なのですか?


ぢゃわ  2002-06-13 00:22:48  No: 104361

ハンドルですが、いつも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


ユーボ君  2002-06-13 01:04:48  No: 104362

何故でしょう…
電卓は起動するのですが、拡張子のファイル名とディレクトリパスだけを
変えると起動しなくなります。

Calc.exe → ttermpro.exe
c:\windows\ → c:\Program Files\TTERMPRO\

単純ミスのような気もするのですが…


たかみちえ  URL  2002-06-13 01:13:17  No: 104363

中に半角スペースが入っていると、コマンドラインが途中で区切られてしまいます。
ダブルクオーテーションで囲んでください。
VB基本関数のShell関数にも、そういう注意があったような気もしますけど…。


ユーボ君  2002-06-13 02:06:32  No: 104364

どうしたことでしょう?
半角スペースもなく間違っていないと思われるのですが…
もちろん、『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


たかみちえ  URL  2002-06-13 05:59:20  No: 104365

むーっ(^^;;;
  VBの文字列でダブルクオーテーションを文字列の中に入れるには、""とクオーテーションを2個おきます。
ディレクトリ名に半角スペースが入っているので、あのままだと起動しません。

  ちなみに、SW定数ですけど、
じつはShell関数のものとまったく同じなみたいです。
あそこにはVBで宣言されているほうのものをいれても別に問題はありません。
vbNormalFocusとか。


YuO  2002-06-13 11:34:36  No: 104366

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)
が正しいと思いますが……。


ユーボ君  2002-06-13 22:32:33  No: 104367

申し訳ありません。たかみちえどの。
ディレクトリ名に半角スペースが入っているところは
「Program」と「Files」の間の事でしょうか?

とりあえずは、YuOどのの言われるように、第三引数に追加すると起動しました。

Ret = ShellExecute(Me.hwnd, "Open", "C:\Program Files\TTERMPRO\ttermpro.exe", "", "", SW_SHOW)

動いちゃえば良いって言えば良いんですが、何故あれだと動かないかが気になります。


たかみちえ  URL  2002-06-14 02:09:48  No: 104368

>「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)

  登録するときには、一切改行しないようにしてください。。


ユーボ君  2002-06-20 19:14:28  No: 104369

ぢゃわどの
たかみちえどの
YuOどの
遅くなりましたが、ありがとうございました。

出張で席を外しておりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加