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
[ツッコミを入れる]