• ベストアンサー

windowsのプロセスIDやスレッドIDの使い道

win32APIで取得したプロセスIDやスレッドIDの使い道について教えてください。 CreateProcessなどで取得したプロセスのハンドルやスレッドのハンドルはwin32APIで使う場面がありますが、プロセスIDやスレッドIDの使い道がわかりません。 どのような場面でプロセスIDやスレッドIDを使うのでしょうか?具体的にこんな事をするときに使うよなどあれば教えていただきたいです。 プロセスIDやスレッドIDを引数にとるAPI関数などがあれば教えていただきたいです。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.1

・プロセスID 「他のプロセスが使用しているメモリにアクセスする場合」に必要です。 ・スレッドID 1つのプロセスで複数のスレッドが実行される可能性があるので、プロセスIDだけでは足りません。スレッドを識別する為のスレッドIDが必要です。 >どのような場面でプロセスIDやスレッドIDを使うのでしょうか? 各プロセスで実行中のスレッドの優先順位を、別プロセスから変更する場合には、プロセスIDやスレッドIDが必要です。 他に「デバッガ」と呼ばれるアプリで「他のプロセスを操作する場合」にも使われます。

yozakura20
質問者

お礼

回答ありがとうございます。 他のプロセスにアクセスするさいに使えるんですね。 参考になります。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

OpenProcess、OpenThread 他のプロセスやスレッドからハンドルをオープンする。 プロセスIDやスレッドIDは単なる数値なのでプロセス間通信などで送って使える。 もちろんオープンするにはアクセス権限が必要だけど。

yozakura20
質問者

お礼

回答ありがとうございます。 プロセス間でのやり取りに使えるんですね。 参考になりました。

関連するQ&A

  • 既存プロセスからプロセスのプライマリースレッドIDの取得方法

    いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。

  • ShellExecuteが起動したプロセスのID

    CreateProcessは起動したプロセスのIDをくれますが、ShellExecuteでは分からないものでしょうか。 ShellExecuteExならプロセスのハンドルを受け取ることはできますが、IDは分かりません。 ハンドルから元のIDを割り出す関数でもないですかね。

  • プロセスIDからウィンドウハンドルを取得する方法

    以下の方法を調べていますが、プロセスIDからウィンドウハンドルを取得する方法がわかりませんでした。 (1)自分がCreateProcessで生成したプロセスのウィンドウハンドル (2)自分とは関係ないプロセスで、プロセスIDだけ判明しているプロセスのウィンドウハンドル ご存知の方、ご教授願います。 <環境> WindowsXP VC++6.0

  • スレッドが作れない

    VC9SDKで、スレッドを作る時_beginthreadexの第3引数の型でエラーが出てしまいます。 ・・・main(・・・){ HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Process, NULL, 0, ID_PROCESS); } int __stdcall Process(){ } これはどう書けば解決するんでしょうか? お願いします。

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

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

  • プロセスIDの取得の方法。

    使用言語:C OS:NT4.0WS プロセスビューアで表示されるような、プロセスIDやプロセス名を 取得する方法を探しています。 Cの標準関数で無ければAPI関数での方法でもどちらでも構わないので よろしくお願いします。

  • c言語でプロセスIDを調べたい

    unixのコマンドで ps aux と打つと "ユーザー名" "プロセスID"  。 。 。 。 がでますけど、この2番目の"プロセスID"を調べる関数ってありますか? ※というのも、プロセスID(ジョブ番号)を引数にして、そのプロセスが終了したら何か処理をさせるというプログラムを作りたいからです。よろしくお願いします。

  • プロセスIDの取得(タスクバーのみ)

    似たような質問ですがわからないことがあるので質問します。 Enumwindows関数でタスクバーにあるウインドウ(トップレベルウィンドウ)を列挙することはできましたが、そのプロセスIDを表示させることができませんでした。 別のプログラムでプロセスIDを表示させることはできましたが そのプログラムですとすべてのプロセスを表示することになるので これでは自分のやりたい事と少し違うので困っています。 どうしたらタスクバーにあるプロセスIDをとりだすことができるので しょうか? 自分では GetWindowThreadProcessId関数 EnumChildWindows関数 を使用すればいいと思ってますが、具体的なプログラムが くめていません。 どうかよろしくおねがいします。

  • 子プロセスのデバッグ方法について

    VisualStudio2008のVCでデバッグをしています。 Win32のCreateProcess関数で"自分自身"のEXEファイルを実行すると、新プロセスが起動するのですがデバッグができません。 CreateProcessの呼び出し側プロセスと、同じプログラムである新プロセスを同時にデバッグすることはできないものでしょうか。

  • .NETでプロセスの一覧を取得

    現在実行されてるプロセスの一覧を取得したいのですがどのようにすればよいでしょうか? また、ほかのWin32APIの機能を.NETで利用するための関数をまとめてあるようなものは無いでしょうか?

専門家に質問してみよう