PDA

View Full Version : سوال: نياز باکدي که با طور مجازی كلید P را بدهد



akar_program
جمعه 23 اردیبهشت 1390, 22:32 عصر
سلام اومیدوارم حال همه‌ خوب باشد نياز باکدي دارم که با طور مجازی كلید P را فشار بدهد لطفا رهنمای كنید

tdkhakpur
شنبه 24 اردیبهشت 1390, 01:09 صبح
با کد


SendMessage( Edit1.Handle, WM_CHAR, ord('p'), 0 );

میتونید فشار کلید (تایپ)رو برای مثلا edit1 انجام بدید البته پیغام اصلی wm_kedownو up هست.

یوسف زالی
شنبه 24 اردیبهشت 1390, 09:56 صبح
چرا این قدر سخت جواب می دید؟
keybd_event(Ord('P'), 0, 0, 0)

akar_program
شنبه 24 اردیبهشت 1390, 18:35 عصر
ممنون بس چطور میشه‌ كاركتر P از /تغیر دریافت كنم

mbshareat
یک شنبه 25 اردیبهشت 1390, 00:27 صبح
با سلام
من کد جناب yousijoon و جناب tdkhakpur رو توی رویداد کلیک دکمه گذاشتم.KeyPreview رو هم True کردم. فقط کد yousijoon در رویداد FormKeyDown جواب داد.

یوسف زالی
یک شنبه 25 اردیبهشت 1390, 08:13 صبح
اینو امتحان کن:
keybd_event(Ord(InputCharacter), 0, 0, 0) ; //InputCharacter motaghayerete az noe Char

akar_program
یک شنبه 25 اردیبهشت 1390, 18:47 عصر
سلام جواب نداد

یوسف زالی
دوشنبه 26 اردیبهشت 1390, 08:18 صبح
بگو دقیقا چی کار میخوای کنی که کدش رو بذارم

M_Maskout
دوشنبه 26 اردیبهشت 1390, 08:40 صبح
سلام
از یونیت ضمیمه استفاده کنید.
تو این یونیت، دستور SendKey در ویژوال بیسیک شبیه سازی شده و حتی بهتر از اون کار می‌کنه.
با استفاده از این یونیت می‌تونید فشرده شدن کلیدها رو بصورت زیر شبیه سازی کنید.


1. SendKeys('{PGDN}', True);
2. SendKeys('i', False);
3. SendKeys('P', True);
4. SendKeys({left 6}, True);
5. SendKeys('+abc', True);


تو این یونیت دو رویه وجود داره:
SendKeys(KeyString, Wait);
این روتین (دستور) یک رشته از نام کلیدها در KeyString دریافت می‌کنه و به کنترل فوکوس شده در پنجره‌ی فعال می‌فرسته. و مقدار بولی Wait تعیین می‌کنه که برنامه تا زمان پردازش پیام ارسال کلید منتظر بمونه.
مقدار پارامتر Wait در زمانی که کلید ارسال شده قرار هست به عنوان یه Shortcut عمل کنه (مثلاً یه دستور منویی رو اجرا کنه) باید True باشه. در غیر اینصورت بسته به سرعت پردازش، ممکنه کلید ارسال شده هیچ کاری نکنه و یا چندتا کار رو پشت سر هم انجام بده.
نام کلیدها در پارامتر KeyString دقیقاً مطابق نام اونا تو VB هست و در متن کد یونیت آورده شده.
در مثال‌های بالا، مثال 1، یه PageDown به پنجره‌ی فعال ارسال می‌کنه. مثال 2، یه i ارسال می‌کنه و منتظر پردازش پیام ارسال کلید نمی‌مونه (اصولاً فقط به درد ارسال به یه Edit می‌خوره). مثال 3، جوابی برای تاپیک هست. مثال 4، کلید فلشی چپ رو 6 مرتبه ارسال می‌کنه و در هر مرتبه منتظر پردازش پیام ارسال کلید می‌مونه. مثال 5، کلیدهای Shift-a، ‏b و c رو ارسال می‌کنه. علامت + در مثال آخر باعث ارسال کلید Shift می‌شه:


SendKeys('abc123{left}{left}{left}def{end}456{left 6}ghi{end}789', True);



AppActivate('WindowName');
این روتین (دستور)، عنوان (Title) یه پنجره رو می‌گیره و اون رو جهت دریافت ورودی‌های کیبورد فعال می‌کنه. البته می‌تونید بجای عنوان پنجره از هندل اون استفاده کنید.
نکته: در صورت استفاده از دستور keybd_event جهت شبیه‌سازی فشرده شدن کلید (مثلاً کلید P) بصورت زیر

keybd_event(Ord('P'), 0, 0, 0)
لازمه کلید فشرده شده رو با دستوری معادل زیر، رها کنید:

keybd_event(Ord('P'),0,KEYEVENTF_KEYUP,0);

joooje
دوشنبه 26 اردیبهشت 1390, 09:43 صبح
اگه بخواهیم یه ادیت باکس و یه دکمه داشته باشیم و هر حرفی که کاربر تو ادیت باکس تایپ کرد، وقتی دکمه رو زدیم همونو به طور مجازی فشار بده
یعنی کاربر تو ادیت بنویسه y بعد دکمه رو که زدیم y رو به طور مجازی فشار بده
باید چیکار کنیم؟
آخه این keybd_event(Ord('P'), 0, 0, 0) ثابت هستف یعنی P متغیر نیست
البته نمیخوام از keybd_event(121, 0, 0, 0)استفاده کنم
ممنون

یوسف زالی
دوشنبه 26 اردیبهشت 1390, 10:04 صبح
گفتم دیگه. یه متغیر کاراکتری بگیر پرش کن بذار جای 'P'

InputCharacter = trim(edit1.text)[1]; // mishe avvalin karaktere matne edit1

keybd_event(Ord(InputCharacter), 0, 0, 0) ; //InputCharacter motaghayerete az noe Char