Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   SysListView32 de TaskMgr de Windows (https://www.clubdelphi.com/foros/showthread.php?t=49509)

aeff 23-10-2007 19:38:53

SysListView32 de TaskMgr de Windows
 
Saludos, miren este problema, estoy tratando de eliminar uno de los Ítems del ListView que muestra los procesos en el Administrador de Tareas, no solamente eliminar sino también obtener el titulo de este, estas operaciones las realizo con las funciones para manejar el control ListView de la unit commctrl, ejemplo de ellas:

Cita:

ListView_GetItemCount
ListView_GetItem
ListView_DeleteItem
ListView_GetItemText




Bueno, lo primero que hago es obtener el Handle de este control, he tratado de hacerlo de la siguiente forma pero no funciona:

Cita:

var
LV_Handle: Cardinal;
begin
LV_Handle := FindWindow(nil, 'Administrador de tareas de Windows');
LV_Handle := FindWindowEx(LV_Handle, 0, 'SysListView32', 'Procesos');


No se por que pero no me resuelve el Handle del Listview de procesos del Administrador de tareas,

Para eso he usado la siguiente función:

Código Delphi [-]
function GetTaskMgrListViewProcess(): Cardinal;
const
  LV_ClassName = 'SysListView32';
  LV_WindowName = 'Procesos';
  TMgr_Title = 'Administrador de tareas de Windows';
var
  vTaskMgrWnd: Cardinal;

  function EnumObjectsFunc(Hwnd, lParam: LongInt): Boolean; stdcall;
  var
    wndText: array[0..100] of char;
    wndClass: array[0..100] of char;
  begin
    Result := true;
    GetWindowText(Hwnd, wndText, 100);
    GetClassName(Hwnd, wndClass, 100);
    if (wndText = LV_WindowName) and (wndClass = LV_ClassName) then
      vLVHwnd := Hwnd;
  end;

begin
  Result := 0;
  vTaskMgrWnd := FindWindow(nil, TMgr_Title);
  if vTaskMgrWnd > 0 then
    begin
      EnumChildWindows(vTaskMgrWnd, @EnumObjectsFunc, 0);
Result  :=  vLVHwnd;
    end;
end;


Con esta función si obtengo el Handle de este Listview , ahora lo que quiero es obtener el titulo/text/caption del item #1 por ejemplo, lo intento de esta forma:

Código Delphi [-]
Uses commctrl;

Var
  vLVHwnd: Cardinal;


procedure TForm1.Button1Click(Sender: TObject);
var
  LV_Handle: Cardinal;
  ItemText: array[0..100] of Char;
begin
  LV_Handle := GetTaskMgrListViewProcess();
  ListView_GetItemText(LV_Handle, 1, 1, ItemText, 100);

end;


Y ocurre un error en el Administrador de tareas, se cierra y al final no obtengo el titulo de item #1,

¿alguien me puede ayudar con este problema?, ¿Cómo obtengo el texto de un item cualquiera de este Listview?


Muchas gracias de antemano
Saludos cordiales,

aeff


seoane 23-10-2007 23:55:26

Hola aeff, quizá te resulte interesante este pequeño entretenimiento:
http://www.clubdelphi.com/foros/showthread.php?t=37902

Por otro lado, tu problema puede ser debido a que la dirección de memoria que pide la función ListView_GetItemText tiene que pertenecer al proceso dueño del ListView, y tu lo estas llamando desde otro proceso diferente. Tendría que comprobarlo, pero creo que el problema puede venir por ahí.

;) Prueba con la inyección

aeff 24-10-2007 02:42:12

muy bueno esto de la inyección, pero en palabras, me puedes explicar paso a paso en que consiste???

saludos!

aeff 24-10-2007 02:47:12

ahh! otra cosa *seoane*, aquellos códigos que implementaste, ¿es para que en cualquier control que en el Sistema pertenezca a la clase SysListView32 el item que diga *Injector.exe* sea renombrado por "" o Nil? no?? A TODOS LOS LISTVIEW QUE SEAN CREADOS MIENTRAS EL PROGRAM SE EJECUTA NO?!!!?!

Caral 24-10-2007 02:49:05

Hola
Cita:

Empezado por aeff (Mensaje 240680)
muy bueno esto de la inyección, pero en palabras, me puedes explicar paso a paso en que consiste???

saludos!

Y crees que el Maestro seoane es de este mundo?.
Esto hay que verlo, no creo que se pueda explicar en palabras el código del maestro, esta mas allá del entendimiento humano.:D
Me gustaría hablar su idioma.:)
Saludos


La franja horaria es GMT +2. Ahora son las 13:57:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi