|
![]() |
Para saber si un programa está abierto hay varios modos, el método más fácil es: Sacar la clase de la ventana con el SPY++ de microsoft que viene con el Visual Studio, buscarla con FindWindow y luego destruirla con TerminateProcess. Public Declare Function FindWindow _ Lib "user32" _ Alias "FindWindowA" (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Public Declare Function TerminateProcess _ Lib "kernel32" (ByVal hProcess As Long, _ ByVal uExitCode As Long) As Long Si te dice que no tienes permisos para terminar el proceso: APIS: Public Declare Function OpenProcess _ Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcId As Long) As Long Public Declare Function GetWindowThreadProcessId _ Lib "user32" (ByVal HWnd As Long, _ lpdwProcessId As Long) As Long Constante para coger permiso completo: Private Const PROCESS_ALL_ACCESS = &H1F0FFF Ejemplo: dim IDProceso& , respuesta&, PID& , HWND& HWND= FindWindow("Nombre de la clase que has sacado con SPY++", "") respuesta = GetWindowThreadProcessId(HWND, IDProceso) PID = OpenProcess(PROCESS_ALL_ACCESS, 0&, IDProceso) respuesta = TerminateProcess(PID , 0&) Para abrir el programa no tiene misterio, puedes usar Shell o el API ShellExecute. Ejemplo: Shell("C:Archivos de programaprogramaprograma.exe") Si queires decirle una ruta de ejecución y parámetros de forma segura: Public Declare Function ShellExecute _ Lib "shell32.dll" _ Alias "ShellExecuteA" (ByVal HWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) As Long
No Entendi Muucho xq Soy Nb con VB ... me podes decir como Compruevo y Cierro el MSN Solo el MSN osea el Codigo Ya Armado Para Cerrar el MSN .. gracias chau
Te digo que no es nada facil, y eso no se aprende en un mes xD sino en años ( si quiere ser profesional), por eso es mejor que te pases a un curso de VB y cuando ya le puedas dar xD, pues has lo que te dijo Jesus. Salu2
Dime que parte es la que no entiendes y te la explico con más detalle.
Private Declare Function FindWindowEx _ Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) _ As Long Private Sub Form_Load() Dim hwndMSNMain As Long "Detectamo si la ventana está abierta Dim MSNVentana As Long MSNVentana = FindWindowEx(0&, hwndMSNMain, "msblwindowclass", vbNullString) If MSNVentana Then MsgBox "Si" "Si está abierta nos dirá SI Else MsgBox "No" "Si no está abierta nos dirá NO End If End Sub Con ese código detectarás si la ventana de MSN Messenger está abierta o no. JESUSR te explicó sobre como cerrar y abrir el proceso.
Men.. Este Post Es De Hace Un Año.. No Veo Porq Responder Ahora..
Y yo no veo renstricción alguna para acerlo. Puede que todabía no lo halla logrado, puede que le dé una idea, puede que se conecte y mire. Si no te gusta, no lo leas y se te acaba el problema. Trata de ser un poco positivo.
En realidad si... no hay problema... Puede q no solo ayude al autor, sino tambien a otros visitantes... No siempre el autor tiene la misma duda... Ademas.. Muchas veces, cuando crea un nuevo post, identico a este, dicen: "Este post ya existe"... pero q?, si ese post existente "ya es viejo, tiene mas de un año, bla bla bla"... :S Salu2
Tiene razón pablo, sería mejor con FindWindowEx que con FindWindow: Juntando ambos códigos quedaría así: Private Declare Function FindWindowEx _ Lib "user32" Alias "FindWindowExA" _ (ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) _ As Long Public Declare Function OpenProcess _ Lib "kernel32.dll" (ByVal dwDesiredAccessas As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcId As Long) As Long Public Declare Function GetWindowThreadProcessId _ Lib "user32" (ByVal HWnd As Long, _ lpdwProcessId As Long) As Long Constante para coger permiso completo: Private Const PROCESS_ALL_ACCESS = &H1F0FFF Public Declare Function TerminateProcess _ Lib "kernel32" (ByVal hProcess As Long, _ ByVal uExitCode As Long) As Long Private Sub Form_Load() Dim hwndMSNMain As Long Dim MSNVentana As Long dim IDProceso& , respuesta&, PID& MSNVentana = FindWindowEx(0&, hwndMSNMain, "msblwindowclass", vbNullString) If MSNVentana Then respuesta = GetWindowThreadProcessId(MSNVentana, IDProceso) PID = OpenProcess(PROCESS_ALL_ACCESS, 0&, IDProceso) respuesta = TerminateProcess(PID , 0&) Else MsgBox "No" "Si no está abierta nos dirá NO End If End Sub PD: Como lo que se está usando aquí es todo API, esas mismas instrucciones servirían para cualquier otro lenguaje de programación, sólo habría que cambiar la estructura de la declaración de las funciones.
Esta Bien, No Es Ke Lo Haga De Mala Onda. La Verdad Ke No Lo Vi Por El Lado De Ke Pueda Ayudar A Los Demas. Tienen Razon. Disculpen. |
![]() |