エクスプローラの終了と再起動の方法

このQ&Aのポイント
  • 『エクスプローラ』を終了して再起動する方法について教えてください。
  • 質問者は『エクスプローラ』を終了させるための方法について不明点があります。
  • ウインドウ・ハンドルの取得方法や、WM_CLOSE メッセージ以外の終了方法についても知りたいとのことです。
回答を見る
  • ベストアンサー

エクスプローラの終了と再起動をするには?

プログラムから『エクスプローラ』を一度終了して、再び起動させる方法を探しています。 私の考えでいくと WM_CLOSE というメッセージを送れば『エクスプローラ』を一度終了させられると 思っていますが、そのためにはウインドウ・ハンドルが必要ですよね。 問題はどうやって『ウインドウ・ハンドル』を取得するかということです。 ここの部分がよく分からないため質問します。 『エクスプローラ』を終了すべく大本の『エクスプローラ』のウインドウ・ハンドルを どうやって取得すればよいのか、ご存知の方がいましたら私に教えてくれませんか? また、WM_CLOSE メッセージ以外でもっとよい方法や、別の方法があれば複数の方法を より多く知りたいと思っていますので、たくさんのアイデア(終了と再起動)などを 教えて下さい。また、再起動は単に『エクスプローラ』を起動すればよいのですよね? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • stiffels
  • ベストアンサー率34% (25/72)
回答No.3

言って置いてから自分で試したところ、 うまくいきませんでした>< で、以下の方法でやっと解決。 何度もすみません。吊ってきます。。 DWORD hProc; hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetProcByName("Explorer.exe")); TerminateProcess(hProc, 0); CloseHandle(hProc);

Oh-Orange
質問者

お礼

あらら、上手くいきませんでしたか。→私はまだ試していませんでした。 『OpenProcess』関数でも出来るんですね。 これで正常に終了できたという解釈で良さそうですね。 3つもの方法(回答)、ありがとうございました。

Oh-Orange
質問者

補足

これから『GetProcessesByName』、『TerminateProcess』、『Process32First』、『Process32Next』、『OpenProcess』の 5つの API 関数について調べてみたいと思います。 何か参考になるサイト、本などありましたら助言をお願いします。 以上。これでこの質問も解決しそうです。 stiffels さん、ありがとうございました。

その他の回答 (2)

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.2

すみません。。 GetProcessesByNameはどうもうまくいかないらしいですねw 変わりに以下のような関数を作って代用するとうまくいきます。 unsigned long __stdcall GetProcByName(char* exeName) {   HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);   if((int)hSnap == -1) return 0;   PROCESSENTRY32 ProcEnt;   ProcEnt.dwSize = sizeof(PROCESSENTRY32);   if (Process32First(hSnap, &ProcEnt)){     do {       if (stricmp(ProcEnt.szExeFile, exeName)==0) {         CloseHandle(hSnap);         return ProcEnt.th32ProcessID;       }     } while(Process32Next(hSnap, &ProcEnt));   }   CloseHandle(hSnap);   return 0; } 呼び出しはこんな感じです。 hProcess = GetProcByName("Explorer.exe"); TerminateProcess(hProcess , 0);

Oh-Orange
質問者

お礼

2つ目の回答ありがというね。しかもCサンプルまで。とても嬉しいです。 C言語が主要言語ですから。 今度は『GetProcessesByName』関数ですか。 こちらの方が正しく動作するんですか。 これから試してみます。

  • stiffels
  • ベストアンサー率34% (25/72)
回答No.1

ウィンドウハンドルではなく、 GetProcessesByNameでプロセスIDを取得して TerminateProcessで強制終了でいいと思いますよ。 起動するばあいは単純に ShellExecute か WinExecなどで起動すればいいと思います。

Oh-Orange
質問者

お礼

回答ありがというございます。それも3つも。 現在午後5時25分です。 ウインドウ・ハンドルから WM_CL0OSE を送るよりも『GetProcessesByName』と『TerminateProcess』関数の 方が安全って事ですかね?それともこの方法もあるよって事ですか? とにかく情報提供ありがとうございました。

関連するQ&A

  • ウィンドウを終了させたい・・・

    いつもお世話になっています。 画面遷移時にあるメッセージウィンドウ(別exe)をVBから起動させ、遷移が終わった後にそのexeを終了させるプログラムを作っています。 プログラムの中身としては、 (1) Shell関数でexe(メッセージウィンドウ)を起動 (2) FindWindowで、起動しているexeのハンドルを取得 (3) 取得したハンドルに、SendMessageでexeを閉じるようにする(WM_CLOSEを使用)。 ・・・といったものです。 (1)と(2)はうまくいくのですが、最後のSendMessageがうまくいきません(>_<) 試しに(1)と(2)の後に、Do文の中で [1]SendMessageで起動したexeを終了させるようにする [2]FindWindowをして、ハンドルが0だったら、Exit Doする ・・・ようにプログラムしてみたところ、永久ループになってしまいました・・・。 他にも、SendMessageの代わりにShowWindowを使ってみましたが同じくダメでした・・・(T-T) ネットで調べていますが、他の方法が浮かびません。 どなたか、良い方法をご存じでしょうか?? よろしくお願いします!!

  • VC++6.0で複数の外部プログラムを起動 / 終了させる

    現在、VC++6.0でプログラムを起動時にINIファイルに 記述されたパスから複数の外部プログラムを起動して、 プログラムの終了時にその起動したプログラムをすべて 終了させるプログラムを作成しようとしているのですが 良い処理方法が思い浮かびません。 いろいろ調べている内に以下のようなページは見つけ ました。 http://www.asahi-net.or.jp/~yy6m-wd/kuma/vctip/proces.htm#terminate 下の二行をWM_DESTROYで処理させることにより一つの プログラムなら終了させることは出来ました。 これを複数回行う方法はないものでしょうか? (WM_CREATEで複数のプログラムを起動して起動した すべてのプロセスの終了コードを取得する方法) リスト構造体に格納しようとしましたがなぜか強制終了 してしまいます。(^_^; あと、ShellExecute関数のように起動したプログラムを 最前面に表示させないこと(アクティブにさせない)は できませんか? (SW_SHOWNOACTIVATEかSW_SHOWNA) もしかするとSTARTUPINFO 構造体で指定できそうな 感じですが・・・。 よろしくお願いします。

  • explorer.exeを終了しています・・・と出るのですが・・・

    終了・再起動する時など、最近、上記タイトルのようなエラーメッセージが出て、そのプログラムが結局終了できず、強制的に終了するようなボタンを押します。漠然とした質問で申し訳ないのですが、お心当たりの方、このような症状を治す良い方法は無いでしょうか。ちなみにインターネットエクスプローラーは6を使用、何かのアプリのインストールで発生したのかどうか、不明です。特に大きな不都合は今のところありませんが、今まで無かった現象で、また、直ぐに終了・再起動出来ないので、出来れば直したいのですが・・・よろしくお願いします。 他、OSはWIN2000pro sp3です。 なにか不明な点あればご質問ください。

  • エクスプローラーがすぐに終了します。

    初心者ですのでガマンして読んで下さい。ネットにつないでいくつかページ(ウインドウ?)を移動するとuserexeが原因でエクスプローラーを終了します。みたいな表示が出て、すぐに終了してしまいます。OSがMEだから・・という理由など過去のログ参照しましたが、他のプログラムも同時に起動していないし、サイトのあちこちをクリックして見ているわけではありません。あまりにも頻繁に起こるので非常に不便です。これが原因でPCを買い換えることも考え始めましたが、MEはこんな症状が良く出るものなのでしょうか?

  • エクスプローラーが終了してしまう

    OSはWindowsXP・CPUはAthron 1.0G・ハードディスクは40Gを使ってます。 Explorerを起動させて、ネットワーク上のフォルダーをクリックして、しばらくすると、問題が発生したため、Explorerを終了します。 というメッセージが表示されます。 このメッセージは出たり出なかったりします。 出る時は、何回やっても同じです。 何が原因なのかおわかりになる方教えてください。 よろしくお願いします。

  • エクスプローラが強制終了して起動できない。

    HDDのクリーンアップをして、再起動をしたところ、突然名前と会社名を入れる画面になり、名前を入れたところ次はプロダクトキーを入れろと言われ、入れました。 ところが、入れたとたんエクスプローラが強制終了するようになりました。 PCを起動し、起動するところまではいいのですが、起動のときに鳴る音楽がなると同時に、エクスプローラが強制終了。 何度再起動やってもうまく行かず、セーブモードを起動し、不具合を探そうとしたらセーブモードの時もエクスプローラが強制終了してしまい先に進めません・・・。 これって何が原因なのでしょうか?? 変なところいじった覚えはないし、フリーズしたらこんなことにはならないはずなのですが・・・。 パソコンは、シャープのメビウスノートで製造は2000年。 OSはWIN98SE HDは12GB メモリーは198MBです。

  • エクスプローラー 異常終了 XP

    WIN:XPです。 PCを起動し、エクスプローラーを立ち上げ、フォルダをオープンするとすぐに異常終了し、マイクロソフトのエラー報告の送信を問うメッセージが出てきます。 当然、エクスプローラーは終了してしまいます。 その状態から、再度エクスプローラーを起動すればとりあえず、フォルダ/ファイルオープンやファイルの名前変更などの作業ができます。 ただ、アプリケーションを起動している裏でエクスプローラー操作をするとやはり、同様の異常終了をすることが多く、非常に不安定です。 何か対処法はあるでしょうか? ディスクスキャンは何度か行っています。 メモリが足りないのでしょうか?

  • 別アプリを終了させる

    以前にも同様の質問をさせていただいたのですが、 再度質問です。 A.EXEとB.EXEがあったとします。 B.EXEからA.EXEを終了させたい。 そこで、FindWindowでA.EXEのウィンドウハンドルを ゲット。 その後、WM_CLOSEメッセージを送るという流れなのですが、 どうも、終了する時と終了しない時があります。 1回目は必ず、終了させる事ができず、2回目以降は 終了します。 原因がわからず、困っております。 なにか良い解決策などがございましたら、ご教授ください。 よろしくお願い致します。

  • craving Explorer終了できない

    Craving Expolrerを終了させようと思い、右上のバツボタンを押したところ Craving Explorerツールバー、およびCEBarが起動しているため、終了できません。 先に、すべてのInternet Explorerを終了させてください。 というメッセージが出ました。 Internet Explorer(ほかで開いているページ)を閉じて Craving Explorerだけの状態にしてもまだ出ます。 Cravingのツールバーなんてありませんし、何なのでしょう。 どうすれば、終了させることができますか?

  • エクスプローラー タブを使うと終了

    Windows11 エクスプローラーで複数TAB 使用時、先頭TABをクリックするとエクスぴローラーが終了