• 締切済み

ShellExecuteのことで。

はじめまして。 最近c言語のプログラミングを始めて、 cでフォルダを開くプログラムをテストしていましたら、 あるフォルダだけ、エラーが発生して、開けません。 フォルダのほうも色々見たのですが、 どうしてもわからないのでどなたか教えてください。 普通に開けたときは33だったのですが 開けなかったフォルダでの戻り値は42でした。 #include<stdio.h> #include<windows.h> int main(void){ HINSTANCE a; a=ShellExecute(NULL,"open","test",NULL,"D:\\",SW_SHOWNORMAL); printf("return = %d",a); return 0; }

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> あるフォルダの中に > test.exe(問題のプログラム)と test(フォルダ) > と同じフォルダにこの2つをいれているのですが、もしかしてこれが原因になるってことはありますか? ShellExecuteではフォルダ(ディレクトリ)も実行ファイルも拡張子抜きで指定できるので調べてみました。 同じディレクトリ下に test というディレクトリと test.exe が存在しているときに a=ShellExecute(NULL,"open","test",NULL,"D:\\",SW_SHOWNORMAL); を実行すると、test.exe が優先されるようです。 MSDNを検索してみたのですが、この辺の優先順位に関する記述はありませんでした。 問題の場所にある test.exe がどういう挙動をするものかわかりませんが、 何か痕跡を残すようなものならそれを調べてみれば起動されていることがわかると思います。

noname#41708
質問者

補足

名前を変えずにほど試したら、Dosプログラムが無限ループされているように起動され続けました。 その後に、プログラムの名前を[ )test.exe ]に変えて試したところ動きました。 やはり、名前が同じなのが原因っぽそうです。 お手数かけてすみませんでした。 すごく助かりました。

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> 普通に開けたときは33だったのですが > 開けなかったフォルダでの戻り値は42でした。 ShellExecuteが失敗したときの戻り値は32以下ということになっているので 42を返しておいて開けない(失敗している)というのはちょっとわかりませんね。 GetLastError で何か情報が得られませんか?

noname#41708
質問者

補足

GetLastErrorはそのままついか大丈夫なんでしょうか? もしかしたら、プログラムをおいてある場所が悪いんでしょうか? あるフォルダの中に test.exe(問題のプログラム)と test(フォルダ) と同じフォルダにこの2つをいれているのですが、もしかしてこれが原因になるってことはありますか?

すると、全ての回答が全文表示されます。

関連するQ&A