Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   presionar tecla (https://www.clubdelphi.com/foros/showthread.php?t=88957)

albelg 02-09-2015 22:35:52

presionar tecla
 
hola amigos del delphi, estoy en un proyecto donde necesito simular la pulsacion de las teclas Ctrl+D en otro equipo al cual me conecto via telnet.
Por ejemplo: si necesito enviarle el comando "xx" por telenet lo hago de esta forma: (idtelnet.writeln('xx')) y listo; pero se complica cuando quiero enviarle Ctrl+D por la misma via.

gracias a todos de antemano y me gustaria q me pudieran ayudar con eso.

AgustinOrtu 02-09-2015 22:57:56

y para que necesitas el control + d? no por curioso, sino porque me la da sensacion de que "necesito mandar control + v" (o cualquiera letra), la pregunta de fondo es "necesito pegar lo del cortapapeles"

Como esta implementado el servidor telnet al que te comunicas? Es implementacion tuya o de terceros? Podrias mandar un comodin e interpretarlo como control+d en el lado del server

albelg 03-09-2015 14:03:32

agustinortu: soy ingeniero en telecomunicaciones y trabajo en una empresa telefonica cubana. te digo esto porque para interactuar con la central telefonica se le envian comandos propios de ellas por telnet. El problema consiste en que luego de cada comando que se le de a la central hay que darle ctrl+d para que la central te de la respuesta, pero yo estoy confeccionando un proyectico.exe que evite al usuario enfrentarse a esa interfaz tan hostil como esa de dar comandos por telnet. Mi intencion es que el usuario presione un boton X y que por detras se envien una serie de comandos a dicha central.
gracias.

AgustinOrtu 03-09-2015 16:31:05

Creo que esto te puede servir
http://stackoverflow.com/questions/1...n-using-winapi

Cuando vuelva a casa con Delphi lo pruebo

roman 03-09-2015 16:59:18

En el enlace que pone AgustinOrtu aparece la función keybd_event, que te puede servir. Incluso aquí en el Club podrás encontrar referencias a su uso.

Es posible que, en particular, te sirva este hilo, mensaje #4, aunque desafortunadamente la persona que preguntó originalmente no constató si servía el método. En resumen se tara de mandar los caracteres de control mediante su código ascii: ^D = 4, por ejemplo.

// Saludos

escafandra 05-09-2015 01:55:25

Este código con la API SendInput, es preferible al uso de keybd_event

Código Delphi [-]
procedure SimKey(VK: BYTE; Down: boolean);
var
  Input: TInput;
begin
  ZeroMemory(@Input, sizeof(Input));
  Input.iType:= INPUT_KEYBOARD;
  Input.ki.wVk:= VK;
  Input.ki.wScan:= MapVirtualKey(VK, 0);
  Input.ki.dwFlags:= KEYEVENTF_EXTENDEDKEY;
  if not Down then
    Input.ki.dwFlags:= Input.ki.dwFlags or KEYEVENTF_KEYUP;
  windows.SendInput(1, tagINPUT(Input), sizeof(TInput));
end;

Ejemplo de uso:
Código Delphi [-]

SimKey(VK_CONTROL, true);
SimKey('D', true);
SimKey(VK_CONTROL, false);
SimKey('D', false);


Saludos.


La franja horaria es GMT +2. Ahora son las 08:36:36.

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