■ Excel のツールバー ファイルの削除
/*
* delxlb.c : Excel のツールバー ファイルの削除
*
* Copyright (c) 2005 AOK.
*
* 2005.02.08 - 初版
* 2005.02.09 - 2版
*
*/
#include <windows.h>
#include <shlobj.h> /* shell32.lib */
#include <shlwapi.h> /* shlwapi.lib */
#include <stdio.h>
#include <conio.h>
#pragma comment(lib, "shlwapi.lib")
/* ごみ箱へ捨てる */
BOOL ToTrash(HWND hWnd, LPCTSTR szPath)
{
TCHAR szTarget[MAX_PATH+2];
SHFILEOPSTRUCT sfo;
lstrcpy(szTarget, szPath);
szTarget[lstrlen(szTarget)+1] = '\0';
ZeroMemory(&sfo, sizeof(SHFILEOPSTRUCT));
sfo.hwnd = hWnd;
sfo.wFunc = FO_DELETE;
sfo.fFlags = FOF_ALLOWUNDO;
sfo.pFrom = szTarget;
return (SHFileOperation(&sfo) == 0 && !sfo.fAnyOperationsAborted);
}
/* ファイルを探す */
void SearchFiles(LPCTSTR szDir, LPCTSTR lpFileName)
{
WIN32_FIND_DATA FileData;
HANDLE hSearch;
TCHAR szPath[MAX_PATH+1], c;
SetCurrentDirectory(szDir);
hSearch = FindFirstFile(lpFileName, &FileData);
if (hSearch == INVALID_HANDLE_VALUE) return;
do {
/* 見つかったときの処理 */
lstrcpy(szPath, szDir);
PathAppend(szPath, FileData.cFileName);
printf("発見!:%s\n", szPath);
printf("消すよ?(Y/N):");
fflush(stdin);
c = getche();
if (c == 'Y' || c == 'y') {
if (ToTrash(NULL, szPath))
printf("\n削除したよ\n");
else
printf("\n取り消されたか、失敗したよ\n");
}
} while (FindNextFile(hSearch, &FileData));
FindClose (hSearch);
}
/* メイン */
int main()
{
TCHAR szPath[MAX_PATH+1];
LPITEMIDLIST pidl;
if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA, &pidl))) {
SHGetPathFromIDList(pidl, szPath);
CoTaskMemFree(pidl);
PathAppend(szPath, TEXT("Microsoft\\Excel"));
SearchFiles(szPath, TEXT("*.xlb"));
}
GetWindowsDirectory(szPath, MAX_PATH);
SearchFiles(szPath, TEXT("*.xlb"));
return 0;
}