• 締切
  • 暇なときにでも

ShellExecuteのことで。

  • 質問No.2633763
  • 閲覧数2481
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0
はじめまして。
最近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;
}

回答 (全2件)

  • 回答No.2

ベストアンサー率 62% (800/1280)

> あるフォルダの中に
> 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 ]に変えて試したところ動きました。

やはり、名前が同じなのが原因っぽそうです。

お手数かけてすみませんでした。
すごく助かりました。
投稿日時:2006/12/31 23:56
  • 回答No.1

ベストアンサー率 62% (800/1280)

> 普通に開けたときは33だったのですが
> 開けなかったフォルダでの戻り値は42でした。

ShellExecuteが失敗したときの戻り値は32以下ということになっているので
42を返しておいて開けない(失敗している)というのはちょっとわかりませんね。
GetLastError で何か情報が得られませんか?
補足コメント
noname#41708
GetLastErrorはそのままついか大丈夫なんでしょうか?

もしかしたら、プログラムをおいてある場所が悪いんでしょうか?

あるフォルダの中に

test.exe(問題のプログラム)と test(フォルダ)

と同じフォルダにこの2つをいれているのですが、もしかしてこれが原因になるってことはありますか?
投稿日時:2006/12/31 02:22
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ