elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 01:09  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  No logro encontrar handle a SysListView32 de taskmanager
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No logro encontrar handle a SysListView32 de taskmanager  (Leído 971 veces)
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
No logro encontrar handle a SysListView32 de taskmanager
« en: 9 Julio 2011, 02:52 »

hola buenas pues tengo un problema  :-\ estoy trabajando con un code para obtener informacion del syslistview del taskmanager :P
logro obtener el handle del task y logro obtener la clase de ventana ( "#32770" ) que es la del taskmanager :P pero a la hora de obtener los sub item no los puedo obtener noc enque estoy fallando  :(

en esta parte fallo :/

Código
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 :P 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 :P

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
Tenient101

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #1 en: 9 Julio 2011, 03:13 »

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  :-X


En línea
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #2 en: 9 Julio 2011, 03:20 »

hola  ;D 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  :P
En línea
LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 693


Seguime


Ver Perfil WWW
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #3 en: 9 Julio 2011, 03:45 »

i = FindWindowEx(lparam, 0, "#32770", "")

Hola supuestamente el lparam es l handle de la ventana asi que no devias buscar la ventana  "#32770"  en caso que vos no tengas el lparam utilizas findwindow (no findwindowEx)

syslistivew32= FindWindowEx(lparam, ByVal 0&, "SysListView32", vbNullString)


te dejo un link que te va a sevir
http://www.recursosvisualbasic.com.ar/htm/listado-api/70-ocultar-administrador-tareas.htm
En línea

RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #4 en: 9 Julio 2011, 04:09 »

hola pana gracias pero no e podido arreglar mi problema  :-\
use esta linea que m dejaste:

Código:
syslistivew32= FindWindowEx(lparam, ByVal 0&, "SysListView32", vbNullString)
y tampoco siempre me devuelve 0 :P
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:
Código:
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 :P gracias!
En línea
Hasseds

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #5 en: 9 Julio 2011, 04:44 »

Hola, una pregunta, de que SyslistView32 queres obtener el Hwnd... el de aplicaciones o el de Procesos ? 
En línea

Sergio Desanti
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #6 en: 9 Julio 2011, 04:47 »

el de procesos bro :P
En línea
Hasseds

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #7 en: 9 Julio 2011, 04:53 »

Form

Código
 
Option Explicit
 
Private Sub Form_Load()
 
 AutoRedraw = True
 Call SetTimer(hwnd, &H0, &H14, AddressOf TimerProc)
 
End Sub
 
 
 

Modulo

Código
 
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 por Hasseds » En línea

Sergio Desanti
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #8 en: 9 Julio 2011, 05:52 »



PANA GRACIAS!!! SOLUCIONADO! solo una duda :P  :xD
que constante es esta que no defines? :P

Código:
If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then
En línea
Hasseds

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #9 en: 9 Julio 2011, 06:01 »

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 por Hasseds » En línea

Sergio Desanti
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #10 en: 9 Julio 2011, 06:17 »

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)




gracias  ;D yo lo unico que no entendi muy bien fue la ultima parte:

Código:
HwTab = FindWindowEx(HwndTask, 0, "SysTabControl32", vbNullString)
   
   If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then
     HwLv = FindWindowEx(HwndTask, 0, "#32770", vbNullString)
     HwLv = FindWindowEx(HwLv, 0, "SyslistView32", vbNullString)
   End If

todo lo anterior y todas las demas funciones las entendi bien solo esta parte porq yo utilizaba esto:

Código:
     HwLv = FindWindowEx(HwndTask, 0, "#32770", vbNullString)
     HwLv = FindWindowEx(HwLv, 0, "SyslistView32", vbNullString)

por eso no entiendo bien que hace esto:


Código:
HwTab = FindWindowEx(HwndTask, 0, "SysTabControl32", vbNullString)
   
If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then
En línea
Hasseds

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #11 en: 9 Julio 2011, 06:36 »


por eso no entiendo bien que hace esto:


Código:
HwTab = FindWindowEx(HwndTask, 0, "SysTabControl32", vbNullString)
  
If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then





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)



' Este es el Hwnd del TabControl (Pestañas de Aplicaciones, Procesos, rendimiento, Funciuones de Red, Usuarios)
HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString)


Y aquí chequeas que la Pestaña activa del TabControl sea igual a uno (la de procesos, que es la que contiene el SyslistView32 que te interesa,)
If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then


http://msdn.microsoft.com/en-us/library/bb760583(v=vs.85).aspx




Aclaracion: seria mas facil usar FindWindow en lugar de la Function HwndTask
Código
   Dim HwTask As Long
  Dim HwChild As Long
  Dim HwTab As Long
  Dim HwLv As Long
 
  HwTask = FindWindow("#32770", vbNullString) ' FindWindow en lugar de la Function HwndTask

 
  If HwTask <> 0 Then
    HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString)
    If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then
      HwChild = FindWindowEx(HwTask, 0, "#32770", vbNullString)
      HwLv = FindWindowEx(HwChild, 0, "SyslistView32", vbNullString)
    End If
  End If
 

Pero como hay mas ventanas en el sistema con la misma Disposición, (Por ejemplo Propiededes de Pantalla en XP), esto podría prestarse a errores y darte una mala información. Por eso en este caso es preferible usar la la Function HwndTask.

http://foro.elhacker.net/programacion_visual_basic/no_logro_encontrar_handle_a_syslistview32_de_taskmanager-t332950.0.html;msg1636759#msg1636759










« Última modificación: 9 Julio 2011, 18:45 por Hasseds » En línea

Sergio Desanti
Hasseds

Desconectado Desconectado

Mensajes: 144



Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #12 en: 28 Agosto 2011, 19:51 »

Edito: olvidé unos parentesis en el codigo original

http://foro.elhacker.net/programacion_visual_basic/no_logro_encontrar_handle_a_syslistview32_de_taskmanager-t332950.0.html;msg1636759#msg1636759


Código:

Private Function IsWinBorder(ByVal hwnd As Long) As Boolean
   If (GetWindowLong(hwnd, &HFFF0) And &H800000) = &H800000 Then IsWinBorder = True
End Function


« Última modificación: 29 Agosto 2011, 04:08 por Hasseds » En línea

Sergio Desanti
RHL


Desconectado Desconectado

Mensajes: 968


mental


Ver Perfil
Re: No logro encontrar handle a SysListView32 de taskmanager
« Respuesta #13 en: 28 Agosto 2011, 20:07 »

sale tio  gracias tu codigo me a ayudado bastante ;D
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Taskmanager =(
Hacking Básico
RoY_BeCk 1 315 Último mensaje 10 Agosto 2005, 18:10
por RoY_BeCk
¿Que API usa el TaskManager?
Programación C/C++
Freeze. 14 1,074 Último mensaje 10 Mayo 2008, 03:09
por Teddy Picker
Como desactivar los tooltips de los SysListView32??
Programación Visual Basic
<[(x)]> 2 722 Último mensaje 10 Julio 2009, 23:17
por <[(x)]>
Ayuda, no logro encontrar el nombre de administrador.
Nivel Web
Kaosk. 2 805 Último mensaje 19 Agosto 2010, 09:54
por Kaosk.
problema para encontrar el handle de una ventana
.NET
CH4ØZ 3 1,302 Último mensaje 10 Septiembre 2010, 02:08
por CH4ØZ
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines