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)
-   -   Login en programas externos. (https://www.clubdelphi.com/foros/showthread.php?t=92761)

Canela1990 23-01-2018 19:34:57

Login en programas externos.
 
¡Hola! Antes que nada, me he tomado el trabajo de buscar en google y en los archivos del foro, pero solo encuentro soluciones parecidas que tampoco logran encaminarme

Estoy intentando programar una aplicación que llame a un ejecutable hecho por un tercero y que inicie sesión automáticamente con un usuario y contraseña que yo disponga (se que es viable porque ya lo vi hecho por alguien más, pero no se si lo hizo usando Delphi, por obvias razones de seguridad quisiera hacerlo yo misma)

En las soluciones parecidas que mencioné al comienzo vi que utilizaban shellexecute, con el cual no tuve ningún tipo de problema creando un programa sencillo que abra el ejecutable, lo hace perfectamente, pero no me queda claro cómo pasarle el usuario y la contraseña de esa aplicación externa.

(Solución parecida: Se encuentra en el thread número t=57154 de este foro perdón por la falta de link es que aún no tengo permitido colocarlos)

Mis preguntas, en resumen, serían:
  • ¿Es posible con Delphi crear una aplicación que "rellene" el usuario y la contraseña de un programa ejecutable cualquiera aunque no haya sido creado por mi?
  • En caso de ser afirmativo ¿con qué herramienta y cómo me documento al respecto?

PD: Es mi primer post si puedo mejorar, ampliar la información o cambiar algo que esté mal, no duden en pedirlo.

Casimiro Notevi 23-01-2018 21:41:01

Si el programa externo lo permite, o sea, que está pensado para recibir parámetros, entonces solamente tendrás que ejecutarlo con esos parámetros.
Pero depende de ese programa externo, tienes que saber qué parámetros admite y cómo los admite.
programaexterno -p secreto

Canela1990 24-01-2018 02:47:41

Cita:

Empezado por Casimiro Notevi (Mensaje 524191)
Si el programa externo lo permite, o sea, que está pensado para recibir parámetros, entonces solamente tendrás que ejecutarlo con esos parámetros.
Pero depende de ese programa externo, tienes que saber qué parámetros admite y cómo los admite.
programaexterno -p secreto

Muchísimas gracias por tu pronta respuesta! Entiendo, básicamente tendría que tener un mínimo conocimiento sobre cómo funciona para poder "comunicarme" con él.
Si logro hacerlo ya estaré comunicando la solución!

ecfisa 24-01-2018 06:33:34

Hola.

Tal vez te refieras a que la ventana de login del programa ya se este ejecutando... En ese caso fijate si este ejemplo te sirve de base para lo que buscas,

Código Delphi [-]
...
implementation 

uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShellExecute(Handle, 'open',
    PWideChar(GetEnvironmentVariable('SYSTEM')+'notepad.exe'),
    '', '', SW_SHOWNORMAL);
end;

procedure TForm1.Button1Click(Sender: TObject);
  procedure VKeyPress(const aKey: Char);
  var
    ti: TInput;
  begin
    ZeroMemory(@ti, SizeOf(ti));
    ti.Itype      := INPUT_KEYBOARD;
    ti.ki.wVk     := vkKeyScan(aKey);
    ti.ki.dwFlags := 0;
    SendInput(1, ti, SizeOf(ti));
  end;
var
  H  : HWND;
  i  : Integer;
begin
  H := FindWindow(nil, PChar('Sin título: Bloc de notas'));
  if H <> 0 then
  begin
    SetForegroundWindow(H);
    EnableWindow(H, False);
    try
      for i := 1 to Length(EditUserName.Text) do
        vKeyPress(EditUserName.Text[i]);
      vKeyPress(#13);

      for i := 1 to Length(EditUserPassword.Text) do
        vKeyPress(EditUserPassword.Text[i]);
    finally
      EnableWindow(H, True);
      SetForegroundWindow(Handle);
    end;
  end
  else
    ShowMessage('No se encontró la ventana');
end;
...
El ejemplo escribe el nombre de usuario y contraseñas almacenados en las propiedades Text de los edits en el Bloc de notas. No es muy específico ya que, como te indicó Antonio, tendríamos que conocer bastante mas acerca del programa externo.

Saludos :)

Canela1990 30-01-2018 23:42:10

Cita:

Empezado por ecfisa (Mensaje 524194)
Hola.

Tal vez te refieras a que la ventana de login del programa ya se este ejecutando... En ese caso fijate si este ejemplo te sirve de base para lo que buscas,

Código Delphi [-]
...
implementation 

uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShellExecute(Handle, 'open',
    PWideChar(GetEnvironmentVariable('SYSTEM')+'notepad.exe'),
    '', '', SW_SHOWNORMAL);
end;

procedure TForm1.Button1Click(Sender: TObject);
  procedure VKeyPress(const aKey: Char);
  var
    ti: TInput;
  begin
    ZeroMemory(@ti, SizeOf(ti));
    ti.Itype      := INPUT_KEYBOARD;
    ti.ki.wVk     := vkKeyScan(aKey);
    ti.ki.dwFlags := 0;
    SendInput(1, ti, SizeOf(ti));
  end;
var
  H  : HWND;
  i  : Integer;
begin
  H := FindWindow(nil, PChar('Sin título: Bloc de notas'));
  if H <> 0 then
  begin
    SetForegroundWindow(H);
    EnableWindow(H, False);
    try
      for i := 1 to Length(EditUserName.Text) do
        vKeyPress(EditUserName.Text[i]);
      vKeyPress(#13);

      for i := 1 to Length(EditUserPassword.Text) do
        vKeyPress(EditUserPassword.Text[i]);
    finally
      EnableWindow(H, True);
      SetForegroundWindow(Handle);
    end;
  end
  else
    ShowMessage('No se encontró la ventana');
end;
...
El ejemplo escribe el nombre de usuario y contraseñas almacenados en las propiedades Text de los edits en el Bloc de notas. No es muy específico ya que, como te indicó Antonio, tendríamos que conocer bastante mas acerca del programa externo.

Saludos :)

Muchas gracias Ecfisa, disculpa la demora en mi respuesta, tuve que formatear mi pc.
Pedazo de código te mandaste! Intenté compilarlo, pero me salta el error "incompatible types: 'WideChar' and 'Char'"
Según pude averiguar si uso pchar, tengo que enviarle char y no argumentos, en teoría lo comprendo, pero al momento de "pasar" a char, no entiendo cómo funcionaría (es más, a decir verdad, leyendo las páginas de como se usa shellexecute y sus parámetros también me pierdo)
De nuevo gracias por todo ese trabajo! Aunque el código parece corto, se el trabajo que cuesta.

ecfisa 31-01-2018 02:09:49

1 Archivos Adjunto(s)
Hola.
Cita:

Empezado por Canela1990 (Mensaje 524257)
...
Intenté compilarlo, pero me salta el error "incompatible types: 'WideChar' and 'Char'"
...

Seguramente estes usando Delphi 7, si es así, cambia WideChar por PChar.

Te adjunto los fuentes del ejemplo anterior (probado en Delphi 7) para que puedas revisarlo con tranquilidad.

Saludos :)


La franja horaria es GMT +2. Ahora son las 22:55:59.

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