Casa
Top.Mail.Ru Yandeks.Metrika
Foro: "Principal";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

abajo

¿Cómo enviar un mensaje al sistema que una tecla es presionada? Encontrar ramas similares


Delphimun   (2001-12-20 12:10) [0]

Как послать системе сообщение, что нажата клавиша? Например ставишь по таймеру это сообщение системе, что нажата клавиша, а пользователь работает в данный момент в блокноте и чтоб в блокноте писались эти буквы, которые ты послал системе(что нажли клавишу)



gek   (2001-12-20 12:32) [1]

Получаешь дескриптор блокнота и отсылаешь ему wm_keydown



Delphimun   (2001-12-20 13:10) [2]

я с этим уже разобрался(мне нужно было не только блокноту отсылать, а вобщем системе)
Вот пример из faq, кто заинтересовался:

-------------------------------------------------- -----------------------
Ниже приведена процедура, позволяющаю отправлять нажатия в любой
элемент управления (window control), способный принимать ввод с
клавиатуры. Вы можете использовать эту технику чтобы включать клавиши
NumLock, CapsLock и ScrollLock под Windows NT. Та же техника работает
и под Windows 95 для CapsLock и ScrollLock но не работает для клавиши
NumLock.
Обратите внимание, что приведены четыре поцедуры: SimulateKeyDown() -
эмулировать нажатие клавиши (без отпускания) SimulateKeyUp() -
эмулировать отпускание клавиши SimulateKeystroke() - эмулировать удар
по клавише (нажатие и отпускание) и SendKeys(), позволяющие Вам гибко
контролировать посылаемые сообщения клавиатуры.
SimulateKeyDown(), SimulateKeyUp() и SimulateKeystroke() получают коды
виртуальных клавиш (virtural key) (вроде VK_F1). Процедура
SimulateKeystroke() получает дополнительный параметр, полезный при
эмуляции нажатия PrintScreen. Когда этот параметр равен нулю весь
экран будет скопирован в буфер обмена (clipboard). Если дополнительный
параметр равен 1 будет скопированно только активное окно.
Четыре метода "button click" демонстрируют использование:
ButtonClick1 - включает capslock ButtonClick2 - перехватывает весь
экран в буфер обмена (clipboard). ButtonClick3 - перехватывает
активное окно в буфер обмена (clipboard). ButtonClick4 - устанавливает фокус в Edit и
отправляет в него строку.
Ejemplo:

procedure SimulateKeyDown(Key : byte);
comenzar
keybd_event(Key, 0, 0, 0);
fin;

procedure SimulateKeyUp(Key : byte);
comenzar
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
fin;

procedure SimulateKeystroke(Key : byte; extra : DWORD);
comenzar
keybd_event(Key,extra,0,0);
keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
fin;

procedure SendKeys(s : string);
var i : integer;
flag : bool;
w : word;
comenzar
{Get the state of the caps lock key}
flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
{If the caps lock key is on then turn it off}
if flag then
SimulateKeystroke(VK_CAPITAL, 0);
for i := 1 to Length(s) do
comenzar
w := VkKeyScan(s[i]);
{If there is not an error in the key translation}
if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then
comenzar
{If the key requires the shift key down - hold it down}
if HiByte(w) and 1 = 1 then
SimulateKeyDown(VK_SHIFT);
{Send the VK_KEY}
SimulateKeystroke(LoByte(w), 0);
{If the key required the
shift key down - release it}
if HiByte(w) and 1 = 1 then
SimulateKeyUp(VK_SHIFT);
fin;
fin;
{if the caps lock key was on at start, turn it back on}
if flag then
SimulateKeystroke(VK_CAPITAL, 0);
fin;

procedimiento TForm1.Button1Click (Sender: TObject);
comenzar
{Toggle the cap lock}
SimulateKeystroke(VK_CAPITAL, 0);
fin;

procedimiento TForm1.Button2Click (Sender: TObject);
comenzar
{Capture the entire screen to the clipboard}
{by simulating pressing the PrintScreen key}
SimulateKeystroke(VK_SNAPSHOT, 0);
fin;

procedimiento TForm1.Button3Click (Sender: TObject);
comenzar
{Capture the active window to the clipboard}
{by simulating pressing the PrintScreen key}
SimulateKeystroke(VK_SNAPSHOT, 1);
fin;

procedimiento TForm1.Button4Click (Sender: TObject);
comenzar
{Set the focus to a window (edit control) and send it a string}
Aplicación.Procesos de proceso;
Edit1.SetFocus;
SendKeys("Delphi Is RAD!");
fin;
-------------------------------------------------- -------------------------

Теперь мне нужно отследить нажатие пользователя на кнопку клавы(например алфовитную) и обнулировать это нажатие\заместить своим.




Páginas: 1 rama entera

Foro: "Principal";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

arriba









Memoria: 0.83 MB
Tiempo: 0.042 c
1-22174
chva
2001-12-21 00:50
2002.01.08
Pausa en el trabajo


1-22239
Gayrus
2001-12-17 03:52
2002.01.08
TStatusBar


1-22204
Dmitriy (nuevo)
2001-12-13 19:37
2002.01.08
el código no crea más archivos `273 en win2000


6-22315
Marser
2001-08-01 16:04
2002.01.08
Mensaje SMS


3-21967
SklifF
2001-12-05 11:32
2002.01.08
sobre SQL





africaans albanés Arabic armenio Azerbaiyán vasco Bielorruso Bulgarian Catalán Chino (simplificado) Chino (tradicional) Croata Checo Danés Dutch Inglés Estonia filipina Finnish Francés
gallego georgiano Alemán Griego criollo haitiano hebreo hindi Húngaro islandés Indonesian irlandés Italiana Japonés Korean letón lituano macedonio Malay maltés Noruego
persa polaco Portuguese rumano Ruso Serbio Slovak Esloveno Español swahili Sueco Thai turco ucranio Urdu vietnamita galés yídish bengalí bosnio
cebuano esperanto gujarati hausa hmong igbo javanés kannada khmer lao latín maorí marathi mongol nepali punjabi somalí Tamil telugu yoruba
zulú
Английский Francés Alemán Italiano portugués Русский Español