Last Update: Feb.9,2005

C Source Library

「Borland C++ 5.5」でコンパイル出来ます。

■ 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;
}