Quantcast
Channel: Сообщество PHP DevelStudio - среда разработки программ
Viewing all articles
Browse latest Browse all 6336

FFI - Смена - получения раскаладки ?

$
0
0
Собственно, для чего это я сейчас за 8 минут настругал ?
А для того что бы проучить тут некоторых на фоурме, и показать что не надо все пихать в dll

PHP код:

define('KLF_ACTIVATE'0x00000001);
define('ENGLISH''00000409');
define('RUSSIAN''00000419');
function 
Infs() {
    static 
$a;
    if(
$a===null)
        
$a = new ffi("
                [lib='User32.dll']
                int GetForegroundWindow();
                DWORD GetWindowThreadProcessId(int hWnd, int lpdwProcessId);
                int GetKeyboardLayout(DWORD idThread);
                int LoadKeyboardLayoutA(char *pwszKLID, int Flags);
                int ActivateKeyboardLayout(int hkl, int Flags);
        "
);
    return 
$a;
}

function 
GetNameLayout($i) {
   
$Layout = array(0x409 => 'English',  0x419 => 'Русский');
   
$Layout $Layout[$i];
   return 
$Layout;
}

function 
GetActiveLayout() {
    
$h Infs();
    return (
$h->GetKeyboardLayout($h->GetWindowThreadProcessId($h->GetForegroundWindow(), null)) >> 0x10);
}

function 
GetMyActiveLayout() {
    return (
Infs()->GetKeyboardLayout(0) >> 0x10);
}

function 
SetLayout($Layout) {
    
Infs()->ActivateKeyboardLayout(Infs()->LoadKeyboardLayoutA($Layout0), KLF_ACTIVATE);
}

function 
SetMyActiveLayout($Layout) {
    
$h Infs();
    
sendMessage($h->GetForegroundWindow(), 0x0050,1$h->LoadKeyboardLayoutA($Layout0));


Пример использования
PHP код:

// Получаем системную расклдку
$Info['SystemKeyCodeLayout'] = GetActiveLayout();
$Info['SystemNameCodeLayout'] = GetNameLayout($Info['SystemKeyCodeLayout']);

// Получаем нашу раскладку программы
$Info['MyKeyCodeLayout'] = GetMyActiveLayout();
$Info['MyNameCodeLayout'] = GetNameLayout($Info['MyKeyCodeLayout']);

// Устанавливем системную раскалдку в зависимости от той что у нас стоит
$lang = ($Info['SystemNameCodeLayout'] == 'English') ? RUSSIAN ENGLISH;
SetLayout($lang);

// Устанавливем раскалдку в нашей программе, в зависимости от той что у нас стоит
$lang = ($Info['MyNameCodeLayout'] == 'English') ? RUSSIAN ENGLISH;
SetMyActiveLayout($lang);


// И уснова узнаем что у нас там

// Получаем системную расклдку
$Info['Result']['SystemKeyCodeLayout'] = GetActiveLayout();
$Info['Result']['SystemNameCodeLayout'] = GetNameLayout($Info['Result']['SystemKeyCodeLayout']);

// Получаем нашу раскладку программы
$Info['Result']['MyKeyCodeLayout'] = GetMyActiveLayout();
$Info['Result']['MyNameCodeLayout'] = GetNameLayout($Info['Result']['MyKeyCodeLayout']);


pre($Info); // Выводим 


Viewing all articles
Browse latest Browse all 6336

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>