Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: x64core en 9 Julio 2011, 02:52 am



Título: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 02:52 am
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
  1. Case "#32770"
  2. i = FindWindowEx(lparam, 0, "#32770", "")
  3. i = FindWindowEx(i, 0, "SysListView32", "")
  4.  
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
 


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Sanlegas en 9 Julio 2011, 03:13 am
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


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 03:20 am
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


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: LeandroA en 9 Julio 2011, 03:45 am
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


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 04:09 am
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!


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Hasseds en 9 Julio 2011, 04:44 am
Hola, una pregunta, de que SyslistView32 queres obtener el Hwnd... el de aplicaciones o el de Procesos ? 


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 04:47 am
el de procesos bro :P


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Hasseds en 9 Julio 2011, 04:53 am
Form

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5.  
  6.  AutoRedraw = True
  7.  Call SetTimer(hwnd, &H0, &H14, AddressOf TimerProc)
  8.  
  9. End Sub
  10.  
  11.  
  12.  

Modulo

Código
  1.  
  2. Option Explicit
  3.  
  4. 'Modulo: HwndTask
  5. 'Autor: Sergio Desanti (Hasseds)
  6. 'Test: XP (32 BIT) & W7/UAC (32 BIT)
  7. 'Retorno:  Hwnd del administrador de tareas
  8.  
  9. Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
  10. Private Declare Function EnumChildWindows Lib "user32" (ByVal hwndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
  11. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal wIndx As Long) As Long
  12. Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  13. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long
  14.  
  15. Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  16. Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  17.  
  18. 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
  19. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  20. 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
  21.  
  22. Dim RetEnumHwndParent As Long
  23. Dim RetEnumHwndChilds As String
  24.  
  25. Public Function HwndTask() As Long
  26.   Call EnumWindows(AddressOf EnumHwndParent, ByVal &H0)
  27.   HwndTask = RetEnumHwndParent
  28. End Function
  29.  
  30. Private Function EnumHwndParent(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
  31.   RetEnumHwndParent = 0
  32.   RetEnumHwndChilds = ""
  33.   If Not IsWinBorder(hwnd) = False And GetClase(hwnd) = "#32770" Then
  34.     Call EnumChildWindows(hwnd, AddressOf EnumHwndChilds, ByVal &H0)
  35.     If RetEnumHwndChilds = "DavesFrameClass" Then
  36.       RetEnumHwndParent = hwnd
  37.       Exit Function
  38.     End If
  39.   End If
  40.   EnumHwndParent = True
  41. End Function
  42.  
  43. Private Function EnumHwndChilds(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
  44.   RetEnumHwndChilds = GetClase(hwnd)
  45.   If RetEnumHwndChilds = "DavesFrameClass" Then Exit Function
  46.   EnumHwndChilds = True
  47. End Function
  48.  
  49. Private Function GetClase(ByVal hwnd As Long) As String
  50.   GetClase = Space$(&H10) '
  51.   GetClase = Left$(GetClase, GetClassName(hwnd, GetClase, &H10))
  52. End Function
  53.  
  54. Private Function IsWinBorder(ByVal hwnd As Long) As Boolean
  55.   If (GetWindowLong(hwnd, &HFFF0) And &H800000) = &H800000 Then IsWinBorder = True
  56. End Function
  57.  
  58. Public Function PidFrontHwnd(ByVal hwnd As Long) As Long
  59.    Call GetWindowThreadProcessId(hwnd, PidFrontHwnd)
  60. End Function
  61.  
  62. Public Sub TimerProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
  63.  
  64.   Dim HwTask As Long
  65.   Dim HwChild As Long
  66.   Dim HwTab As Long
  67.   Dim HwLv As Long
  68.  
  69.   HwTask = HwndTask
  70.  
  71.   If HwTask <> 0 Then
  72.     HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString)
  73.     If SendMessage(HwTab, &H130B, 0, 0) = 1 Then
  74.       HwChild = FindWindowEx(HwTask, 0, "#32770", vbNullString)
  75.       HwLv = FindWindowEx(HwChild, 0, "SyslistView32", vbNullString)
  76.     End If
  77.   End If
  78.  
  79.   Form1.Cls
  80.   Form1.Print HwTask
  81.   Form1.Print HwLv
  82.  
  83. End Sub
  84.  
  85.  
  86.  




Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 05:52 am


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


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Hasseds en 9 Julio 2011, 06:01 am
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)



Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 9 Julio 2011, 06:17 am
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


Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Hasseds en 9 Julio 2011, 06:36 am

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 (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
  1.   Dim HwTask As Long
  2.   Dim HwChild As Long
  3.   Dim HwTab As Long
  4.   Dim HwLv As Long
  5.  
  6.   HwTask = FindWindow("#32770", vbNullString) ' FindWindow en lugar de la Function HwndTask
  7.  
  8.  
  9.   If HwTask <> 0 Then
  10.     HwTab = FindWindowEx(HwTask, 0, "SysTabControl32", vbNullString)
  11.     If SendMessage(HwTab, &H1300 + 11, 0, 0) = 1 Then
  12.       HwChild = FindWindowEx(HwTask, 0, "#32770", vbNullString)
  13.       HwLv = FindWindowEx(HwChild, 0, "SyslistView32", vbNullString)
  14.     End If
  15.   End If
  16.  

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 (http://foro.elhacker.net/programacion_visual_basic/no_logro_encontrar_handle_a_syslistview32_de_taskmanager-t332950.0.html;msg1636759#msg1636759)












Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: Hasseds en 28 Agosto 2011, 19:51 pm
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




Título: Re: No logro encontrar handle a SysListView32 de taskmanager
Publicado por: x64core en 28 Agosto 2011, 20:07 pm
sale tio  gracias tu codigo me a ayudado bastante ;D