منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "Main";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

إلى

كيف ترسل رسالة إلى النظام تفيد بأن المفتاح مضغوط؟ البحث عن فروع مماثلة


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 и
отправляет в него строку.
على سبيل المثال:

procedure SimulateKeyDown(Key : byte);
بدأ
keybd_event(Key, 0, 0, 0);
الغاية؛

procedure SimulateKeyUp(Key : byte);
بدأ
keybd_event(Key, 0, KEYEVENTF_KEYUP, 0);
الغاية؛

procedure SimulateKeystroke(Key : byte; extra : DWORD);
بدأ
keybd_event(Key,extra,0,0);
keybd_event(Key,extra,KEYEVENTF_KEYUP,0);
الغاية؛

procedure SendKeys(s : string);
var i : integer;
flag : bool;
w : word;
بدأ
{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);
بالنسبة إلى i: = 1 to Length (s) do
بدأ
w := VkKeyScan(s[i]);
{If there is not an error in the key translation}
if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then
بدأ
{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);
الغاية؛
الغاية؛
{if the caps lock key was on at start, turn it back on}
if flag then
SimulateKeystroke(VK_CAPITAL, 0);
الغاية؛

الإجراء TForm1.Button1Click (المرسل: TObject) ؛
بدأ
{Toggle the cap lock}
SimulateKeystroke(VK_CAPITAL, 0);
الغاية؛

الإجراء TForm1.Button2Click (المرسل: TObject) ؛
بدأ
{Capture the entire screen to the clipboard}
{by simulating pressing the PrintScreen key}
SimulateKeystroke(VK_SNAPSHOT, 0);
الغاية؛

الإجراء TForm1.Button3Click (المرسل: TObject) ؛
بدأ
{Capture the active window to the clipboard}
{by simulating pressing the PrintScreen key}
SimulateKeystroke(VK_SNAPSHOT, 1);
الغاية؛

الإجراء TForm1.Button4Click (المرسل: TObject) ؛
بدأ
{Set the focus to a window (edit control) and send it a string}
Application.ProcessMessages.
Edit1.SetFocus.
SendKeys("Delphi Is RAD!");
الغاية؛
-------------------------------------------------- -------------------------

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




صفحات: 1 فرع كامل

المنتدى: "Main";
الأرشيف الحالي: 2002.01.08;
تنزيل: [xml.tar.bz2];

الطابق العلوي









الذاكرة: 0.57 ميغابايت
الوقت: 0.024 ج
14-22347
roman001
2001-11-06 18:09
2002.01.08
استضافة


4-22462
ويني!
2001-11-01 19:50
2002.01.08
باستخدام BitBlt و CreateBitmap


1-22123
dimonf
2001-12-15 16:33
2002.01.08
سؤال حول


14-22415
Wetnose
2001-11-12 06:42
2002.01.08
ثيمات ويندوز إكس بي


3-21939
SAN
2001-12-04 16:01
2002.01.08
MSSQL





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch أنجليزي الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский