VB5.0を利用して、プロセスIDの取得方法について教えてください

このQ&Aのポイント
  • VB5.0で書いたexeを実行した際にはGetCurrentProcessIdを利用してプロセスIDを取得できますが、Excelをオブジェクトとして作成した場合、プロセスIDをどのように取得することができますか?解決策を教えてください。
  • VB5.0を使用してExcelをオブジェクトとして作成した場合に、起動したExcelのプロセスIDを取得する方法を教えてください。
  • VB5.0でプログラムを実行し、Excelをオブジェクトとして起動した場合、そのExcelのプロセスIDを取得したいです。どのように実現できますか?
回答を見る
  • ベストアンサー

プロセスIDの取得方法について

下に同様の質問をしたのですが、削除方法分からない為、再度質問させていただきまし。 VB5.0を利用しています。 VBで書いたexeを実行した際に、そのプロセスID(自分の)は、GetCurrentProcessIdを利用すれば取得できると分かりました。 が、プログラム内でExcelを下記の様にオブジェクトを作成した場合、そのプロセスIDをどうやって取得すればいいのでしょうか? ご存知の方居ましたら、教えて下さい。 Set ExcelObj = CreateObject("Excel.Application") ここで起動?されたExcelのプロセスIDを取得したいのですが。

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

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

FindWindowなどのキャプションか、クラス名で対象オブジェクトハンドルを取得し、 GetCurrentProcessId関数で、プロセスIDとスレッドIDを取得する方法が一般的。 過去スレにいっぱいサンプルがあります。 スクリプトを使用するなら、以下の方法もあったりする。 でもどちらも複数EXCEL起動時は、考えなければいけない部分多し。 Sub Main()   Dim ExcelObj As Excel.Application      Set ExcelObj = CreateObject("Excel.Application")   ExcelObj.Visible = True   Call DebugHandle   ExcelObj.Quit   Set ExcelObj = Nothing End Sub Public Function DebugHandle()   Dim strSQL   As String   Dim objWk    As Object   Dim objXlsProc As Object   strSQL = "SELECT Handle FROM Win32_Process WHERE Name = 'EXCEL.EXE'"   Set objWk = GetObject("winmgmts:").ExecQuery(strSQL)   For Each objXlsProc In objWk     Debug.Print objXlsProc.Handle   Next End Function

nosiyuho
質問者

お礼

有難う御座います。 いろいろと試しながらやってみます。

nosiyuho
質問者

補足

有難う御座います。 プログラムが起動したExcelのみのプロセスIDを取得するには、どのようにしたら良いのでしょうか。 ご存知でしたらご教授下さるとありがたいのですが。

関連するQ&A

  • CreateObjectで作成したExcelのプロセスを終了させたい。

    VBからCreateObjectで作成したExcelのプロセスを終了させたいと考えています。 困っている点として、CreateObjectで作成したときにプロセスIDをどのように取得すれいいのかという点です。 宜しくお願いします。 環境 VB6.0+SP5 Windows2000+SP2 Excel2000

  • VB6.0上でExcelオブジェクトを生成

    質問です。 VB6.0上でExcelオブジェクトの生成についてです。 その1 Dim xlApp As Excel.Application … Set xlApp = CreateObject("Excel.Application") と その2 Dim xlApp As Object … Set xlApp = CreateObject("Excel.Application") と、どちらが良いのでしょうか? 開発環境は Win XP SP2 VB 6.0 Excel 2003 実行環境は Win 98 SE VB 6.0(ランタイムのみ) Excel 2000 SR-1 です。 開発環境ではその1、その2ともOKなのですが、 実行環境ではその2のみがOKです。 参考書にはその1が書かれていますが、その2を使うことによって何か不具合や都合の悪いことが起こりうるのでしょうか? あるいは当方の見当違いで根本的に何かが間違っているのでしょうか? どんな些細なことでも結構ですので宜しくお願いします。

  • プロセスIDの取得方法 

    Unix C++でプロセスIDの取得方法を教えてください。 (見当違いの質問だったらすみません) 親プロセス(自分)のプロセスIDと、親プロセスの起動した子プロセスのプロセスIDを取得したいです。 また、親プロセスの起動した子プロセスのプロセスIDを使って親プロセス終了時に子プロセスをkillしたいと思うのですが、 具体的にどうすればいいかわからず困っています。

  • サーバ内のプロセスを取得するには?

    こんにちは! VB.netでサーバで起動しているexeを、ローカルから停止したいのですが、肝心のサーバ内のプロセスIDを取得できません・・・ System.Diagnostics.Processはローカルのプロセスしか取得できないのでしょうか? どなたかネットワーク全体のプロセスを取得できるコードをご存知でしたら、教えて下さいm(_ _)m よろしくお願い致します。

  • EXCELのプロセスが残ってしまう

    VBからExcelを起動し、ごく稀にExcelのプロセスが残ってしまう場合があります。全く同じ条件で実行した場合、残る時と残らない時とありを悩ませています。 いろいろな対策方法が検索できましたが、解決しませんでした。 また、このようにExcelプロセスが残った際、IISの動作がおかしくなっているのか、「CGIエラー」を返します。ただし、exeなど実行系ファイルを実行せず、XXX.HTMなどは表示できます。 VBで記述したexeは、CGI系のアプリとしてブラウザから実行されています。 対処方法ご存知でしたら、教えて下さい。 環境 NT4サーバ+SP6a Excel97 VB5.0

  • VB6からExcelを操作する

    VB6.0からExcelの操作をしています。 そのなかで、Excelシートを印刷したいのですが、どのようにしたら良いのでしょうか。 また、ExcelVBAのFunctionやSubを実行するにはどのようにするのでしょうか。 VB6.0内でExcel操作は次のようにしています。 Dim ExcelApp As Object Dim EWorkbook As Object Dim ESheet As Object Set ExcelApp = CreateObject("Excel.Application") Set EWorkbook = ExcelApp.Workbooks.Open(ExcelBookFlNm) Set ESheet = EWorkbook.Sheets(M_SheetNm) Set ESheet = Nothing Set EWorkbook = Nothing ExcelApp.Quit Set ExcelApp = Nothing よろしくお願いします。

  • iexplore.exe*32が残ったままになる

    Dim ObjIE As InternetExplorer Set ObjIE = CreateObject("InternetExplorer.Application") を実行しても、 Set ObjIE = Nothing をすれば、オブジェクトは破棄されますよね? しかしタスクマネージャーのプロセスを確認すると、 Set ObjIE = Nothing をしてるのに、画像のように、 iexplore.exe*32が残ったままです。しかも二つです。 3つ目は、今gooに書き込んでる分だと思います。 何度も何度もCreateObjectを実行すると、 iexplore.exe*32が大量になってしまうのですが、 なぜ、 Set ObjIE = Nothingをしてるのに、 iexplore.exe*32は消えないのでしょうか?

  • VB5.0からExcel97にデータを書き込むとき

    VB5.0からExcel97にデータを書き込んだりする場合、最初にVBのほうで どういう設定をしなければいけないのでしょうか? 参照設定でMicrosoft Excel 8.0 Object Libraryを選択していて 以下の文をVBに設定しています。 Dim ExcelApp As Object Set ExcelApp = CreateObject("Excel.Application") これだけだと、起動したときに"Excel.Application"の部分が 「型が一致しません」でエラーになります。 何か足りない設定があるのでしょうか? 説明がわかりにくいかと思いますが、どうしたらいいかなかなか わかりません。どうぞよろしくお願いします。

  • 他のコンピュータのプロセスを取得

    VB2005Expressにて開発しています。 他のコンピュータで実行中のプロセスを取得したいと思っています。 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses("プロセス名","192.168.XXX.XXX") で指定したコンピュータからプロセスは取得することは出来ました。 ただ、特定のコンピュータだけ「リモート コンピュータに接続できませんでした。」というエラーが出てしまいます。 プログラムの実行環境のID、パスワードと特定のコンピュータの IDとパスワードが異なっているのが原因だと思っています。 GetProcessesにIDとパスワードを設定してプロセスを取得することは 可能なのでしょうか。 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。

  • WSH createobjectで指定出来るアプリケーション

    CreateObjectで指定できるアプリケーションの指定方法について質問致します。 WSHでExcelオブジェクトを生成する場合、  set objxls = wscript.createobject("Excel.Application") や  set objxls = wscript.createobject(<対象exeのパス> などで指定しますが、 初めの表記で指定できるアプリケーション名はどうやって調べれば よいでしょうか? インストールしているアプリのオブジェクトを 初めの表記方法を使って生成したいと考えております。 よろしくお願い致します。

専門家に質問してみよう