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