山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他visual C++ 2005 Express Platform SDK設定プログラム
概要
Visual C++ 2005 Expressは無料で使えるアプリケーション開発ソフトですが、Windowsアプリケーションを使うためには、Platform SDKをインストールし、幾つかの設定ファイルを自力で修正する必要があります。このソフトは、設定ファイルを自動的に修正します。
          なお、Visual C++ 2005 ExpressとPlatform SDKは、Windowsがインストールされているドライブと同一である必要があります。
使い方
特に初期設定が必要ないためインストーラをありません。
          Visual C++ 2005 Express  (http://www.microsoft.com/japan/msdn/vstudio/express/visualc/) と
          Platform SDK (http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en) をインストール後に、
          本ソフトの圧縮ファイルを任意のフォルダーに解凍しその中のvc2005inst.exeを実行してください。
          Visual C++ 2005 Express と Platform SDKはisoファイルで供給されているため、CD-Rに焼くかalcohol(http://www.free-downloads.net/programs/Alcohol_52__Free_Edition)などの仮想CDソフトを用いてマウントします。
          本ソフトを用いずに設定ファイルを修正するには、下記のサイトを参考にしてください。
          Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
          本ソフトでは、手順3から手順5までを自動化しています。
ソース・実行ファイルのダウンロード
ソースファイル等
コンパイルする場合は、DLLを使わない設定にしてください。(Visual C++ 2005 Expressがインストールされていない環境で実行する必要があるため。)
vc2005inst.cpp
#include <windows.h>
#include <shlobj.h>
#include <stdio.h>
#include <tchar.h>
void swap_file(TCHAR* dtc,TCHAR* src);
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst,TCHAR* lpszCmdLine, int nCmdShow){
        TCHAR psdk_pass[MAX_PATH];
        TCHAR vc8_pass[MAX_PATH];
        TCHAR src_pass[MAX_PATH];
        TCHAR dtc_pass[MAX_PATH];
        TCHAR buf[512]; //      ファイル入力バッファ
        FILE* src_fp;
        FILE* dtc_fp;
        if(SHGetFolderPath(0,CSIDL_PROGRAM_FILES ,0,SHGFP_TYPE_CURRENT,psdk_pass)==0){
                _tcscpy_s(vc8_pass,sizeof(vc8_pass)/sizeof(TCHAR),psdk_pass);
                _tcscat_s(psdk_pass,sizeof(psdk_pass)/sizeof(TCHAR),TEXT("\\Microsoft Platform SDK"));
                _tcscat_s(vc8_pass,sizeof(vc8_pass)/sizeof(TCHAR),TEXT("\\Microsoft Visual Studio 8"));
                
//              vc\vcpackages\VCProjectEngine.dll.express.configを修正
                _stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\vc\\vcpackages\\VCProjectEngine.dll.express.config"),vc8_pass);
                _stprintf_s(dtc_pass,sizeof(dtc_pass)/sizeof(TCHAR),TEXT("%s\\vc\\vcpackages\\VCProjectEngine.dll.express.config.bak"),vc8_pass);
                if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
                        MessageBox(0,TEXT("VCProjectEngine.dll.express.configファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
                        return 1;
                }
                _tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
                while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
                        TCHAR* p;
                        if((p=_tcsstr(buf,TEXT("Include=\""))) != 0){
                                TCHAR* t;
                                if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\include"))) != 0){
                                        MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
                                        return 2;
                                }else{
                                        buf[ _tcslen(buf) -2 ] = _T('\0');
                                        _ftprintf_s(dtc_fp,TEXT("%s;%s\\include\"\n"),buf,psdk_pass);
                                }
                        }else   if((p=_tcsstr(buf,TEXT("Library=\""))) != 0){
                                TCHAR* t;
                                if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\lib"))) != 0){
                                        MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
                                        return 2;
                                }else{
                                        buf[ _tcslen(buf) -2 ] = _T('\0');
                                        _ftprintf_s(dtc_fp,TEXT("%s;%s\\lib\"\n"),buf,psdk_pass);
                                }
                        }else   if((p=_tcsstr(buf,TEXT("Path=\""))) != 0){
                                TCHAR* t;
                                if((t=_tcsstr(p,TEXT("Program Files\\Microsoft Platform SDK\\bin"))) != 0){
                                        MessageBox(0,TEXT("すでにVCProjectEngine.dll.express.configが変更されています"),TEXT("エラー"),MB_OK);
                                        return 2;
                                }else{
                                        buf[ _tcslen(buf) -2 ] = _T('\0');
                                        _ftprintf_s(dtc_fp,TEXT("%s;%s\\bin\"\n"),buf,psdk_pass);
                                }
                        }else
                                _fputts(buf,dtc_fp);
                }
                fclose(src_fp);
                fclose(dtc_fp);
                swap_file(src_pass,dtc_pass);
//              VC\VCProjectDefaults\corewin_express.vspropsを修正
                _stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCProjectDefaults\\corewin_express.vsprops"),vc8_pass);
                _stprintf_s(dtc_pass,sizeof(dtc_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCProjectDefaults\\corewin_express.vsprops.bak"),vc8_pass);
                if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
                        MessageBox(0,TEXT("corewin_express.vspropsファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
                        return 1;
                }
                _tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
                while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
                        TCHAR* p;
                        if((p=_tcsstr(buf,TEXT("AdditionalDependencies=\"kernel32.lib\" />"))) != 0){
                                TCHAR* t;
                                if((t=_tcsstr(p,TEXT("user32.lib"))) != 0){
                                        MessageBox(0,TEXT("すでにcorewin_express.vspropsが変更されています"),TEXT("エラー"),MB_OK);
                                        return 2;
                                }else{
                                        buf[ _tcslen(buf) -5 ] = _T('\0');
                                        _tcscat_s(buf,sizeof(buf)/sizeof(TCHAR),TEXT(" user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib\" />\n"));
                                }
                        }
                        _fputts(buf,dtc_fp);
                }
                fclose(src_fp);
                fclose(dtc_fp);
                swap_file(src_pass,dtc_pass);
//              \VC\VCWizards\AppWiz\Generic\Application\html\1041\AppSettings.htm を修正
                _stprintf_s(src_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCWizards\\AppWiz\\Generic\\Application\\html\\1041\\AppSettings.htm"),vc8_pass);
                _stprintf_s(dtc_pass,sizeof(src_pass)/sizeof(TCHAR),TEXT("%s\\VC\\VCWizards\\AppWiz\\Generic\\Application\\html\\1041\\AppSettings.htm.bak"),vc8_pass);
                if(_tfopen_s(&src_fp,src_pass,TEXT("r"))){
                        MessageBox(0,TEXT("AppSettings.htmファイルを開けませんでした。\nVisual C++ 2005 Expressが正常にインストールされていないか、違うドライブにインストールされている可能性があります。"),TEXT("エラー"),MB_OK);
                        return 1;
                }
                int f=0;
                _tfopen_s(&dtc_fp,dtc_pass,TEXT("w"));
                while(_fgetts(buf,sizeof(buf)/sizeof(TCHAR),src_fp)){
                        TCHAR* p;
                        if(_tcsstr(buf,TEXT("window.external.FindSymbol(\"IS_EXPRESS_SKU\")"))){
                                f=1;
                        }
                        if(f){
                                if((p=_tcsstr(buf,TEXT("WIN_APP.disabled = true;"))) != 0){
                                        if(buf+2 != p){
                                                MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
                                                return 2;
                                        }else{
                                                _ftprintf(dtc_fp,TEXT("//"));
                                        }
                                }
                                if((p=_tcsstr(buf,TEXT("WIN_APP_LABEL.disabled = true;"))) != 0){
                                        if(buf+2 != p){
                                                MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
                                                return 2;
                                        }else{
                                                _ftprintf(dtc_fp,TEXT("//"));
                                        }
                                }
                                if((p=_tcsstr(buf,TEXT("DLL_APP.disabled = true;"))) != 0){
                                        if(buf+2 != p){
                                                MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
                                                return 2;
                                        }else{
                                                _ftprintf(dtc_fp,TEXT("//"));
                                        }
                                }
                                if((p=_tcsstr(buf,TEXT("DLL_APP_LABEL.disabled = true;"))) != 0){
                                        if(buf+2 != p){
                                                MessageBox(0,TEXT("すでにAppSettings.htmが変更されています"),TEXT("エラー"),MB_OK);
                                                return 2;
                                        }else{
                                                _ftprintf(dtc_fp,TEXT("//"));
                                        }
                                }
                        }
                        _fputts(buf,dtc_fp);
                }
                fclose(src_fp);
                fclose(dtc_fp);
                swap_file(src_pass,dtc_pass);
                MessageBox(0,TEXT("正常に設定されました。"),TEXT("メッセージ"),MB_OK);
        }
        return 0;
}
//      ファイルの中身を交換する。
void swap_file(TCHAR* dtc,TCHAR* src){
        TCHAR temp[MAX_PATH];
        _stprintf_s(temp,sizeof(temp)/sizeof(TCHAR),TEXT("%s$$$$"),dtc);
        MoveFile(dtc,temp);
        MoveFile(src,dtc);
        MoveFile(temp,src);
}
resource.h
#define APL_NAME "Visual C++ 2005 Express Platform SDK設定プログラム"
#define APL_NAME0 "Visual C++ 2005 Express Platform SDK設定プログラム"
#define FILE_VERSION 1,0,0,0
#define VERSION_NUMBER  "1, 0, 0, 0"
#define VERSION_NUMBER0 "1, 0, 0, 0\0"
#define COPYRIGHT "Copyright (C) 2007/11/24"
#define COPYRIGHT0 "Copyright (C) 2007/11/24\0"
#define DESCRIPTION  "山忠ソフト"
#define DESCRIPTION0  "山忠ソフト\0"
#define APL_VER "Visual C++ 2005 Express Platform SDK設定プログラム  Version  1, 0, 0, 0"
resource.rc
#include <windows.h>
#include "resource.h"
//--------------------
//  ヴァージョン情報
//--------------------
VS_VERSION_INFO VERSIONINFO
 FILEVERSION FILE_VERSION
 PRODUCTVERSION FILE_VERSION
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x1L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "Comments", "Visual C++ 2005 Express Platform SDK設定プログラム\0"
            VALUE "CompanyName",DESCRIPTION0
            VALUE "FileDescription", "Visual C++ 2005 Express Platform SDK設定プログラム\0"
            VALUE "FileVersion", VERSION_NUMBER0 
            VALUE "InternalName", "\0"
            VALUE "LegalCopyright", COPYRIGHT0
            VALUE "OriginalFilename", "vc2005inst.exe\0"
            VALUE "ProductName", APL_NAME0
            VALUE "ProductVersion",  VERSION_NUMBER0 
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation",0x0411, 0x03A4 
    END
END
