Autor
|
Tema: como hallar el Exe al que pertenece la ventana ??? (Leído 6,092 veces)
|
<[(x)]>
Desconectado
Mensajes: 215
|
hola quería pedirles si alguien puede mostear o introducirme en algún método para poder identificar a que archivo pertenece una ventana especifica. y si se puede teniendo el handle de un botón obtener el de su contenedor desde ya!... ...muchas gracias.
|
|
« Última modificación: 28 Diciembre 2008, 05:32 am por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
Dessa
Desconectado
Mensajes: 624
|
'Recupera el Handle de la ventana padre de una ventana o control Private Declare Function GetParent Lib "user32" (ByVal Hwnd As Long) As Long
|
|
« Última modificación: 26 Diciembre 2008, 16:54 pm por Dessa »
|
En línea
|
Adrian Desanti
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
|
;)
« Respuesta #2 en: 26 Diciembre 2008, 17:34 pm » |
|
gracias ya averiguo sobre esa api
y sobre saber q archivo contiene el código que la llamo?
|
|
|
En línea
|
<[(x)]>
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
No entendi muy bien la pregunta del 'archivo' Pero creo que es esto lo que quieres: 1ero: Obtener el Hwnd de la ventana. (FindWindow,GetParent...) 2ndo: Obtenemos el Proceso el cual es dueño de esa ventana. ( GetWindowThreadProcessId) 3ero: Obtenemos la ruta del ejecutable que es ese proceso. ( OpenProcess y GetModuleFileNameEx) Espero haberte ayudado Feliz Navidad
|
|
|
En línea
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
si es exactamente lo que necesitaba. gracias a los dos.
|
|
|
En línea
|
<[(x)]>
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
si es exactamente lo que necesitaba. gracias a los dos. De nada, para eso estamos Saludos
|
|
|
En línea
|
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
|
ultima
« Respuesta #6 en: 27 Diciembre 2008, 03:34 am » |
|
hola aka les dejo lo q logre hacer fijen se si no tiene algún choclo y si se puede mejorar graciass. Module1.bas Option Explicit
'<lapis Private Declare Function EnumProcesses Lib "PSAPI.DLL" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long 'lapis>
'<constantes Private Const PROCESS_VM_READ As Long = (&H10) Private Const PROCESS_QUERY_INFORMATION As Long = (&H400) Private Const SW_SHOWNORMAL = 1 Private Const WM_CLOSE = &H10 'Private Const gcClassnameMSWord = "OpusApp" 'Private Const gcClassnameMSExcel = "XLMAIN" 'Private Const gcClassnameMSIExplorer = "IEFrame" 'Private Const gcClassnameMSVBasic = "wndclass_desked_gsk" 'Private Const gcClassnameNotePad = "Notepad" 'Private Const gcClassnameMyVBApp = "ThunderForm" 'Private Const gcClassnameFolder = CabinetWClass 'De explorer.exe 'constantes>
'procedimiento >> Public Sub GetPathProces(Optional ClassName As String = vbNullString, Optional WindowsName As String = vbNullString) On Error GoTo eler Dim WinWnd As Long, ret As String, lpClassName As String Dim Buffer As String Dim i_Procesos As Long Dim Array_Procesos() As Long, RetVal As Long Dim sd As Long Dim ret1 As Long Dim Ruta As String Dim t_cbNeeded As Long Dim Handle_Proceso As Long Dim i As Long ReDim Array_Procesos(250) As Long ' Recoje el handle de la ventana WinWnd = FindWindow(vbNullString, ret) If WinWnd = 0 Then MsgBox "Couldn't find the window ...": Exit Sub lpClassName = Space(256) RetVal = GetClassName(WinWnd, lpClassName, 256) MsgBox "Classname: " + Left$(lpClassName, RetVal) ' Carga la variable sd con la id del proceso GetWindowThreadProcessId WinWnd, sd ' Obtiene un array con los id de los procesos ret = EnumProcesses(Array_Procesos(1), 1000, t_cbNeeded): i_Procesos = t_cbNeeded / 4 ' Recorre todos los procesos For i = 1 To i_Procesos If Array_Procesos(i) = sd Then ' Lo abre y devuelve el handle Handle_Proceso = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, Array_Procesos(i)) If Handle_Proceso <> 0 Then ' Crea un buffer para almacenar el nombre y ruta Buffer = Space(255) ' Le pasa el Buffer al Api y el Handle ret1 = GetModuleFileNameExA(Handle_Proceso, 0, Buffer, 255) ' Le elimina los espacios nulos a la cadena devuelta Ruta = Left(Buffer, ret1) End If ' Cierra el proceso abierto ret1 = CloseHandle(Handle_Proceso) ' Muestra la ruta del proceso y ee id MsgBox Ruta & " " & Array_Procesos(i), vbInformation, "info" Exit For End If DoEvents Next Exit Sub eler: MsgBox Err.Description, vbCritical, "Esto no tendria q haber pasado."
End Sub
Sub main() GetPathProces , InputBox("Escriba el titulo de una ventana.", "prueva uno", "ej: Mi Pc", (Screen.Width / 2) - 2500, (Screen.Height / 2) - 1500) End Sub
un 90(0 d3 (091 94573 n0 l3 h483 m4l 4 n4d13
|
|
« Última modificación: 27 Diciembre 2008, 03:36 am por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Otra Opcion: Option Explicit
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'Abre un proceso para poder obtener el path ( Retorna el handle ) Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long 'Obtiene el nombre del proceso a partir de un handle Private Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long ' Cierra y libera el proceso abierto con OpenProcess Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Const PROCESS_VM_READ As Long = (&H10) Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
Function ProcIDFromWnd(ByVal hwnd As Long) As Long
Dim idProc As Long: 'crea PID de un HWnd GetWindowThreadProcessId hwnd, idProc 'retorno del PID ProcIDFromWnd = idProc
End Function
Private Sub Command1_Click()
Shell "calc"
Dim Handle_Proceso As Long: Dim Buffer As String Dim ret As Long: Dim Ruta As String
Dim Handle As Long: Handle = FindWindow("SciCalc", vbNullString) 'MsgBox ProcIDFromWnd(Handle) Handle_Proceso = OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, 0, ProcIDFromWnd(Handle)) If Handle_Proceso <> 0 Then Buffer = Space(255) ' Crea un buffer para almacenar el nombre y ruta ret = GetModuleFileNameExA(Handle_Proceso, 0, Buffer, 255) ' Le pasa el Buffer al Api y el Handle Ruta = Left(Buffer, ret) ' Le elimina los espacios nulos a la cadena devuelta End If
ret = CloseHandle(Handle_Proceso) 'Cierra el proceso abierto
MsgBox Ruta 'Muestra la ruta del proceso
'cierro la calculadora Call SendMessage(FindWindow("SciCalc", vbNullString), &H112, &HF060&, 0) End
End Sub
Saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Por coordenadas del mouse: Option Explicit Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long 'Obtiene el nombre del proceso a partir de un handle Private Declare Function GetModuleFileNameExA Lib "PSAPI.DLL" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFilename As String, ByVal nSize As Long) As Long Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long Private Const PROCESS_VM_READ As Long = (&H10) Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
'Obtiene el Handle de una ventana a partir de una coordenada Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long 'Recupera la coordenada del cursor Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI x As Long y As Long End Type Function ProcIDFromWnd(ByVal hwnd As Long) As Long
Dim idProc As Long GetWindowThreadProcessId hwnd, idProc 'crea ID de un proceso desde un HWnd ProcIDFromWnd = idProc 'retorno de la ID de un proceso
End Function
Private Sub Form_Load()
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Dim retorno As Long Dim Handle As Long Dim Cor As POINTAPI
'Obtiene la coordenada del Mouse retorno = GetCursorPos(Cor) 'Recuperamos el HWND de la ventana asociada a esa coordenada Handle = WindowFromPoint(Cor.x, Cor.y)
Dim Handle_Proceso As Long: Handle_Proceso = OpenProcess(&H400 + &H10, 0, ProcIDFromWnd(Handle))
If Handle_Proceso <> 0 Then Dim Buffer As String: Buffer = Space(255) ' Crea un buffer para almacenar el nombre y ruta Dim ret As Long: ret = GetModuleFileNameExA(Handle_Proceso, 0, Buffer, 255) ' pasa el Buffer al Api y el Handle Dim Ruta As String: Ruta = Left(Buffer, ret) ' Le elimina los espacios nulos a la cadena devuelta End If
ret = CloseHandle(Handle_Proceso) 'Cierra el proceso abierto
Me.Cls: Me.Print Ruta 'Muestra la ruta del proceso
End Sub
Saludos
|
|
|
En línea
|
Adrian Desanti
|
|
|
<[(x)]>
Desconectado
Mensajes: 215
|
Por coordenadas del mouse: Saludos muy bueno jeje estaba pensando en hacerlo pero no se no me puse jeje..
|
|
« Última modificación: 28 Diciembre 2008, 04:33 am por <[(x)]> »
|
En línea
|
<[(x)]>
|
|
|
|
|