• ベストアンサー

プロセスハンドル or ウインドウハンドル ??

こんにちは、E46-M3と申します。 さっそくですが、 あるプログラムから別のアプリケーションを起動させる際 または、終了させる際「ハンドル」を使用しますが、 ハンドルそのものの知識が浅いので 是非わかりやすく教えて頂ければ思います。 また、プロセスハンドルとウインドウハンドルの 違いについても教えて頂ければと思います。 よろしくお願い致します。

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

  • ベストアンサー
  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

 ハンドルについての解説は、それだけでかなりのスペースが必要です。ので、簡単に書きます。  詳細は、WindowsAPIバイブル等の書籍を購入して読んで来下さい。  プロセスハンドルは、各アプリケーション内部で発生したプロセスが持つハンドルです。親ハンドルは、アプリケーションのプロセスハンドルにもなります。  ウィンドウハンドルは、各アプリケーションから作成される窓毎に持つハンドルです。メイン画面のハンドルは、アプリケーションのハンドルとなります。  別のアプリケーションを起動する場合には、プロセスハンドルが取得できます。しかし、Windowsの終了等には、プロセスハンドルではなく、ウィンドウハンドルが必要になります(ヘルプ読んでね)。  説明の都合上端折っている所があるので、正確に覚える場合には、書籍の購入を強くお薦めします。

E46-M3
質問者

お礼

適切なアドバイスありがとうございます。 プロセスハンドルとウィンドウハンドルは、 基本的に別物なのですね。 ///////////// 書籍って結構高いですよね。 でもあって損はないですからね。

その他の回答 (1)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

「ハンドル」は、何かを扱うときに、その何かにたどり着くためのもの、です。 広い意味でのポインタだと思って良いです。 「プロセスハンドル」は、プロセスに何かしたいとき(例えば、あるプロセスを 終了させたい、とか)、「ウィンドウハンドル」は、ウィンドウに何かをしたい とき、に使います。 ちょっとややこしいのは、あるプログラムを終了させる場合に、そのプログラムが ウィンドウを持っている場合には、ウィンドウに対して終了の指示ができると いうことです。 Windowsでは、ほとんどのものを扱う場合には「ハンドル」を使います。メモリや フォント等々、すべてハンドルを持っています。 # あまり、うまく説明できてないかな… (^^;

E46-M3
質問者

お礼

いえいえ。 とても参考になりましたよ。 ハンドルについていろいろと検索してみたのですが、 概念的な説明をしているようなページが見つからなかった ので、質問してみたのですが、、やはり一筋縄では いかなそうですね。もう少し勉強してみます。 ありがとうございました!

関連するQ&A

  • プロセスのハンドルを確保

    AプログラムからBプログラムを起動するプログラムを作成しています。 AはループでBプログラムを起動するのですが、Aでプロセスの起動数をチェックし、飽きのプロセスハンドルを確保しBプログラム意を起動する際にAで確保したハンドルを使用して起動するような処理をするにはどうしたらいいでしょうか? 例:プロセス最大起動数:5   Aは10回ループし、Bを起動する。   Aでプロセスハンドルを5個確保する。   Bを起動する際に確保したハンドルを1個使用する。   Bが終了したらハンドルを解放する。   

  • プロセスのハンドルと識別子

    エディットやボタンなどへのアクセスは、ウインドウハンドルを使ってそれらのオブジェクトにアクセスしているんだと考えられますが、 プロセスやスレッドにはハンドルと識別子の両方があるので、その違いが分かりません。 あるスレッドが動いていて、それを止める場合、そのスレッドのハンドルを使うのか識別子を使うのかが想像できるようになりたいのです。 プロセスを終わらせる関数を見つけ、その関数の引数の型を調べるのではなく、ハンドルと識別子の違いを理解して、それを想像する方法を教えてください。

  • windows7のバックアップのプロセス

    ある処理が終了したらWindows7のPCをスリープにするように設定してあります。 しかし、別のアプリケーションの使用中にスリープに移行されると困るので、そのアプリケーション(プロセス)を登録してスリープ移行を抑止することが出来るようになっています。 例えば、excel使用中にスリープに移行しないようにexcel.exeを登録します。 そこで、windows7のバックアップ中にスリープに移行しないようにバックアップのプロセスを登録したいのですが、登録するプロセスが分かりません。 ネットで調べるとバックアップのプロセスは「sdclt.exe」だと書き込みがあったのですが、タスクマネージャーでプロセスを見ると、バックアップ開始時の数秒間だけ「sdclt.exe」が表示されて、すぐに消えてしまいます。 バックアップ中にメモリに常駐するプロセスを教えて頂きたく。

  • Windowsのプロセスの件について

    いつもお世話になります。 ご質問があります。 DCOMを使用している環境なのですが、クライアントでサーバに命令を投げて処理を行いますが、この時、サーバで立ち上がったWindowsのプロセスが終了しない現象が発生しております。 そこで、どの端末で処理した際のプロセスが終了しないかを探したいのですが、VB5.0のPGでそれは可能でしょうか? 例) (1)"XXX"というPGを"A"、"B"、"C"の端末で起動。 (2)サーバのプロセスに"XXX.exe"が3つできる。 (3)"XXX.exe"というPGを各端末で終了させる。 (4)3つあった"XXX.exe"のうち2つが消えるが、1つは残りっぱなしになる。 (5)どうにかして「残った"XXX.exe"はこの端末だ!」と断定したい。 尚、環境はOSはWindows NT、VB5.0です。 以上、ご存知の方がいましたらご教授を宜しくお願い致します。

  • 起動中の他のプログラム(orプロセス)を強制終了できるアプリケーションの作成

    お世話になります。 掲題通り、起動中の他のプログラム(orプロセス)を強制終了できるアプリケーションを作成したいです。できる方いらっしゃるなら、教えてください。 宜しくお願いします。

  • ウィンドウのハンドルが分からない

     VC++2005ExpressEditionを使用しています.  「ファイル」->「新規作成」->「プロジェクト」->「CLR」->「Windowsフォームアプリケーション」とすると,ただの四角いフォームが作成されます.このフォームにボタンやテキストボックスを配置していくわけですが,このフォームの「ウィンドウのハンドル」を取得するのはどうすればいいのでしょうか.そもそも,このフォームに「ウィンドウのハンドル」というものは存在するのでしょうか.  呼び出したいWindowsAPI(WSAAsyncSelect)の引数の中に「ウィンドウのハンドル」というものがあって困っています.参考書のサンプルプログラムには「HWND hWnd」などと書いてあるのですが,VC++が作成したファイルの中を検索しても「HWND」という文字列はヒットしませんでした.

  • windows7

    windows7 core2duo E8400 メモリ 4G を使用しているのですが、タスクマネージャーのプロセスの数が80個近くあり、スタートアップの設定でいくつかはずしたのですが現在も70個近くあります。 メモリは4Gで何もしていない状態で30%ほど使用しています。 アプリケーションは数十個ほどインストールした程度です。 それでプロセス70個はやはり異常でしょうか? プロセスの名前をググってみても、それを消していいものか判断がつきません。 アプリケーションのプロセスを終了して不具合などはおきませんでしょうか? これで通常ならいいのですが、判断がつきませんのでよければ教えてください。

  • エクスプローラから開かれるWordを別プロセスにするには

    VC++2008にてプログラムを作成しています。 自作プログラム(疑似エクスプローラ)にて、 WordやExcelファイルをCreateProcessにて オープンし、WaitForSingleObjectにて ファイルが閉じられるまで待機。 ファイルが閉じられたら、終了処理という流れのシステムを 作成しています。 自作プログラムからオープンする際は、 Officeのコマンドラインオプションを用いて 別プロセスで起動するようにしていますので、 自作プログラムからWord(またはExcel)ファイルを 複数開いても、個別プロセスになるので、 各ファイルが個別に終了処理を行えるようになっています。 (なっていると思っていた) 問題は、自作プログラムからWord(a.doc)を開き、 エクスプローラから別ファイルのWord(b.doc)を開いた際、 b.docは個別にプロセスが作成されず、 a.docで作成した1プロセスにまとめられてしまうことです。 そのため、a.docを閉じても、b.docが開いている限り、 終了処理に移行しません。 APIフックにて、CreateProcessを引っ掛けてみたのですが、 エクスプローラからのファイルオープン時には 呼ばれていないようで、自作プログラム外で ファイルオープンをした際に、強制的に独自プロセスで 起動する方法が分りません。 自作プログラム起動時に限り、Word,Excelのファイルを 独自プロセスで開かせたいのですが、 解決方法はありますでしょうか? よろしくお願いします。

  • ウィンドウを閉じてもタスクマネージャではプロセスが終了しない?

    メモリ使用量監視ソフトをインストールして気がついたのですが、 アプリを終了させたはずなのにメモリが解放されていませんでした。 不思議に思いタスクマネージャを立ち上げてプロセスを確認すると、 まだ起動した状態になっており、再度同じアプリを立ち上げると、 同じプロセスが多重起動してしまいました。 それからタスクマネージャを起動したまま色んなソフトを起動してみたのですが、 この現象が起きるソフトと起きないソフトがありました。 ■この現象が起きるプログラム ・Adobe CS3 シリーズ ・Filemaker Pro 8 ・IE 7 ・Google Chrome ・タスクマネージャ など ■この現象が起きないプログラム ・ad-ware2008 ・Windows Live Mail ・FireFox しばらくテストしていて気がついたのですが、 ウィンドウを閉じる「×」を押した場合のみプロセスが残り、 alt+F4で終了させた場合は正常に終了できるようで、 タスクマネージャにはプロセスが残りませんでした。 以下質問なのですが、 1、これは正常な動作なのでしょうか? 2、正常では無い場合、何か解決方法があるのでしょうか? ご教授のほどお願いいたします。

  • SYSTEM権限でプロセス機動

    いつもお世話になっております。 ただ今仕事で業務アプリを開発しているのですが、題記の件で立ち往生しております。 有識者の方がいらっしゃいましたら、ご教授いただければ幸いです。 【やりたいこと】 Windows2000Server,及びWindowsServer2003上でアプリを実装したときに、 ログオフでアプリケーションを殺さないようにする。 【経緯】 WindowsServer2008対応にて、今までセッション0でダイアログ表示を 行っていたアプリをユーザセッションに表示するように変更しました。 その際にUIを行うプロセスを新たに起動(CreateProcessAuUser()を用いて) するようにしたのですが、このUIを起動するとログインユーザ(Administrator権限) になってしまいます。 タスクマネージャ上でユーザがSYSTEMになっているプロセスは ログオフ後にログインしなおすとそのままアプリが残っているのに対し、 UIプロセスはWindowsによって異常終了してしまいます。 このことから、SYSTEM権限でプロセスを起動すれば良いのではないか? っと考えたのですが、はたして可能なのでしょうか? ・サービスプログラムからの起動 ・ATコマンドを使用して起動 ・スクリプト起動?(すいません、これはイマイチ分かっていません) 上記の場合にはSYSTEMになるということはわかったのですが、 SYSTEMで起動しているプロセスから起動することは可能なのでしょうか。 もし可能な場合どのように起動すればよいのかを教えていただきたく、よろしくお願いいたします。 尚、WindowsServer2008上ではプロセスが死ぬことは仕様としてあるのですが、 過去バージョンと同等機能(ログオフしてもプロセスが生きている)を維持しなくてはならないため、 本件のような仕様になっています。 どうぞよろしくお願いいたします。

専門家に質問してみよう