21

Re: WinAPI Дізнатися розкладку клавіатури

-=ЮрА=- написав:

Betterthanyou я написав бо незрозумів чому ти писав про це

я пояснював raxp чому я використовую проміжні змінні

raxp написав:

У моєму коді взагалі немає проміжних змінних. Різницю відчуваєте?

22 Востаннє редагувалося raxp (02.05.2016 17:36:48)

Re: WinAPI Дізнатися розкладку клавіатури

А навiщо ви менi це пояснюэте?  )

Наступне питання: для якого вікна ви намагаєтеся визначити розкладку? Ні, мова не про те яке поверх, а який - тип вікна. Так, є велика різниця. Наприклад для консольного вікна, причому чужого, не все так просто. В XP була недокументована функа GetConsoleLangId з kernel32. А починаючи з Vista слід використовувати - conhost.

23

Re: WinAPI Дізнатися розкладку клавіатури

Betterthanyou тримай повноцінний проект для відстеження розкладки(заміни тільки hWND на ForegroundWindow)

Post's attachments

mfcHKL_proj.zip 26.45 kb, 220 downloads since 2016-05-02 

Подякували: Betterthanyou, leofun012

24

Re: WinAPI Дізнатися розкладку клавіатури

Тут ехе

Post's attachments

mfcHKL_exe..zip 4.36 kb, 253 downloads since 2016-05-02 

Подякували: Betterthanyou1

25 Востаннє редагувалося -=ЮрА=- (02.05.2016 17:45:03)

Re: WinAPI Дізнатися розкладку клавіатури

Тут скріни

Прихований текст

(дідько, як робити мульти аттач?!)

Post's attachments

eng.png 179.34 kb, 173 downloads since 2016-05-02 

Подякували: leofun011

26

Re: WinAPI Дізнатися розкладку клавіатури

UKR

Post's attachments

UKR.png 182.15 kb, 131 downloads since 2016-05-02 

27

Re: WinAPI Дізнатися розкладку клавіатури

Додадкова інфа тут https://msdn.microsoft.com/ru-ru/librar … s.85).aspx

28 Востаннє редагувалося Betterthanyou (02.05.2016 19:35:49)

Re: WinAPI Дізнатися розкладку клавіатури

-=ЮрА=- написав:

Betterthanyou тримай повноцінний проект для відстеження розкладки(заміни тільки hWND на ForegroundWindow)

Навіть ваш повноцінний проект для відстеження розкладки не справився як слід з завданням(нижче напишу чому) але проблему нарешті вирішено, ви у проекті використали macro LOWORD він якраз і нормально працює

А тепер скрін з проблемою
http://replace.org.ua/misc.php?action=pun_attachment&item=1257&download=0

raxp написав:

для якого вікна ви намагаєтеся визначити розкладку?

Звичайне віндовське вікно я тестував у Internet Explorer, провіднику, для роб. стола кругом однаковий результат


Як я писав раніше скорій за все це щось з моєю ОС

Post's attachments

Untitled.png 3.29 kb, 143 downloads since 2016-05-02 

29 Востаннє редагувалося raxp (02.05.2016 19:54:22)

Re: WinAPI Дізнатися розкладку клавіатури

LoWord() виділяє з 32-бітового целочисельного значення молодше слово. У мене бралося старше, а молодше викидалось через >>. Тади нема проблем )

Прихований текст
 form1.caption:= format('%xh',
                        [LOWORD(GetKeyboardLayout(
                        GetWindowThreadProcessId(
                        GetForegroundWindow, nil)))
                        ])

або по маске:

 form1.caption:= format('%xh',
                        [GetKeyboardLayout(
                        GetWindowThreadProcessId(
                        GetForegroundWindow, nil))) and $00ffff
                        ])

нижче напишу чому
...
Як я писав раніше скорій за все це щось з моєю ОС

за посиланням Юри і так ясно, в ОС є фішка з використанням головної мови при перемиканні розкладок. Тут ситуація як така розписана - http://antontitov.com/2010/02/06/keyboa … windows-7/

30

Re: WinAPI Дізнатися розкладку клавіатури

Betterthanyou коротше перепиши мою функцію ось так(так буде надійніше)

#define WM_UPDATEDATA WM_USER + 100
void CMfcHKLDlg::NotifyThread(PVOID param){
    DWORD dwPID, dwTID;
    char pszHKL[1024];
    CMfcHKLDlg * pThis = NULL;
    if( pThis = (CMfcHKLDlg *)param )
    {
        while( TRUE )
        {
            pThis->SendMessage(WM_UPDATEDATA, TRUE , 0);
            dwTID = GetWindowThreadProcessId(pThis->m_hWnd, &dwPID);
            pThis->m_HKL = (DWORD)GetKeyboardLayout(dwTID);
            if( GetLocaleInfo(MAKELCID(((UINT)pThis->m_HKL & 0xffffffff), SORT_DEFAULT), LOCALE_SLANGUAGE, pszHKL, 1024) )
                pThis->m_Info = pszHKL;
            pThis->SendMessage(WM_UPDATEDATA, FALSE, 0);
            Sleep(10);
        }
    }
}
Post's attachments

Untitled.png 166.88 kb, 146 downloads since 2016-05-02 

Подякували: Betterthanyou, leofun012

31 Востаннє редагувалося -=ЮрА=- (02.05.2016 20:00:07)

Re: WinAPI Дізнатися розкладку клавіатури

Прихований текст

LoWord() виділяє з 32-бітового целочисельного значення молодше слово. У мене бралося старше, а молодше викидалось через >>. Тади нема проблем )

- та я там трішки напартачив бо узяв LO(HI) WORD тобто 2 байти а специфікатори лежать то у WORD-і

ЦЕ WORD = HIBYTE + LOBYTE
+-------------------------+-------------------------+
|     SubLanguage ID      |   Primary Language ID   |
+-------------------------+-------------------------+
15                    10  9                         0   bit

тобто потрібно узяти частинку HKL і накинути на неї HIBYTE() та LOBYTE я давно з язиковим АПІ не працював тому стратив трошки

32

Re: WinAPI Дізнатися розкладку клавіатури

Новий ехе тут

Post's attachments

mfcHKL2.zip 4.38 kb, 224 downloads since 2016-05-02 

33 Востаннє редагувалося Betterthanyou (02.05.2016 20:33:38)

Re: WinAPI Дізнатися розкладку клавіатури

raxp написав:

Тут ситуація як така розписана - http://antontitov.com/2010/02/06/keyboa … in-windows

Я такого не робив, в мене кожна мова представлена як окрема
http://replace.org.ua/misc.php?action=pun_attachment&item=1260&download=0

-=ЮрА=- написав:

Betterthanyou коротше перепиши мою функцію ось так(так буде надійніше)

Так, допомогло

Post's attachments

Untitled.png 24.74 kb, 156 downloads since 2016-05-02 

34

Re: WinAPI Дізнатися розкладку клавіатури

Betterthanyou тільки що перевірив на 10-ці х64, все добре

Post's attachments

Untitled (2).png 620.72 kb, 176 downloads since 2016-05-02 

Подякували: Betterthanyou1

35

Re: WinAPI Дізнатися розкладку клавіатури

То й добре )