ShellExecuteで任意のEXEを実行させたい

[戻る]
頃多 2008/04/01(火) 17:16:52
// Test_appを起動する
ShellExecute(NULL, "open", "C:\\Program Files\\TEST\\Test_app.exe", 
       NULL, NULL, SW_SHOW);

この場合は、起動アプリのパスを指定してありますが、
ユーザーの任意の場所にある「Test_app.exe」を探して起動する場合は
どのように実装するべきでしょうか?
(例えば各PCのデスクトップにあるTest_appを実行したい場合など・・・)

コンパイラはVC++2005、OSはXP ProのSPです。
お願い致します。

maru 2008/04/01(火) 17:32:49
やりたい事は
1『任意の場所にある「Test_app.exe」』を起動することですか?
2『任意の場所にある「Test_app.exe」』を探すことですか?

1 そのパスをShellExecuteの第三引数に渡す。
2-1 ファイルを検索する関数(FileFindFirst等)を使用する。
2-2 (または)CFileDialog等でファイルダイアログを使用してユーザにファイルを指定させ
る。

頃多 2008/04/01(火) 17:33:47
[[解決]]
GetCurrentDirectory
 →呼び出し元プロセスのカレントディレクトリを取得する。

上記API関数を用いてパス指定が出来そうです。

頃多 2008/04/01(火) 17:42:12
>maruさん
説明不足ですいません。
実行するアプリ、DLLファイル、DLLファイルのI/Fで叩く別のexe。
上記三つのファイルがあり、DLLから叩くexeのパス指定に悩んでおりました。

ですのでGetCurrentDirectoryで初期実行アプリのパスを取得し、
そこからの別のexeの階層は指定させることで解決できました。

わざわざ解答して頂いたのに申し訳ございません。

maru 2008/04/01(火) 18:10:58
DLLやEXEのパスを取得するならGetModuleFileNameの方が幸せになれるかも。
# EXEはカレントディレクトリにあるとは限りませんよ。

頃多 2008/04/01(火) 18:23:17
GetModuleFileNameの方がやりたいことに近いかも。。。
こちらを用いて実行します。
ありがとうございます!

maru 2008/04/01(火) 19:18:06
読んでいる人が誤解するといけないので、...

> DLLやEXEのパスを取得するならGetModuleFileNameの方が幸せになれるかも。
先頭に「現在、実行中の」を付けてください。
GetModuleFileNameはハンドルからファイル名を取得するので、ハンドルが不明なもの
(=メモリにロードされていないもの、実行中で無いもの)のファイル名は取得出来ません。

# 蛇足かな。

2008/04/01(火) 23:44:26
リアルタイムでそれ調べてました。
ドライブとパスを取得するにはsplitpath関数で
ドライブ名とパスをくっつければいけると思います。

古いスレッドには追加発言できません。