Ver Mensaje Individual
  #1  
Antiguo 23-10-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Reputación: 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