Главный файл исходных текстов приложения SETLOCAL приведен в листинге 4.1.
Листинг 4.1. Файл setlocal\setlocal.c
// ==================================================
// Приложение SETLOCAL
// Работа с национальными языками
//
// (С) Фролов А.В., 1996
// Email: frolov@glas.apc.org
// ==================================================
#define STRICT
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "afxres.h"
#include "setlocal.h"
HINSTANCE hInst;
char szAppName[] = "SetLocalApp";
char szAppTitle[] = "Set and Get Local Info";
// Количество установленных раскладок клавиатуры
UINT uLayouts;
// Указатель на массив идентификаторов
// раскладок клавиатуры
HKL * lpList;
// -----------------------------------------------------
// Функция WinMain
// -----------------------------------------------------
int APIENTRY
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
// Сохраняем идентификатор приложения
hInst = hInstance;
// Проверяем, не было ли это приложение запущено ранее
hWnd = FindWindow(szAppName, NULL);
if(hWnd)
{
// Если было, выдвигаем окно приложения на
// передний план
if(IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
SetForegroundWindow(hWnd);
return FALSE;
}
// Определяем количество установленных
// раскалдок клавиатуры
uLayouts = GetKeyboardLayoutList(0, NULL);
// Заказываем массив для хранения идентификаторов
// раскладок клавиатуры
lpList = malloc(uLayouts * sizeof(HKL));
// Заполнение массива идентификаторов
// раскладок клавиатуры
uLayouts = GetKeyboardLayoutList(uLayouts, lpList);
// Регистрируем класс окна
memset(&wc, 0, sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.hIconSm = LoadImage(hInst,