Ver Mensaje Individual
  #6  
Antiguo 03-01-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para documentar con código lo que expuse anteriormente propongo una función para apropiarse del escritorio que usa el sistema por defecto en un momento dado:

Código Delphi [-]
const WINSTA_ALL_ACCESS = $37F;
procedure SetDefaultWSDesktop;
var
  hWSTA: HWINSTA;
  hDSK: HDESK;
begin
  // Me asigno la estación de ventana y el escritorio por defecto
  hWSTA:= OpenWindowStation('winsta0', true, WINSTA_ALL_ACCESS);
  if hWSTA<>0 then
    if SetProcessWindowStation(hWSTA) then CloseWindowStation(hWSTA);

  hDSK:= OpenInputDesktop(0, true, GENERIC_ALL);
    if hDSK <> 0  then
      if SetThreadDesktop(hDSK) then CloseDesktop(hDSK);
end;

A la hora de capturar conviene antes repetir la secuencia:
Código Delphi [-]
var
  hDSK: HDESK;
begin
  hDSK:= OpenInputDesktop(0, true, GENERIC_ALL);
    if hDSK <> 0  then
      if SetThreadDesktop(hDSK) then CloseDesktop(hDSK);
......

Tu aplicación residente en el PC remoto deberá ser un servicio, como forma más fácil de correr como SYSTEM, pero con la dificultad de acceder al GUI. También podrá ser una simple App que se lance desde un servicio, por lo que será SYSTEM también.

Para completar, conviene revisar los siguientes enlaces Lanzar una aplicación GUI desde un servicio y MiniSystem, una miniaplicación para ejecutar programas con privilegios SYSTEM, que te aclararan conceptos y te darán pautas para realizar lo que pretendes.


Saludos.
Responder Con Cita