Red de conocimiento informático - Espacio del host - Llamé a una aplicación usando shellexecute. ¿Cómo obtener el PID de este programa en V B?

Llamé a una aplicación usando shellexecute. ¿Cómo obtener el PID de este programa en V B?

Shellexecute realmente no puede obtener el PID. Puede obtener el PID de un programa en ejecución mediante los dos métodos siguientes:

Método 1:

Primero, copie el siguiente código en un módulo:

El la función GetPid (ExeName es una cadena) tiene la misma longitud

Continuar con el siguiente paso cuando ocurre un error

Dim objWMIService, colProcessList, objProcess

set objWMIService = GetObject(" winmgmts: { nivel de suplantación = suplantar }! \\.\root\cimv2 ")

Establecer colProcessList = objWMIService. ExecQuery _

(" Seleccione * de Win32 _ Proceso donde Nombre = ' " amp; ExeName amp'")

Para cada objProcess en colProcessList

GetPid = objProceso.

Procesar

Salir como...

Luego

Establecer objProcess = Nothing

Establecer colProcessList = Nothing

Establecer objWMIService = Nada

Finalizar función

2. Ejemplo de llamada:

El PID difuso tiene la misma longitud

ShellExecute 0 amperios, "open", "calc.exe", 0, 0, 1

PID=GetPid("calc.exe ")

MsgBox PID

Método 2 (recomendado):

Primero, copie el siguiente código en un módulo:

Declaración

Función de declaración privada FindExecutable Lib_

" shell32 dll "alias" FindExecutableA " u

(ByVal lpFile en forma de cadena, ByVal lpDirectory _

como cadena, ByVal lpResult como cadena) tienen la misma longitud

Función personalizada

La función pública SpeShellExecute (el nombre del archivo es una cadena) tiene la misma longitud

Dim Ret es un número entero

Marcar Bfr como una cadena

Atenuar ExPath como cadena

Atenuar Ext como cadena

Si Dir(FileName) = " " o FileName = " "Entonces

Salir función

Terminará si...

Bfr = String(300, 32)

Ext = Right$(nombre de archivo, 3)

Si Ext = "exe" o Ext = "com" o Ext = "bat", entonces

SpeShellExecute = Shell(nombre de archivo, vbNormalFocus)

Otro

Ret = FindExecutable(nombre de archivo, vbNullString, Bfr)

Si Ret gt entonces 32

ExPath = Left$(Bfr, InStr(Bfr, Chr$(0)) - 1)

SpeShellExecute = Shell(ExPath amp;" nombre de archivo amp, vbNormalFocus)

Otro

MsgBox "Sin asociación de tipo de archivo:" ampUCase( Externo )

Terminará si...

Terminará si...

Finalizar función

2.

El PID difuso tiene la misma longitud

PID = SpeShellExecute("C:\1.jpg")' ¡Utilice SpeShellExecute en lugar de ShellExecute!

PID del cuadro de mensajes