トップ «前の日記(2011年10月20日) 最新 次の日記(2011年10月30日)» 編集

Masa's blog

検索キーワード:

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