الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل يمكنك مساعدتي في GetKeyLayout

مغلق
بدأه besher_msallaty في 24 مارس 2003 · 5 رد · 1,025 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله و بركاته

أريد تصميم برنامج يعمل على إصدار صوت معين(المفتاح الحالي) عند الضغط على أي زر في لوحة المفاتيح (لمساعدة المكفوفين) و أعلم أن التعليمات الازمة لذلك هي API و غالبا ستكون Getkeylayout و getkeyboardstate و لكن تواجهني صعوبة كبيرة للتنفيذ و أريد المساعدة و لكم الأجر و الثواب إن شاء الله علما أن البرنامج سيتلقى حالة المفاتيح وهو في وضع MInimize و العل سيكون على ال Office Word

و السلام عليكم(f)

#2

السلام عليكم ....

أنا عندي بفس الفكرة ....وأبدء بتسجيل فعلي لصوتي.......

ولكــن لأستخدامها ..في برنامج معين ...مثل أصدار صوت ..عند ظهور

شاشة من برنامي ...الذي يعمل عليه المكفوف ......

وأن شاء الله أساعدك ....بالقريب ......

أخــــــــــــوك..:cool:

#3
اقتباس
وضع MInimize و العل سيكون على ال  

ماالذي قصدته باضيط أخي

لكن هناك عدة طرق للحل لكن أفضلها سيكون عن طريق hook Keybord

أنا للاسف ليس الخبرة الكافية في هذه التقنية (مجتهد)

حيث أنك تضمن من خلال هذه التقنية عمل برنامجك على كل إصدارات الويندوز

بالنسبة لGetkeylayout

فهي ومصرح عنها في msdn help إن لم أكن مخطا(وهذا مانحاول عمله في دورة الApi)

على كل سمعت عن مشروع مماثل قد نفذه شاب عن طريق word عبر مكروات طبعا

بالتوفيق إن شاء الله أخي فهو عمل نبيل ماتقوم به

#4

شكرا لمجرد إهتمامكم و أرجو المزيد

#5

كما سبق وقلت إن أفضل طريقة هي hook key bord

تأكد أخي بشر أنه ليس من عادتنا أن نبخل بما لدينا لاخواننا

هناك function تدعى wh_keyboard

للتعرف على

الكلام من

win pen api

WM_KEYDOWN

The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.

WM_KEYDOWN

nVirtKey = (int) wParam; // virtual-key code

lKeyData = lParam; // key data

Parameters

nVirtKey

Value of wParam . Specifies the virtual-key code of the nonsystem key.

lKeyData

Value of lParam . Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table:

Value Description

0 - 15 Specifies the repeat count. The value is the number of times the keystroke is repeated as a result of the user holding down the key.

16 - 23 Specifies the scan code. The value depends on the original equipment manufacturer (OEM).

24 Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.

25 - 28 Reserved; do not use.

29 Specifies the context code. The value is always 0 for a WM_KEYDOWN message.

30 Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.

31 Specifies the transition state. The value is always 0 for a WM_KEYDOWN message.

Return Values

An application should return zero if it processes this message.

Default Action

If the F10 key is pressed, the DefWindowProc function sets an internal flag. When DefWindowProc receives the WM_KEYUP message, the function checks whether the internal flag is set and, if so, sends a WM_SYSCOMMAND message to the top-level window. The wParam parameter of the message is set to SC_KEYMENU.

Remarks

Because of the autorepeat feature, more than one WM_KEYDOWN message may be posted before a WM_KEYUP message is posted. The previous key state (bit 30) can be used to determine whether the WM_KEYDOWN message indicates the first down transition or a repeated down transition.

For enhanced 101- and 102-key keyboards, extended keys are the right ALT and CTRL keys on the main section of the keyboard; the INS , DEL , HOME , END , PAGE UP , PAGE DOWN and arrow keys in the clusters to the left of the numeric keypad; and the divide (/) and ENTER keys in the numeric keypad. Other keyboards may support the extended-key bit in the lKeyData parameter.

See Also

DefWindowProc , WM_CHAR , WM_KEYUP , WM_SYSCOMMAND

GetMessage

The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure. This function can retrieve both messages associated with a specified window and thread messages posted via the PostThreadMessage function. The function retrieves messages that lie within a specified range of message values. GetMessage does not retrieve messages for windows that belong to other threads or applications.

BOOL GetMessage(

LPMSG lpMsg , // address of structure with message

HWND hWnd , // handle of window

UINT wMsgFilterMin , // first message

UINT wMsgFilterMax // last message

);

Parameters

lpMsg

Points to an MSG structure that receives message information from the thread's message queue.

hWnd

Identifies the window whose messages are to be retrieved. One value has a special meaning:

Value Meaning

NULL GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread via PostThreadMessage .

wMsgFilterMin

Specifies the integer value of the lowest message value to be retrieved.

wMsgFilterMax

Specifies the integer value of the highest message value to be retrieved.

Return Values

If the function retrieves a message other than WM_QUIT, the return value is nonzero.

If the function retrieves the WM_QUIT message, the return value is zero.

If there is an error, the return value is -1. For example, the function fails if hWnd is an invalid window handle.

Remarks

An application typically uses the return value to determine whether to end the main message loop and exit the program.

The GetMessage function only retrieves messages associated with the window identified by the hWnd parameter or any of its children as specified by the IsChild function, and within the range of message values given by the wMsgFilterMin and wMsgFilterMax parameters. If hWnd is NULL, GetMessage retrieves messages for any window that belongs to the calling thread and thread messages posted to the calling thread via PostThreadMessage . GetMessage does not retrieve messages for windows that belong to other threads nor for threads other than the calling thread. Thread messages, posted by the PostThreadmessage function, have a message hWnd value of NULL. If wMsgFilterMin and wMsgFilterMax are both zero, GetMessage returns all available messages (that is, no range filtering is performed).

The WM_KEYFIRST and WM_KEYLAST constants can be used as filter values to retrieve all messages related to keyboard input; the WM_MOUSEFIRST and WM_MOUSELAST constants can be used to retrieve all mouse messages. If the wMsgFilterMin and wMsgFilterMax parameters are both zero, the GetMessage function returns all available messages (that is, without performing any filtering).

GetMessage does not remove WM_PAINT messages from the queue. The messages remain in the queue until processed.

Note that the function return value can be TRUE, FALSE, or -1. Thus, you should avoid code like this:

while (GetMessage( lpMsg, hWnd, 0, 0)) ...

The possibility of a -1 return value means that such code can lead to fatal application errors.

See Also

IsChild , MSG , PeekMessage , PostMessage , PostThreadMessage , WaitMessage

أخي اتكل على الله عز وجل فالموضوع جميل جدا

أرجو أن أكون قد أفدت بشئ ما

كما أنه بالنسبة للصوتيات هناك شرح في كتاب mastring6

أعتقد أنك قد قرأته

#6

شكرا جزيلا

هذا الموضوع مغلق.

مواضيع مشابهة