山本ワールド
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