Llamé a una aplicación usando shellexecute. ¿Cómo obtener el PID de este programa en V B?
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