Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ayuda con teclas (https://www.clubdelphi.com/foros/showthread.php?t=95643)

DarkSton 05-04-2022 05:24:05

ayuda con teclas
 
hola amigos , quería hacer una consulta ,como puedo hacer para que yo al presionar un button1 en delphin7 se ejecute la función F8 como si hubiera presionado en el teclado F8 ?

Neftali [Germán.Estévez] 05-04-2022 09:56:52

Crea un componente TActionList, añade una TAction a la lista.
Configura las propiedades de la TAction, en concreto la propiedad Shortcut a F8.
Y en tu botón asigna en la propiedad Action la Action creada. Con eso debería bastar.



Asignas la TAction al botón:


En general, no sólo para casos como este, sino que a mi parecer cualquier TButton/TMenúItem/... que haya en la aplicación debe estar "controlado" por su TAction corresponsdiente.

Y el código correspondiente, se debe añadir al OnExecute de la TAction.

DarkSton 10-04-2022 17:39:21

Amigo me refiero, un ejemplo cuando das clic derecho sobre el escritorio y pones actualizar y luego presionas f5 se actualiza el escritorio , ahora quiero crear un form y agregar un button lo cual al darle clic al button , simular que presiono F5 y hacer que el escritorio se actualize . Es posible eso ?

oscarac 10-04-2022 18:30:39

Click derecho y actualizar es lo mismo que presionar f5

creo que estas redundando la accion, en todo caso si quieres que se actualice puedes invocar el onshow

DarkSton 12-04-2022 19:03:27

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 546395)
Crea un componente TActionList, añade una TAction a la lista.
Configura las propiedades de la TAction, en concreto la propiedad Shortcut a F8.
Y en tu botón asigna en la propiedad Action la Action creada. Con eso debería bastar.



Asignas la TAction al botón:


En general, no sólo para casos como este, sino que a mi parecer cualquier TButton/TMenúItem/... que haya en la aplicación debe estar "controlado" por su TAction corresponsdiente.

Y el código correspondiente, se debe añadir al OnExecute de la TAction.



hice esto , pero el button se desactivo , pero lo que quiero es que cuando yo haga clic al button1 mi pc piense que el presionado F5
lo que tu pusiste hace lo contrario .
Cita:

procedure TForm1.Action1Execute(Sender: TObject);
begin
button1.Enabled := true;
end;
al presionar F5 activa el button1

escafandra 12-04-2022 22:21:11

Si lo que quieres es simular una pulsación de teclado, la solución la tienes aquí.
Código Delphi [-]
  SimKey(VK_F5, true);
  SimKey(VK_F5, false);
El tema es que la ventana que tenga el foco es la que recibirá el mensaje de F5 y será el mismo botón que has pulsado. No creo que eso es lo que quieras hacer.


Para actualizar todas las ventanas puedes hacer esto:
Código Delphi [-]
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);


Tendrás que especificar bien lo que pretendes hacer para que se te pueda contestar a tu pregunta.

DarkSton 13-04-2022 02:25:26

Agrego
SimKey(VK_F5, true);
SimKey(VK_F5, false);
Dentro del button ?

escafandra 13-04-2022 13:27:07

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SimKey(VK_F5, true);
  SimKey(VK_F5, false);
end;

Ya te adelanto que aunquer eso simula una pulsación hardware, la pulsación será leida por la ventana que tenga el foco del teclado y en este caso va a ser el propio botón sobre el que haces click.
O conoces la ventana (el Handle de esa ventana) a la que lo diriges y le pasas el foco antes de simular la pustación, o no te va a funcionar.

Realmente no has explicado bien tu problema y es por eso que añado aclaraciones al tema.
Quizás te interese algo que ya te apunté:
Código Delphi [-]
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);


Saludos.

DarkSton 14-04-2022 07:00:11

lo probé así pára ver si se abría el ayuda y soporte técnico de windows y no paso nada
o mas bien dicho es mi idea , mira que yo al hacer clic en el button simule la pulsacion F1 y que se abra el ayuda y soporte técnico de windows y no paso nada , haber si me deje entender
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
  SimKey(VK_F1, true);
   SimKey(VK_F1, false);
end;

escafandra 21-04-2022 18:57:20

¿Tienes desactivada la tecla de ayuda F1?
¿Has probado con VK_HELP?


Saludos.

Neftali [Germán.Estévez] 22-04-2022 08:39:27

Cita:

Empezado por escafandra (Mensaje 546496)
Ya te adelanto que aunquer eso simula una pulsación hardware, la pulsación será leida por la ventana que tenga el foco del teclado y en este caso va a ser el propio botón sobre el que haces click.
O conoces la ventana (el Handle de esa ventana) a la que lo diriges y le pasas el foco antes de simular la pustación, o no te va a funcionar.

Yo creo que [escafandra] tiene razón.
El envío (o simulación de teclas) no es el problema, sino controlar a qué ventana (handle) se la envías.

La API de windows te permite obtener el Handle del desktoop, a ver si eso te sirve para luego enviarle teclas con un SendMessage.
https://docs.microsoft.com/en-us/win...tdesktopwindow

DarkSton 01-05-2022 23:02:01

Cliente
 
Estoy trabado de agregar eso a mí cliente , ya logré bloquear muchos atajos de trampas como ejemplo alt+1 todo eso , ahora quiero que cuando el usuario use la trampa /z dentro mi cliente ,que simule la tecla F8 , esa tecla es salir del cliente

escafandra 02-05-2022 12:54:24

Cita:

Empezado por DarkSton (Mensaje 546692)
Estoy trabado de agregar eso a mí cliente , ya logré bloquear muchos atajos de trampas como ejemplo alt+1 todo eso , ahora quiero que cuando el usuario use la trampa /z dentro mi cliente ,que simule la tecla F8 , esa tecla es salir del cliente

No creo que ninguno de los que hemos leído tu hilo nos hayamos enterado de que es lo que en realidad preguntas. A estas alturas no se qui quieres simular o bloquear, en que entorno te encuentras, ni lo que ahora llamas cliente. Tampoco entiendo qué quieres decir cuando te refieres a "trampas".

Si lo que pretendes es bloquear ciertas entradas de teclado y convertirlas en otras, quizás lo que te interese sea un hook al teclado. En este ejemplo se bloquean todas las entradas pero puedes cambiarlo para bloquear sólo lo que te interese y ejecutar el código que te apetezca.

En definitiva, sin una pregunta clara, detallada y bien redactada, no esperes una ayuda apropiada por mucho que se esfuerce la gente de clubdelphi.



Saludos.

Neftali [Germán.Estévez] 02-05-2022 15:39:09

Cita:

Empezado por escafandra (Mensaje 546698)
No creo que ninguno de los que hemos leído tu hilo nos hayamos enterado de que es lo que en realidad preguntas. A estas alturas no se qui quieres simular o bloquear, en que entorno te encuentras, ni lo que ahora llamas cliente. Tampoco entiendo qué quieres decir cuando te refieres a "trampas".

+1
Mas o menos estoy igual.


La franja horaria es GMT +2. Ahora son las 02:39:48.

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