Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Exclamation 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

Responder Con Cita
  #2  
Antiguo 23-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 24-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
muy bueno esto de la inyección, pero en palabras, me puedes explicar paso a paso en que consiste???

saludos!
Responder Con Cita
  #4  
Antiguo 24-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
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?!!!?!
Responder Con Cita
  #5  
Antiguo 24-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Cita:
Empezado por aeff Ver Mensaje
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.
Me gustaría hablar su idioma.
Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Microsoft autoriza a los fabricantes a instalar Windows XP en vez de Windows Vista Ñuño Martínez Noticias 4 26-09-2007 06:11:19
Windows Vista: el nuevo Windows ME Casimiro Notevi Noticias 14 21-06-2007 10:39:57
Windows cede ante Google y modificará Windows Vista Bicho Noticias 5 20-06-2007 23:31:04
Compartir recursos entre Windows Nt Server y Windows 98 fer21unmsm Windows 1 18-07-2006 22:05:44
Problemas con Windows XP y Windows 98 Aprendiendo Varios 1 20-05-2005 17:28:29


La franja horaria es GMT +2. Ahora son las 04:51:55.


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
Copyright 1996-2007 Club Delphi