Получение текущей раскладки
Мне нужно получить текущую раскладку, этот код выводит всё правильно, но не выводит новую/переключённую раскладку
#include <iostream>
#include <Windows.h>
int main()
{
while (1)
{
std::cout << GetKeyboardLayout(GetCurrentThreadId());
Sleep(2000);
}
}
//en 04090409
//ru 04190419
Ответы (1 шт):
Автор решения: nuub228
→ Ссылка
Я нашёл решение и пришёл к GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL))
она выводит ID раскладки активного на данный момент окна, чтобы он работал, нужно в Visual Studio переключить с (/SUBSYSTEM:CONSOLE) на Windows (/SUBSYSTEM:WINDOWS) дальше нужно вместо
int main(){
//Ваша программа
}
использовать
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow) {
//Ваша программа
}
лично эта main функция выключает всё GUI
все другие способы не работают с консольным приложением
Пример:
#include <windows.h>
#include <fstream>
using namespace std;
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
while (1) {
Sleep(2000);
//Задержка на 2сек
ofstream fout;
fout.open("C:\\Users\\nuub228\\Desktop\\file.txt", ios::app);
//открытие файла в режиме записи
fout << GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL));
//собственно запись ID раскладки
fout.close();
//закрытие файла
}
}
//ID раскладок
//ENG = 04090409
//RU == 04190419