- 締切済み
ShellExecuteが起動したプロセスのID
todo36の回答
- todo36
- ベストアンサー率58% (728/1234)
なるほど、容易ではないですね。 CreateToolhelp32Snapshotで現在実行中のプロセスのプロセスIDと実行ファイルのフルパス名を 列挙できます。 つまり、EXE名からプロセスIDが分かります。 しかし、同じEXEを複数起動した場合はプロセスIDが複数あるので区別できない。 ShellExecuteを実行する前後のCreateToolhelp32Snapshotを比較する... うーんイマイチな案でした。
関連するQ&A
- windowsのプロセスIDやスレッドIDの使い道
win32APIで取得したプロセスIDやスレッドIDの使い道について教えてください。 CreateProcessなどで取得したプロセスのハンドルやスレッドのハンドルはwin32APIで使う場面がありますが、プロセスIDやスレッドIDの使い道がわかりません。 どのような場面でプロセスIDやスレッドIDを使うのでしょうか?具体的にこんな事をするときに使うよなどあれば教えていただきたいです。 プロセスIDやスレッドIDを引数にとるAPI関数などがあれば教えていただきたいです。
- ベストアンサー
- その他(プログラミング・開発)
- 既存プロセスからプロセスのプライマリースレッドIDの取得方法
いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。
- ベストアンサー
- C・C++・C#
- プロセスIDからウィンドウハンドルを取得する方法
以下の方法を調べていますが、プロセスIDからウィンドウハンドルを取得する方法がわかりませんでした。 (1)自分がCreateProcessで生成したプロセスのウィンドウハンドル (2)自分とは関係ないプロセスで、プロセスIDだけ判明しているプロセスのウィンドウハンドル ご存知の方、ご教授願います。 <環境> WindowsXP VC++6.0
- ベストアンサー
- C・C++・C#
- 子プロセスのデバッグ方法について
VisualStudio2008のVCでデバッグをしています。 Win32のCreateProcess関数で"自分自身"のEXEファイルを実行すると、新プロセスが起動するのですがデバッグができません。 CreateProcessの呼び出し側プロセスと、同じプログラムである新プロセスを同時にデバッグすることはできないものでしょうか。
- ベストアンサー
- C・C++・C#
- VB.netでShellExecuteがしたい
VB6ですと ShellExecute(Me.Handle, "open", "History.csv", "", "", 3) とするとエクセルが開いて「History.csv」が観覧できるのですが、VB.netだと、エラーがでないもののエクセル画面がでてきません。なぜでしょうか? また、ShellExecuteに変わるような関数がありますでしょうか? 以下はソースです、パスは間違っていないし、返り値は562954248388610となっています。 i = ShellExecute(Me.Handle.ToInt64, "open", sFolderPullPath & "SerialHistory.csv", "", "", 3)
- ベストアンサー
- Visual Basic
- ShellExecuteでエクセルファイルが起動しません。
今、API関数GetOpenFileNameで「ファイルを開く」コモンダイアログを出して、 そこから選んだファイルのフルパスをテキストボックスに入れています。 さらにそのテキストボックスの中に入ったフルパスをAPI関数ShellExecuteで起動 させようとしているのですが、起動してくれません。 ちゃんとフルパスは入っています。 試しに新しいフォームを作ってShellExecute単独で、直接フルパスを 指定してやってみたところ起動できました。 問題は、パスではなく他の引数でしょうか?? ちなみに第1引数 : me.hwnd 第2引数 : "open" 第3引数 : フルパス 第4・5引数 : vbNullString 第6引数 : SW_SHOW と指定しました。 第4と5の引数はvbNullCharや""と指定してみました。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- 起動しているアプリケーションのプロセスIDを取得したい.
現在,起動しているアプリケーションのプロセスIDを取得したいと考えています. プロセスIDを取得するコマンドはあるのでしょうか? 環境:Windows2000+SP3
- 締切済み
- Windows NT・2000
- プロセスIDの取得(タスクバーのみ)
似たような質問ですがわからないことがあるので質問します。 Enumwindows関数でタスクバーにあるウインドウ(トップレベルウィンドウ)を列挙することはできましたが、そのプロセスIDを表示させることができませんでした。 別のプログラムでプロセスIDを表示させることはできましたが そのプログラムですとすべてのプロセスを表示することになるので これでは自分のやりたい事と少し違うので困っています。 どうしたらタスクバーにあるプロセスIDをとりだすことができるので しょうか? 自分では GetWindowThreadProcessId関数 EnumChildWindows関数 を使用すればいいと思ってますが、具体的なプログラムが くめていません。 どうかよろしくおねがいします。
- ベストアンサー
- C・C++・C#
- c言語でプロセスIDを調べたい
unixのコマンドで ps aux と打つと "ユーザー名" "プロセスID" 。 。 。 。 がでますけど、この2番目の"プロセスID"を調べる関数ってありますか? ※というのも、プロセスID(ジョブ番号)を引数にして、そのプロセスが終了したら何か処理をさせるというプログラムを作りたいからです。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- ShellExecuteでハンドルを取得
ShellExecuteで立ち上げたアプリケーションの ハンドルを取得取得できるのでしょうか? 返値はエラーなどでしたよね? はじめのShellExecute(ここ ,.....)の部分で いいのでしょうか? 宜しくお願いいたします。
- ベストアンサー
- C・C++・C#
お礼
じつはやりたいことは、プロセスとスレッドの優先度を指定した、実行プログラムなのです。 そこで、プロセスの優先度は、CreateProcessでもShellExecuteExでもハンドルが得られればいいのですが、スレッドはCreateToolhelp32Snapshot+Thread32First/Nextで得られた結果のうち、ParentProcessIdが親のものと一致したスレッドだけ取り出して優先度を指定しているのです。 このスレッド列挙関数はあるプロセスの所有するスレッドだけを挙げてくれるのではないところが問題です。 なかなかの案ですが、確実性に欠けますね。 どうもありがとうございました。 また、何か浮かんだらよろしくおねがいします。