Wie bekomme ich die Prozess ID aus HWND die Verwendung von managed VB.net code?
Ist es geschafft VB.net Weg, um die Prozess-ID aus der HWND, anstatt mit dieser Windows-API-Aufruf.
Private Declare Auto Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As IntPtr, _
ByRef lpdwProcessId As Integer) As Integer
Sub GetProcessID()
'start the application
Dim xlApp As Object = CreateObject("Excel.Application")
'get the window handle
Dim xlHWND As Integer = xlApp.hwnd
'this will have the process ID after call to GetWindowThreadProcessId
Dim ProcIdXL As Integer = 0
'get the process ID
GetWindowThreadProcessId(xlHWND, ProcIdXL)
'get the process
Dim xproc As Process = Process.GetProcessById(ProcIdXL)
End Sub
Kurze Antwort, Nein.
Es gibt ein paar Dinge hier, die erhöhen roten Fahnen. 1. Warum verwenden Sie CreateObject, wenn Office bietet die PIAs? 2. Warum müssen Sie Excel, Prozess-ID?
Ihre roten Fahnen, die außerhalb des Anwendungsbereichs dieser Frage. Viele andere Fragen wurden aufgeworfen und beantwortet, die sich mit diesen Fragen. Ich will nicht duplizieren diese.
na dann hoffe ich, dass jemand anderes kümmert sich um Ihre Fragen zu beantworten.
Lustig, die Sie erwähnen, als der Schwarze Frosch schon meine Frage beantwortet. Oh, und es ist eine Frage, die nicht Fragen. Vielen Dank für die Pflege
Es gibt ein paar Dinge hier, die erhöhen roten Fahnen. 1. Warum verwenden Sie CreateObject, wenn Office bietet die PIAs? 2. Warum müssen Sie Excel, Prozess-ID?
Ihre roten Fahnen, die außerhalb des Anwendungsbereichs dieser Frage. Viele andere Fragen wurden aufgeworfen und beantwortet, die sich mit diesen Fragen. Ich will nicht duplizieren diese.
na dann hoffe ich, dass jemand anderes kümmert sich um Ihre Fragen zu beantworten.
Lustig, die Sie erwähnen, als der Schwarze Frosch schon meine Frage beantwortet. Oh, und es ist eine Frage, die nicht Fragen. Vielen Dank für die Pflege
InformationsquelleAutor D_Bester | 2013-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht gewickelt .NET. Aber es gibt absolut nichts falsch mit dem Aufruf der systemeigenen API-Funktionen. Das ist, was der Rahmen ist intern, und das ist, warum P/Invoke, die erfunden wurde, um es so einfach wie möglich für Sie, dies selbst zu tun. Ich bin mir nicht wirklich sicher, warum Sie versuchen, es zu vermeiden.
Natürlich, würde ich empfehlen, die neue Stil-Erklärung, die ist mehr idiomatische Weise, Dinge zu tun .NETTO (anstatt der alten VB 6 Weg):
Ihre andere option, wenn Sie absolut nicht über das irrationale Zwang, zu bleiben mit verwaltetem code, ist der
Prozess
Klasse. Dies kann verwendet werden, um einen externen Prozess starten, und hat die Eigenschaft (Id
) , kann verwendet werden, um die Prozess-ID. Ich bin mir nicht sicher, ob das funktionieren wird für Sie. Sie insbesondere vermeiden, die uns erzählen, warum Sie mitCreateObject
in den ersten Platz.Ich änderte DllImport System.- Laufzeit.InteropServices.DllImport dann funktionierte es gut.
Ah ja, das muss entweder ein
Imports
- Anweisung am Anfang des Codes Datei, oder qualifizierte jedem Gebrauch. Ich halte alle meine API-Deklarationen in eine separate Datei enthält ein Modul namensNativeMethods
wie empfohlen von vielen style guides.InformationsquelleAutor Cody Gray