Obtain a Process ID

F

Frank DeLuccia

Hello All,

Hope eveyone is having a better morning than me today. Anyway, I know
the .NET framework has classes to obtain process ID's of processes running
in the task manager. My question is; Does .NET have anything in it's bag of
tricks to give me the process ID of an instance I create through code?

Example:

Dim objExcel as Excel.Application

objExcel = New Excel.Application <----- I want to know the process ID
right after I create this instance.

Is there anyway I can get that info? Any guidance would be greatly
appreciated.

-Thanks,
Frank
 
B

Bob Phillips

Hi Frank,

Don't know about .NET, but this function gets a process id. Perhaps you can
build into .NET

Function ProcID() As Long
Dim hwnd As Long
Dim idProc As Long
hwnd = FindWindow(vbNullString, "Microsoft Excel")
Call GetWindowThreadProcessId(hwnd, idProc)
ProcID = idProc

End Function


--

HTH

Bob Phillips
... looking out across Poole Harbour to the Purbecks
(remove nothere from the email address if mailing direct)
 
F

Frank DeLuccia

Bob,

Thanks for the hint but the Excel visible property is set to false b/c
this is an automated process without interaction, there could be multiple
instances of excel running, and I need the process ID of the instance being
created at runtime. The thought is if there is an error in that instance
running, I can kill that process using the ID while leaving the other
instances alone.

Thanks for your time,
Frank
 
J

Jake Marx

Hi Frank,

I think you could still use Bob's suggestion. When you create the instance
of Excel, just check the value of the application's Hwnd property. Then
pass that value to the GetWindowThreadProcessId function to get the PID.

In your case:

Public Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long

Sub Test()
Dim objExcel As Excel.Application
Dim lPID As Long

Set objExcel = New Excel.Application
GetWindowThreadProcessId objExcel.hwnd, lPID
Debug.Print "PID: " & CStr(lPID)
objExcel.Quit
Set objExcel = Nothing
End Sub

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]
 
F

Frank DeLuccia

Thanks, Guys, for all your help!!!

Jake Marx said:
Hi Frank,

I think you could still use Bob's suggestion. When you create the instance
of Excel, just check the value of the application's Hwnd property. Then
pass that value to the GetWindowThreadProcessId function to get the PID.

In your case:

Public Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, lpdwProcessId As Long) As Long

Sub Test()
Dim objExcel As Excel.Application
Dim lPID As Long

Set objExcel = New Excel.Application
GetWindowThreadProcessId objExcel.hwnd, lPID
Debug.Print "PID: " & CStr(lPID)
objExcel.Quit
Set objExcel = Nothing
End Sub

--
Regards,

Jake Marx
MS MVP - Excel
www.longhead.com

[please keep replies in the newsgroup - email address unmonitored]


Frank said:
Bob,

Thanks for the hint but the Excel visible property is set to
false b/c this is an automated process without interaction, there
could be multiple instances of excel running, and I need the process
ID of the instance being created at runtime. The thought is if there
is an error in that instance running, I can kill that process using
the ID while leaving the other instances alone.

Thanks for your time,
Frank
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top