■ ttfCache, ShellIconCache などを削除
/*
* cleanup.c : ttfCache, ShellIconCache などを削除
*
* Copyright (c) 2001 AOK.
*
* 2001.6.1 - 初版
*
* ttfCache - フォント表示がおかしくなったとき消す
* ShellIconCache - アイコン表示がおかしくなったとき消す
* テンポラリファイル - 増えすぎるとディスクスペースの無駄!
*
*/
#include <windows.h>
#include <stdio.h>
/* GetLastError() のメッセージを表示*/
void ShowErrMessage(void)
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf, 0, NULL);
printf("Error: %s", lpMsgBuf);
LocalFree(lpMsgBuf);
}
/* ファイルを削除する */
void DeleteWithMessage(char *szFileName)
{
if (SetFileAttributes(szFileName, FILE_ATTRIBUTE_ARCHIVE))
{
if (!DeleteFile(szFileName))
{
ShowErrMessage();
printf("× %s を削除できません.\n\n", szFileName);
}
else
printf("○ %s を削除.\n\n", szFileName);
}
else
{
ShowErrMessage();
printf("× %s の属性変更が出来ません.\n\n", szFileName);
}
}
/* メインルーチン */
int main()
{
char szPath[MAX_PATH+1];
WIN32_FIND_DATA wfd;
HANDLE hf;
GetWindowsDirectory(szPath, MAX_PATH);
printf("--- ディレクトリの移動: %s\n", szPath);
if (SetCurrentDirectory(szPath))
{
DeleteWithMessage("ttfCache");
DeleteWithMessage("ShellIconCache");
}
else
{
ShowErrMessage();
printf("× %s に移動できません.\n\n", szPath);
}
GetTempPath(MAX_PATH, szPath);
printf("--- ディレクトリの移動: %s\n", szPath);
if (SetCurrentDirectory(szPath))
{
hf = FindFirstFile("*.?MP", &wfd);
if (hf != INVALID_HANDLE_VALUE)
{
DeleteWithMessage(wfd.cFileName);
while (FindNextFile(hf, &wfd))
DeleteWithMessage(wfd.cFileName);
FindClose(hf);
}
}
else
{
ShowErrMessage();
printf("× %s に移動できません.\n\n", szPath);
}
return 0;
}