Autor
|
Tema: No logro encontrar handle a SysListView32 de taskmanager (Leído 5,633 veces)
|
x64core
Desconectado
Mensajes: 1.908
|
hola buenas pues tengo un problema estoy trabajando con un code para obtener informacion del syslistview del taskmanager logro obtener el handle del task y logro obtener la clase de ventana ( "#32770" ) que es la del taskmanager pero a la hora de obtener los sub item no los puedo obtener noc enque estoy fallando en esta parte fallo :/ Case "#32770" i = FindWindowEx(lparam, 0, "#32770", "") i = FindWindowEx(i, 0, "SysListView32", "")
ahora un select case para ver si es la ventana del taskmanager obteniendo la clase ( "#32770" ) luego lparam es el handle de la ventana, yo estoy utilizando un hook a las ventanas para obtenerlo luego uso la api findwindowex pero me devuelve 0 ayudaaaa yo lo que quiero es obtener el handle de la syslistview para tener acceso a los items de la lista e buscado en el foro encontre un codigo pero la forma es distinta y esta en c++ y no es con hooks gracias
|
|
|
En línea
|
|
|
|
Sanlegas
Desconectado
Mensajes: 131
https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-
|
Por que no buscas otra forma de obtener los procesos mediante apis... si por X razón el administrador de tareas no esta abierto/disponible no podrias obtener los procesos, podrias dejar el enlace de c++ para ver que se puede hacer. Y otra cosa... lo que estas intentando hacer NO es un hook
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
hola pues no estoy haciendo un hook el hook ya lo tengo hecho y es para ventanas bueno mi idea era obtener el nombre de un proceso o de mi proceso cualquier de las dos cosas para poder cambiarlo el nombre y tambien noce quisiera usar ese metodo
|
|
|
En línea
|
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
hola pana gracias pero no e podido arreglar mi problema use esta linea que m dejaste: syslistivew32= FindWindowEx(lparam, ByVal 0&, "SysListView32", vbNullString) y tampoco siempre me devuelve 0 y uso findwindowex noce si estoy mal pero para obtener el handle de los subitem de la ventana ( lparam) me puede explicar por favor y vi tu codigo pero hace un gancho de proceso: Public Function Procesos(ByVal hWnd2 As Long, _ lParam As String) As Boolean y no para de ejecutarse y yo no quiero q no pare de ejecutarse gracias!
|
|
|
En línea
|
|
|
|
Hasseds
Desconectado
Mensajes: 145
|
Hola, una pregunta, de que SyslistView32 queres obtener el Hwnd... el de aplicaciones o el de Procesos ?
|
|
|
En línea
|
Sergio Desanti
|
|
|
|
Hasseds
Desconectado
Mensajes: 145
|
Form Option Explicit Private Sub Form_Load() AutoRedraw = True Call SetTimer(hwnd, &H0, &H14, AddressOf TimerProc) End Sub
Modulo Option Explicit 'Modulo: HwndTask 'Autor: Sergio Desanti (Hasseds) 'Test: XP (32 BIT) & W7/UAC (32 BIT) 'Retorno: Hwnd del administrador de tareas Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean Private Declare Function EnumChildWindows Lib "user32" (ByVal hwndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal wIndx As Long) 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 GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) 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 FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Dim RetEnumHwndParent As Long Dim RetEnumHwndChilds As String Public Function HwndTask() As Long Call EnumWindows(AddressOf EnumHwndParent, ByVal &H0) HwndTask = RetEnumHwndParent End Function Private Function EnumHwndParent(ByVal hwnd As Long, ByVal lParam As Long) As Boolean RetEnumHwndParent = 0 RetEnumHwndChilds = "" If Not IsWinBorder(hwnd) = False And GetClase(hwnd) = "#32770" Then Call EnumChildWindows(hwnd, AddressOf EnumHwndChilds, ByVal &H0) If RetEnumHwndChilds = "DavesFrameClass" Then RetEnumHwndParent = hwnd Exit Function End If End If EnumHwndParent = True End Function Private Function EnumHwndChilds(ByVal hwnd As Long, ByVal lParam As Long) As Boolean RetEnumHwndChilds = GetClase(hwnd) If RetEnumHwndChilds = "DavesFrameClass" Then Exit Function EnumHwndChilds = True End Function Private Function GetClase(ByVal hwnd As Long) As String GetClase = Space$(&H10) ' GetClase = Left$(GetClase, GetClassName(hwnd, GetClase, &H10)) End Function Private Function IsWinBorder(ByVal hwnd As Long) As Boolean If (GetWindowLong(hwnd, &HFFF0) And &H800000) = &H800000 Then IsWinBorder = True End Function Public Function PidFrontHwnd(ByVal hwnd As Long) As Long Call GetWindowThreadProcessId(hwnd, PidFrontHwnd) End Function Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long) Dim HwTask As Long Dim HwChild As Long Dim HwTab As Long Dim HwLv As Long HwTask = HwndTask If HwTask <> 0 Then HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString) If SendMessage(HwTab, &H130B, 0, 0) = 1 Then HwChild = FindWindowEx(HwTask, 0, "#32770", vbNullString) HwLv = FindWindowEx(HwChild, 0, "SyslistView32", vbNullString) End If End If Form1.Cls Form1.Print HwTask Form1.Print HwLv End Sub
|
|
« Última modificación: 29 Agosto 2011, 04:02 am por Hasseds »
|
En línea
|
Sergio Desanti
|
|
|
|
Hasseds
Desconectado
Mensajes: 145
|
Estoy chequeando que el Tab Control es 1 (procesos)
el de Aplicaciones por ejemplo sería 0 (cero) If SendMessage(HwTab, &H1300 + 11, 0, 0) = 0 Then
Private Const TCM_FIRST = &H1300 Private Const TCM_GETCURSEL = (TCM_FIRST + 11)
|
|
« Última modificación: 9 Julio 2011, 06:07 am por Hasseds »
|
En línea
|
Sergio Desanti
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
duda con mi app dentro del TaskManager
Programación Visual Basic
|
Anteros
|
0
|
962
|
10 Marzo 2007, 14:36 pm
por Anteros
|
|
|
ayuda con comandos de msdos y taskmanager
Programación Visual Basic
|
Proxy Lainux
|
3
|
3,801
|
31 Mayo 2008, 00:12 am
por Ch3ck
|
|
|
Como desactivar los tooltips de los SysListView32??
Programación Visual Basic
|
<[(x)]>
|
2
|
2,107
|
10 Julio 2009, 23:17 pm
por <[(x)]>
|
|
|
Ayuda, no logro encontrar el nombre de administrador.
Nivel Web
|
Kaosk.
|
2
|
3,287
|
19 Agosto 2010, 09:54 am
por Kaosk.
|
|
|
problema para encontrar el handle de una ventana
.NET (C#, VB.NET, ASP)
|
CH4ØZ
|
3
|
3,566
|
10 Septiembre 2010, 02:08 am
por CH4ØZ
|
|