2011年10月28日 Windows XP(以降?)で外字ファイルを外部から取り込むために... [長年日記]
_ WIN32APIのenableEUDC()を使ったプログラムを作った
私にしては非常に珍しく、Windows(cygwin)ネタ。
enableEUDC.c
OS(Windows)の外字使用を開始するコマンド。
#include <windows.h>
typedef BOOL(WINAPI * ENABLEEUDC) (BOOL);
int main()
{
    ENABLEEUDC lpfnEnableEUDC;
    HINSTANCE hDll;
    BOOL bRet;
    /* EnableEUDCのアドレスの取得 */
    hDll = LoadLibrary("GDI32.DLL");
    if (hDll == NULL)
        exit(1);
    lpfnEnableEUDC = (ENABLEEUDC) GetProcAddress(hDll, "EnableEUDC");
    if (lpfnEnableEUDC == NULL) {
        FreeLibrary(hDll);
        exit(1);
    }
    // 外字使用の開始
    bRet = lpfnEnableEUDC(TRUE);
    if (bRet == FALSE) {
        FreeLibrary(hDll);
        exit(1);
    }
    FreeLibrary(hDll);
    exit(0);
}
disableEUDC.c
OS(Windows)の外字使用を停止するコマンド。
#include <windows.h>
typedef BOOL(WINAPI * ENABLEEUDC) (BOOL);
int main()
{
    ENABLEEUDC lpfnEnableEUDC;
    HINSTANCE hDll;
    BOOL bRet;
    /* EnableEUDCのアドレスの取得 */
    hDll = LoadLibrary("GDI32.DLL");
    if (hDll == NULL)
        exit(1);
    lpfnEnableEUDC = (ENABLEEUDC) GetProcAddress(hDll, "EnableEUDC");
    if (lpfnEnableEUDC == NULL) {
        FreeLibrary(hDll);
        exit(1);
    }
    /* 外字使用の中止 */
    bRet = lpfnEnableEUDC(FALSE);
    if (bRet == FALSE) {
        FreeLibrary(hDll);
        exit(1);
    }
    FreeLibrary(hDll);
    exit(0);
}
Makefile
CFLAGS=-v -O -mno-cygwin -mwindows
##LDFLAGS=-lgdi32
LDFLAGS=
all:    enableEUDC.exe disableEUDC.exe
enableEUDC.exe: enableEUDC.c
        cc $(CFLAGS) $(LDFLAGS) -o enableEUDC.exe enableEUDC.c
disableEUDC.exe:        disableEUDC.c
        cc $(CFLAGS) $(LDFLAGS) -o disableEUDC.exe disableEUDC.c
使い方
コマンドプロンプトをadministrator権限で起動し、
> disableEUDC > del C:\WINDOWS\FONTS\Eudc.TTE > copy Eudc.TTE C:\WINDOWS\FONTS\Eudc.TTE > enableEUDC
[ツッコミを入れる]