delphi4arab منتديات دلفي للعرب
استخدام GetKeyboardLayoutName مع البرامج الاخرى - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : استخدام GetKeyboardLayoutName مع البرامج الاخرى (/showthread.php?tid=1835)



استخدام GetKeyboardLayoutName مع البرامج الاخرى - mourad39 - 26-03-2010

السلام عليكم و رحمة الله تعالى و بركاته
إخواني الكرام
الإجراء GetKeyboardLayoutName لا يستطيع إستخراج لغة لوحة المفاتيح في حالة الـ Forme غير نشطة بمعنى آخر عندما يكون البرنامج شغال و ننتقل إلى برنامج آخر مثل Notepad و نحاول أن نكتب نصا فإن برنامجنا لا يستطيع إستخراج اللغة التي نكتب بها في الـ Notepad أو أي برنامج آخر خارجي
هل من حل لهذه المشكلة بحيث يصبح برنامجنا يستخرج لغة لوحة المفاتيح حتى في حالة الكتابة مع برنامج آخر
للتأكد من المشكلة ضع أمر إستخراج اللغة في Timer لكي يكرر التنفيذ و نفذ البرنامج و أنتقل الى برنامج آخر و سترى أخي العزيز النتيجة
هل يوجد حل لهذه المشكلة و باك الله فيكم


استخدام GetKeyboardLayoutName مع البرامج الاخرى - TF6M - 26-03-2010

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

أخي الكريم , المسألة في ThreadId :

مثال توضيحي :

PHP كود :
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Label1
.Caption:= Format('%X',[  //  القيمة بالهيكس
                  
GetKeyboardLayout( //ThreadId لجلب لغة النظام حسب الـ apiدالة
                  
GetWindowThreadProcessId(//لجلب ThreadId من البروسس الذي نحدده
                  
GetForegroundWindow ,nil) //البروسس هوالواجهة المفعلة
                  
) And $FFFF]);//للحفاظ على أول 32 بيت
end; 
بالتوفيق ,,


استخدام GetKeyboardLayoutName مع البرامج الاخرى - mourad39 - 27-03-2010

السلام عليكم
بصراحة لا أعرف حتى كيف أشكرك أ


استخدام GetKeyboardLayoutName مع البرامج الاخرى - kachwahed - 13-08-2010

إقتباس :ضع أمر إستخراج اللغة في Timer
يمكن اقتناص الحدث WM_INPUTLANGCHANGE المخصص لذلك كما يلي:
PHP كود :
procedure WMInputLangChange(var wMsg: TMessage); message WM_INPUTLANGCHANGE; 
ثم:
PHP كود :
procedure TForm1.WMInputLangChange(var wMsg: TMessage);
begin
  ShowMessage
(Format('Keyboard Layout: %8.8x', [LoWord(GetKeyboardLayout(GetCurrentThreadId))]));
  
inherited;
end; 
هذا لن يعمل إذا وجدت مكونات التحكم (TControls) على النموذج لأنها تمتص الأحداث أيضا
لذلك يفضل إرسال الحدث إلى التطيبق (TApplication). واقتناص WM_INPUTLANGCHANGEREQUEST أفضل كما يلي:
PHP كود :
private
    
procedure WndProc(var wMsg: TMsg; var Handled: Boolean);
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  Application
.OnMessage := WndProc;
end;

procedure TForm1.WndProc(var wMsg: TMsg; var Handled: Boolean);
begin
  
if wMsg.message = WM_INPUTLANGCHANGEREQUEST then
    ShowMessage
(Format('Keyboard Layout: %8.8x', [LoWord(GetKeyboardLayout(GetCurrentThreadId))]));
end; 
...