C++Builder 6.0, C++Builder XE3、XE8、10.3               

CP/M,TASM,Turb C,Borland C++4.0で遊び,5.0のObject Windowで挫折.1997.11 C++Builderに,こりもせず,また手を出してしまいました.例によって参考書を相手に試行錯誤の連続が始まりました.
2002.3 より Ver 6.0(Prof版) を使用,デ−タベ−ス,WEB 関係のコンポ−ネントがだいぶ増えました。どうも私には宝の持ち 腐れのようです。
2011.5 よりC++BuilderXE Starter Editionが14000円で購入できるのと、C++Builder 6.0のヘルプの表示が Win7になってから極端に遅くなったので乗り換えました。問題は参考書など情報が少なく困っております。

C++Builder XE以降のソースフアイルはDebug_Build、_historyを削除すれば、10.3.3で問題なくコンパイル可能のようです。
2023.5現在、C++Builder 11 Community Editionが入手可能、Debug_Build、_historyなどを削除し、ソ−スだけにすれば、以前のプログラムも問題なくコンパイル可能のようです。



 
  XE8、  C++Builder Community Edition(10.32)

2021.10.1

  C++Builder、Delphi Community Edition(10.42) FireMonkey、VCL

2023.4.1

  C++BuilderXE3

2015.8.26

  C++Builder メモ

2018.2.8



自作プログラム
自己解凍フアイルを使用しておりましたが、最近AVAST,windows defenderなどで不正なプログラムとしてチェックされるようになり、ZIPフアイルとしております。
プログラムの起動は、解凍して出来た EXE ファイル をクリックして直接起動して下さい。 プログラムの削除は,単にファイルを削除すれば良く,レジストリ−などは関係ありません

文字の大きさ(中 120%)を合わせないとこのプログラムではウインドウと文字のバランスが崩れます。
   (注)Bugは無くすように努力しておりますが,不具合がありましても,お許しの程を !

C++Builder6.0
TrySqlite.zip
SQLite3の管理
2011.2.13(Ver1.00)
WEDIT.ZIP メモ帳で,HTMLのタグなど入れる機能,検索,
置換などもできます
2004.11.21(Ver1.15)
FMan32.zipフオルダ−,ファイルの管理用プログラムです2006.02.13(Ver2.20)
GCat.zipサムネイルを表示2006.10.08(Ver1.01)
gview.zip画像表示用でGCatに付属2007.02.08(Ver1.18)
adjNtp.zip
内蔵時計のNTPサ−バ−による補正(SNTP RFC2030)
2006.1.2(Ver1.00)
LinkChk.zipHTMLの内部リンク切れのチェック2003.06.12(Ver1.15)
HostChk.zipHost<−>IPアドレスの検索2001.10.11(Ver1.01)
autorunCDの自動起動2009.08.03
NetWork.zipネットワ−ク ドライブの割り当て,切断2004.7.11(Ver1.00)
dkanalize.zipExifの解析2010.03.26(Ver1.01)
convhex.zipオフセット計算用電卓2004.10.24(Ver1.00)
shortcut.zipショ−トカットの作成2004.11.07(Ver1.00)
iconext.zipico,exe,dll ファイルからアイコンを抽出,表示
2007.11.04(Ver1.00)
enumwin.zipEnumWindows()で実行中のプログラムを表示
2008.02.14(Ver1.00)


Win10ではWindowの大きさなど異常が見られ、プログラムを修正しないと駄目のようです。

project→Optionで Directory の設定が、私の環境に設定されており、bpr が開けないことがあるかも知れません。
(WindowsXPでドライブ関係が変わってしまい、プロジェクトを開こうとし、一部 トラブリ ました)
その時は、テキスト エデイタ−で bpr を開き、INCLUDEPATH,LIBPATH を下記に直せば解決するようです

<INCLUDEPATH value=”$(BCB)¥include;$(BCB)¥include¥vcl”/>
<LIBPATH value=”$(BCB)¥lib¥obj;$(BCB)¥lib”/>






















enumwin
  2008.2.14 ver 1.00


C++Builder Pro 6.0 使用
目的は自作のプログラムGCatから起動・オたgviewで画像を保存した際,GCatに, SendMessageでWM_PAINTを送り,すぐに,保存した結果を反映 ・ウせるため GCatのHWNDを知る必要があったので作成。

保存した直後に,EnumWindowsでクラス名にTFormを含み,Form→CaptionにGCatがあるプログラムの ハンドルを得て
SendMessage(hWnd,WM_PAINT,0,0) を送れば,すぐに,保存した結果が反映され目的を達しました。
また,hWnd=FindWindow(NULL,"GCat"); でもハンドルは取得できますが,GCatが1つ以上動いている時は1つの プログラムのハンドルしか取得できず問題があります。
BOOL CALLBACK WndEnumProc(HWND wnd, LPARAM lp) { char strClass[255],strCaption[255]; AnsiString ansiClass,ansiCaption,shWnd; GetClassName(wnd, strClass, 255); //クラス名を取得 ansiClass = AnsiString(strClass); GetWindowText(wnd, strCaption,255); //Captionを取得 ansiCaption = AnsiString(strCaption); shWnd=IntToStr((int)wnd); //ハンドルを文字列に変換 //ansiCaption, ansiClass をStringGridに表示 return true; } void __fastcall TForm1::Button2Click(TObject *Sender) { EnumWindows((int (__stdcall *)())WndEnumProc, 0); }





















iconext.exe  2007.11.04  ver 1.00
C++Builder Pro 6.0 使用,アイコンンの表示,EXE,DLL ファイルからアイコンを抽出し表示 するプログラムです,目的は自作の「fman32」で表示されるアイコンの大きさがVisataとWindows2000で違うようで チェックするため作りました。

下記のファイルは自己解凍型のファイルで,解凍先は D: となっておりますが,適当にに変更して下さい



下記はFileListBoxでファイルがクリックされた時に実行されるル−チンのソ−ス Graphics::TBitmap *bmp; HICON hIcon; TIcon *Icon; Fname=FileListBox1->FileName; ext=ExtractFileExt(Fname); ext=ext.LowerCase(); if ((ext !=".ico")&&(ext!=".exe")&&(ext!=".dll")) { Image1->Visible=false; Label1->Visible=false; Label2->Visible=false; Label3->Visible=false; return; } Image1->Visible=true; Label1->Visible=true; Label2->Visible=true; Label3->Visible=true; bmp=new Graphics::TBitmap; Icon=new TIcon; if(ext==".ico") { Icon->LoadFromFile(Fname); bmp->Width=Icon->Width+1; bmp->Height =Icon->Height+1; hIcon=Icon->Handle; HDC hdc=bmp->Canvas->Handle; DrawIcon(hdc,0,0,hIcon); Image1->Canvas->StretchDraw(Rect(1,1,70,70),bmp); } else { if((ext==".exe")||(ext==".dll")) { ExtractIconEx(Fname.c_str(),0,&hIcon,NULL,1); Icon->Handle = hIcon; bmp->Width=Icon->Width+1; bmp->Height =Icon->Height+1; HDC hdc=bmp->Canvas->Handle; DrawIcon(hdc,0,0,hIcon); Image1->Canvas->StretchDraw(Rect(1,1,70,70),bmp); } } Label1->Caption=Icon->Width; Label2->Caption=Icon->Height; Icon->ReleaseHandle(); DestroyIcon(hIcon); delete bmp;





















adjNtp.exe  2006.1.2   Ver 1.00

C++Builder Pro 6.0 使用  SNTPクライアント プログラム
自宅のLinux機(FC5)に対しLANで繋がれたWindow機の時刻合わせを行うのが目・Iで作りました(FC5になって以前のadjclockが使へなくなりました、TIME SERVERが無くなったよう)

adjclockと似たプログラムなのですが,時刻合わせのプロトコルが違います。adjNtpはSNTPを使うためNTPサ−バを利用した時刻合わせ を行います。
Library (Internet Programing)で提供されていたSNTPクライアントのソ−スを参考に作ったプログラムで,ソ−スなど大部流用しております
・皷栫EA時間合わせな・ヌ出来ますが,socketの使用法など良く理解できておりませんので,間違いなどご指摘いただければ有難 いです。NTPプロトコル(RFC1769)なども理解出来ず、時刻合わせの精度などわかりません。 RFC-2030 SNTP Version 4にRFC2030の日本語訳が載っておりました。


ファイルは, 解凍先として D:\ としておりますが適当に変更して下さい。実行ファイルはダブルクリックで起動します
ComboBoxの内容(NTPサ−バ)を修正できるようにしました(設定したサ−バが使用出来なくなったりするので)
ComboBox->Items->LoadFromFile(),SaveToFile() など利用してadjNtpと同じDirにserver.datとして保存、このファイル を削除すれば初めの状態になります




















































shortcut.exe  ver 1.00  2004.11.07

C++Builder Pro 6.0 使用

shortcut_exe.zip  実行ファイル
shortcut_src.zip  ソ−ス ファイル

自作のfman32 にショ−トカットを作成する機能を追加する目的で,試行錯誤しながら作ったプログラムですと言っても C++BuilderMLなど色々なサイト から情報を得る事に試行錯誤しただけです。
下記のコ−ドはC++BuilderMLから引用・オ,そのまま利用させていただきました。 #include <ShlObj.h> BOOL CreateLink(LPCSTR lpszPathObj, LPSTR lpszPathLink) { CoInitialize(NULL); IShellLink* psl; HRESULT hres = CoCreateInstance( CLSID_ShellLink, NULL, CLSCTX_INPROC, IID_IShellLink, (void **)&psl); if(SUCCEEDED(hres)) { psl->SetPath(lpszPathObj); // Query IShellLink for the IPersistFile interface for saving the // shortcut in persistent storage. IPersistFile* ppf; hres = psl->QueryInterface(IID_IPersistFile, (LPVOID *)&ppf); if(SUCCEEDED(hres)) { wchar_t wsz[MAX_PATH]; // Ensure that the string is ANSI. MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH); // Save the link by calling IPersistFile::Save. hres = ppf->Save(wsz, TRUE); ppf->Release(); } psl->Release(); } CoUninitialize(); if(SUCCEEDED(hres)) return TRUE; else return FALSE; } CreateLink(Application->ExeName.c_str(), "C:\\Text\\test.lnk"); で呼び出せばアプリケ−ションのショ−トカットが C:\Textにtest.lnkとして出来るようです デスクトップにショ−トカットを作るために SHGetSpecialFolderPath(NULL, szPath, CSIDL_DESKTOPDIRECTORY,FALSE ) を 利用しデスクトップのPATHを取得,Current PATHは GetCurrentDir() で取得しております。
コンパイルすると #include <ShlObj.h> でエラ−を起こしコンパイル出来ませんでした。
色々サイトを探した所
「 C++ BuilderのIDEのメニューからプロジェクト−オプションのディレクトリ/条件を選び、・件定義の項目に、  NO_WIN32_LEAN_AND_MEAN を追加。これで、エラ−がでなくなる。 」 と書いてあるの見つけ,早速,実行した所, エラ−が出なくなりました。

ファイルを選択し,DeskTopボタンを押せばデスクトップにショ−トカットが出来るだけの単純なプログラムです








































cnvhex   Ver 1.00      2004.10.24

C++Builder Pro 6.0 使用

convhex_exe.zip  Ver 1.00 実行ファイル
convhex_src.zip  Ver 1.00 ソ−ス ファイル


dkanalizeでオフセットを計算するために作ったプログラムです。16進ダンプはアドレスを16進で表示しており,C++Builderで デバッグすると10進で表示され,10進 <-> 16進 の変換が面倒で,このプログラムでは 10進+16進 → 10進,16進 で表示する ようにしてあります。オフセットの計算用で余り汎用性はありません。
int n=a+bを行い
10進は IntToStr(n),16進は IntToHex(n,4)の結果をLabel->Captionに入れてあるだけです

 






























dkanalize  Ver 1.01      2010.03.26

C++Builder 6.0 使用

dkanalize_exe.zip  Ver 1.01 実行ファイル
dkanalize_src.zip  Ver 1.01 ソ−ス ファイル

Exif Fileの場合,撮影日時,撮影条件,カメラの機種などのデ−タがFileに埋め込まれているようなので,自分で撮った画像などで,それら のちょっとしたデ−タを自作プログラムのgviewで表示出来ると便利だと思いました。その際,ExifのDataの並び方など調べるのに単に16進ダンプしても位置が 判らず不便なので,位置,デ−タの関係を判りやすくするために作ったプログラムです。それ以外の目的がなく,実用性のあるプログラムではありません。 インテル方式のみ調べました。私の持っているデジカメはCanonで,インテル方式で,モトロ−ラ方式の画像を知りませんので未対応です。また,Sony, オリ・塔pスもインテル方式のようで,解析可能でした。
解析はタグまでで,各タグのオフセット+0CHのデ−タにはカメラメ−カ−などが書かれておりますが, そこの一部デ−タも表示しました。
Exif形式の画像ファイル解説を参考にさせて頂きました。
Ver 1.01 色収差を補正するPTLensなどを使用すると、Exifの前にJFIFのデ・|タが書き込まれ、OFFSETの計算 が狂うのを修正しました。

16進ダンプの一部(自作のbed.exeを使用)


デ−タの一部(0X7A+0X0C=0X86 → メ−カ−名)
ExifのDataの並び方(dkanalizeで打ち出したデ−タです,コメントは後で加えました) 00000H : FFD8     SOI JPG画像の始まり 00002H : FFE1     Exifの始まり 00004H : 2FFE     バイト数 00006H : 457869660000 Exif 0000CH : 49492A00   II* オフセットは0CHに対してで,IIはデ−タの並びがインテル方式を意味するようです              (0x12345 → 54321 と並び,数字に直す時不便です)             アドレス=オフセット+12 で計算 00010H : 08000000 IFD0 (Image File Directory) 00014H : 09                   個数 アドレス Tag DataType data1 data2    タグの意味 00016H : 0x010F 0x0002 0x00000006 0x0000007A  カメラのメ−カ−名 7AH+0CHから6文字のAsciiCodeでメ−カ−名 00022H : 0x0110 0x0002 0x0000000E 0x00000080  カメラの機種名 0002EH : 0x0112 0x0003 0x00000001 0x00000001  画像の情報 0003AH : 0x011A 0x0005 0x00000001 0x000000A0  画像の情報 00046H : 0x011B 0x0005 0x00000001 0x000000A8  画像の情報 00052H : 0x0128 0x0003 0x00000001 0x00000002  画像の情報 0005EH : 0x0132 0x0002 0x00000014 0x000000B0  画像の変更日時 0006AH : 0x0213 0x0003 0x00000001 0x00000001  色情報 00076H : 0x8769 0x0004 0x00000001 0x000000C4  SubIFDへのオフセット(C4H+0CH→00D0H) 00082H : 0x00000950               IFD1へのオフセット(950H+0CH→0095CH) IFD1 0095CH : 0x0006・@       ・@        個数 0095EH : 0x0103 0x0003 0x00000001 0x00000006  圧縮形式 0096AH : 0x011A 0x0005 0x00000001 0x0000099E  分解能 00976H : 0x011B 0x0005 0x00000001 0x000009A6  分解能 00982H : 0x0128 0x0003 0x00000001 0x00000002  分解能の単位 0098EH : 0x0201 0x0004 0x00000001 0x000009F4  サムネイルへのオフセット 0099AH : 0x0202 0x0004 0x00000001 0x00002600  デ−タ サイズ 009A6H : 0x00000000 SubIFD 00D0H : 0x1F                  個数 000D2H : 0x829A 0x0005 0x00000001 0x00000386 シャッタ−速度 000DEH : 0x829D 0x0005 0x00000001 0x0000038E  レンズF値(分子,分母) 000EAH : 0x8827 0x0003 0x00000001 0x00000190 ISO (data2 : 0x190→400) 000F6H : 0x9000 0x0007 0x00000004 0x31323230  ExifのVersion 00102H : 0x9003 0x0002 0x00000014 0x0000023E  撮影日時 0010EH : 0x9004 0x0002 0x00000014 0x00000252  撮影後にダジタル化された日時 0011AH : 0x9101 0x0007 0x00000004 0x00030201  デ−タの並び 00126H : 0x9102 0x0005 0x00000001 0x0000036E  JPGの圧縮率 00132H : 0x9201 0x000A 0x00000001 0x00000376  シャッタ−速度 ? 0013EH : 0x9202 0x0005 0x00000001 0x0000037E  レンズの絞り(分子,分母) 0014AH : 0x9204 0x000A 0x00000001 0x00000396  露光補正量 00156H : 0x9205 0x0005 0x00000001 0x0000039E  レンズの開放F値(分子,分母) 00162H : 0x9207 0x0003 0x00000001 0x00000001  測光モ−ド 0016EH : 0x9209 0x0003 0x00000001 0x00000000  フラッッシュの有無(data2: 0 なし) 0017AH : 0x920A 0x0005 0x00000001 0x000003A6  レンズの焦・_距離(分子,分母) 00186H : 0x927C 0x0007 0x0000055C 0x000003AE  カメラの内部情報 00192H : 0x9286 0x0007 0x00000108 0x00000266  ユ−ザ− コメント 0019EH : 0xA000 0x0007 0x00000004 0x30303130  Version 001AAH : 0xA001 0x0003 0x00000001 0x00000001  色空間 001B6H : 0xA002 0x0003 0x00000001 0x00000C00  画像の幅 001C2H : 0xA003 0x0003 0x00000001 0x00000800  画像の高さ 001CEH : 0xA005 0x0004 0x00000001 0x0000091A  デジタルズ−ム 001DAH : 0xA20E 0x0005 0x00000001 0x0000090A 001E6H : 0xA20F 0x0005 0x00000001 0x00000912 IFD0の一部デ−タの解析(タグのオフセット+0CHのデ−タ) 0x010F 43616E6F6E00 Canon 0x0110 43616E6F6E20454F532044333000 Canon EOS D30 SubIFDの一部デ−タの解析(タグのオフセット+0CHのデ−タ) 0x829A 0x00000001 0x000000C8 シャタ− 1/200 0x829D 0x00000032 0x0000000A 絞り   50/10 Data Type

デ−タ種類
data1(個数,バイト数)
data2(デ−タ 或いは オフセット値)
0x0001
unsigned byte


0x0002
ascii
バイト数
デ−タまでのオフセット
0x0003
unsigned short
デ−タの個数
デ−タ
0x0004
unsigned long


0x0005
unsigned rational
デ−タの個数
デ−タまでのオフセット
Dataは 4,4Byte で 分子,分母の順
0x0006
signed byte


0x0007



0x000A
signed rational




タグ
0X9207
測光モ−ド
0:不明 1:平均測光 2:中央 3:スポット 4:多点 5:マルチセグメント 6:部分 255:その他























NetWork
    2004.7.11
自作プログラムでネットワ−ク ドライブの割り当て,切断などの操作を試みたく作りました(C++Builder6.0 でコンパイル)。
WNetOpenEnum(), WNetEnumResource(), WNetGetConnection(), WNetUseConnection()などの関数を 利用いたしました。これらの関数に関しての詳しい解説書を持っておらず,インタ−ネットで調べ周士傑さんのペ−ジ,C++Builder のメ−リング リストの過去の記事に載っていたソ−スを参考にさせて頂きました。
サブ・求|チンの使用方法が良く判らず組んだプログラムですので多々問題がありそうです

network_exe.zip
Ver 1.00 2004.7.11 実行ファイル
network_src.zip
Ver 1.00 2004.7.11 ソ−ス ファイル

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− WNetEnumResource()などの使い方で私が試行錯誤した所をメモしてみました NETRESOURCEは下記のように定義されており(C++Builderのヘルプで表示) typedef struct _NETRESOURCE { DWORD dwScope; DWORD dwType; DWORD dwDisplayType; DWORD dwUsage; LPTSTR lpLocalName; LPTSTR lpRemoteName; LPTSTR lpComment; LPTSTR lpProvider; } NETRESOURCE;  WNetOpenEnum()を呼び出す前に lpRemoteName=    一回目 ””をセット         .. WNetEnumResource()でワ−クグル−プ名がリストアップ    二回目 ”ワ−クグル−プ名”をセット .. WNetEnumResource()でコンピィ−タ名がリストアップ    三回目 ”コンピュ−タ名”を・Zット  .. WNetEnumResource()で共有名がリストアップ  lpProvider = "Microsoft Windows Network"をセット      : NULLを設定すると全てのネットワ−ク名が読みだされるようですが        ネットワ−ク ドライブをリストアップするのであれば ”Microsoft Windows Network”と指定すれば良いようです この辺はC++Builderのメ−リング リストの過去の記事に載っていたソ−スを実行すると良く理解できそうです WNetUseConnection() はC++Builderのヘルプになく,インタ−ネ・bトで調べたものです DWORD WNetUseConnection( HWND hWnd, // NULL LPNETRESOURCE NetResource, // NETRESOURCE LPTSTR Password, // パスワ−ド セットし Flagsに CONNECT_PROMPT を付けなければ                   パスワード入力用ダイアログボックスを表示せず,即 割り当てられる LPTSTR UserName, // ユ−ザ−名 セットすればパスワード入力用ダイアログボックスに表示 DWORD Flags, // 注)の組み合わせ ( CONNECT_INTERACTIVE | CONNECT_PROMPT ... ) LPTSTR AccessName, // D: など割り当てられたドライブ レタ−がセットされリタ−ン LPDWORD AccessNameSize, LPDWORD Result); 注) Flags : CONNECT_INTERACTIVE    パスワードが誤っていた場合などにパスワード再入力用ダイアログボックスを表示 CONNECT_PROMPT       パスワード入力用ダイアログボックスを使用して入力する CONNECT_REDIRECT     ネットワークドライブを自動で選択 CONNECT_UPDATE_PROFILE; 次回ログオン時に再接続する −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

使用法

コンピュ−タ名をクリックし,共有名を表示させ
ネットワ−ク ドライブに割り当てたい共有名をクリックするとネットワ−ク ドライブのラベルが変更される
「割り当て」ボタンをクリックすればネットワ−ク ドライブとなり,ドライブ レタ−が左に追加表示

ドライブ レタ−が表示されている時に「切断」ボタンをクリックすれば・リ断されドライブ レタ−の表示が消える

「ユ−ザ−」ボタンでユ−ザ−名を表示

GetDriveType()でネットワ−ク ドライブをチェックしているので既に割り当てられているドライブも判ります























CD,DVDなど自動起動
   2009.8.3
open=autorun.exe "起動用ファイル名" などとしないと,CD,DVDなど・ゥ動起動・オない錯覚しておりました。 AUTORUN.INFに [autorun] open=起動用ファイル名 単に上記のように設定し,CD,DVDにAUTORUN.INF,起動用プログラムを入れれば起動するようで, autorun.exeなど必要ありませんでしたので, autorun.exe は削除いたしました。

db9_express.msiなど拡張子.msiの時、open=db9_express.msiとしても上手く起動せず void __fastcall TForm1::FormActivate(TObject *Sender) { char FNAME[256]; char PARAM[256]; SHELLEXECUTEINFO einfo; lstrcpy(FNAME,"db9_express.msi"); lstrcpy(PARAM,""); //引数が必要なら処理を入れる memset(&einfo,0,sizeof(einfo)); einfo.cbSize=sizeof(einfo); einfo.lpVerb="open"; einfo.lpFile=FNAME; einfo.lpParameters=PARAM; einfo.fMask=SEE_MASK_NOCLOSEPROCESS; einfo.nShow=SW_SHOWDEFAULT; ShellExecuteEx(&einfo); //Api関数 Close(); } 上記のコードを書いたプログラムを作り、setup.exeとし
[autorun] open=setup.exe としてShellExecuteExよりdb9_express.msiを起動し、自動起動出来ました。







































WEDIT  2004.11.21
Ver 1.03 SelStartでEdit Controlのスクロールが連動しなかった問題をSendMessage(Handle,EM−LINESCROLL,X,Y)を使うことで解決. また,WinMain()に起動時のパラメータを処理する関数を入れ,IE 4.0の "notepad FileName" を処理出来るようにしました
Ver 1.04 印刷の一行が長いとき,折り返し出来るようにし,フオントもテキスト表示と同じく印刷可能にしました.
Ver 1.09 HTMLのタグ,検索,置換などの機能を追加.Biluder3.0でコンパイル
Ver 1.10 MEMO−>RichEditにし,TED−>WEDITと改称.Builder4.0でコンパイル ,Fontの選択機能は削除
Ver 1.11 使用できるタグを増やしたり,Bugを潰したりと私にとって使いやすくしました。Builder 6.0でコンパイル
Ver 1.12 ファイルの参照にBugがあり,修正。 Builder 6.0でコンパイル
Ver 1.13 置換で誤動作するbugを修正
Ver 1.15 これまでタグのチェックで <XMP></XMP> の間にある -> などでエラ−となるなどのBugに対応


内容は メモ帳+・沚,置換,タグの挿入機能があります,32Kbyte以上のファイルロ−ド可能.WEDIT パラメタ−(FileName)で起動可能


HKEY_CURRENT_USER
  |
  Software
         |
         Microsoft
                  |
                  Internet Explorer






Windows2000の場合は regedt32.exe などで,上の部分を変更するとIE5の編集ボタンからWEditを選択できるようになりました.
WindowsXP も regedt32 を使用し上記の変更で、Win2000 と同じく使用出来ました。

PowerToy(WinXP用)で,右クリックで出る IE6.0のエディタ−として登録しても使用出来ませんでした.(DDE をサポ−トしていない為でしょうか) 




















FMan32 Ver 2.200  2006/02/13
C++ Builder6.0 でコンパイル,プロジェクトは fman32.bpr です

Ver1.xx では Dirの操作時 配列に全てのDirを読み込んで,それを利用して処理をしておりましたが,Ver 2.・・・@では 再帰的に,DIR→SUBDIR→ と処理し,また,未処理部分に戻り処理をするように変更.バグは一応取ったつもりです ?.処理も少しは早くなったようです .また,ファイルの更新日時の比較にFileAge()を利用しようとしましたが,1秒ほどの誤差が出る事があり,SystemTimeに変換して比較しました.

Ver 2.02 835CH など漢字に対・桙オていなかったバグの修正
Ver 2.04 dirのbackup,copyなどで元と同じ空き容量以上がb・≠モ汲浮瑞謔ノないと容量不足のエラ−がでるbugを修正
(backup先の同じDIRの容量チェックにbugがあり,常に 容量が0になってしまいました, 最近バックアップ先の空きが少なくなり,やっとbugに気ずきました)。またCD-ROMからのコピ−時, ReadOnlyがチェックされていてもReadO・獅撃凾ェ解除されないBugの修正
DIR削除の際,一部エラ−が起こるBug,日本語のDIR名がコピ−の際に化けるBugなどの修正
Ver 2.05 ファイルのコピ−の進行状態,中止を可能とす(FileCopy() → 1024Byteずつ書き込むように変更 
Ver 2.08 Bs_Cutで2Byteコ−ドに対応(08, 08 08の両方),表示されているファイル名をテキストとして保存する 機能を追加。Bs_Cutで ’(8166コ−ド)で文字化けのBugがあります
Ver 2.10 LinuxのSubDirにHDDをマウントした時,空容量が不明のため空容量が不足のエラ−となりコピ−など出来なくなる BUGに対応
Ver 2.11 WNetConnectionDialog(NULL, RESOURCETYPE_DISK),WNetDisconnectDialog(NULL, RESOURCETYPE_DISK)を利用し ネットワ−ク ドライブの接続、切断を可能とした
Ver 2.12 Volumeラベルを表示,編集可能としました。 GetDrvInfo(),SetVolumeLabel()を使用
FDはチェックの度に読みにいき,煩わしいのでドライブには表示せず,右クリックの情報から判るようにしました。
Ver 2.14 オプション→ショ−トカットでショ−トカットを作成可能とした。DIRの削除で,一部エラ−が出ても続行できるように変更。 サムネイルなど表示可能な「VIX」なるソ・tト使った所,_CATALOG.VIXなるファイルが閲覧したDIRに出来てしまい煩わしいのでDIR以下にある .VIXを一括削除出来るようにした。バックアップ時,バックアップ元と先の更新日が違ってしまっており,A→BをするとBのファイルの更新日が最新となってしまい B→A で同じファイルを更新してしまうBUGを修正
Ver 2.15 UTF8 → ShiftJi・唐ノ変更可能とした。Utf8ToAnsi()を利用,転換元のファイルの改行コ−ドが0AHでないとUtf8ToAnsi() は機能しないよう・ナす。
Ver 2.・P7 BS削除が2Byteコ−ドに対応するようにした。SHIFT-JISに変換後でないと駄目
FC3のUTF8のmanを読むのが目的なのですが,nkf,colを使ったほうが確実のようです

Ver 2.20 アイコン(.ico)ファイルをクリックでアイコン画・怩表示可能とした


説明
1 拡張子を指定してのファイルのコピー,移動,属性など設定,表示など可能
2 フオルダーの削除,作成,リネーム
3 ファイル,フォルダー名の小文字変換
4 ファイル名に通し番号を付け一括してのリネーム(test001.jpg,test002.jpgなど)
5 拡張子の一括変更(mpeg,mpe,mpg,mov,qtなどをmpg,movに統一するなど)
6 フォルダーのバックアップ(ミラ−リング),元にないファイル、フォルダーの削除.バックアップの時,大文字,小文字を区別する
7 Fileのダブルクリックで実行が可能としました.
8 右クリックでポップアップメニュウがで,上のコマンドが選択できます
9 ファイル通し番号をつけての複製が出来るようしました.(Ver1.10)
10 DiskSizeが2Gを超える時も,Disk容量を表示出来るようにしました. (WinApiのGetDiskFreeSpaceEx()を利用しているので,Window95では動作しません)
11 フォルダ−内の *.bak を削除出来るようにしました
・P2 CDからコピ−するファイルの属性をArchiveに変更してコピ−(ReadOnlyがチェックされておれば),CD-RWは RW を チェックすれば、削除、移動も可能
13 Windowsのテキスト エディタ−で作った,CGIなどのファイルの 0DH0AH → 0AH に変換する機能もあります
14 ネットワ−クからネットワ−ク ドライブの接続、切断が可能
15 Option→ショ−トカットでデスクトップ,Current Pathにショ−トカットを作成
16 アイ・Rン(.ico)ファイルをク・潟bクでアイコン画像を表示
17 newがチェックされていれば元より古いもののみコピ−(コピ−先が新しければ置換せず)

DriveListBoxで準備の出来ていないドライブを選択した時のエラ−表示を変えるため,また,DirectoryListBox
でHidden属性のフォルダーの表示方法が不明のため,TComboBox,TListBoxを使い,独自のものを作りました.
Hidden属性のフォルダーをGray表示するのに方法が判らず,苦労しました.


アイコンを表示するために下記のコ−ドを追加し,なんとか動くようです Graphics::TBitmap *bmp; bmp=new Graphics::TBitmap; bmp->Width=33; bmp->Height =33; Image1->Picture->Bitmap->Width = 70;   Image1->Picture->Bitmap->Height =70; TIcon* Icon=new TIcon; Icon->LoadFromFile(FileBx1->FileName); HICON hi=Icon->Handle; HDC hdc=bmp->Canvas->Handle; DrawIcon(hdc,0,0,hi); Image1->Canvas->StretchDraw(Rect(1,1,70,70),bmp); delete bmp; delete Icon; このプログラムでは4G以上のDir、Fileサイズを取得出来ません。
::GetFileSizeEx(...)、::GetDiskFreeSpaceEx(...)を利用すれば取得できます(マイクロソフトに詳しい説明がありました)。
















































GCat.EXE 2006.10.08 更新
gview.exe 2007.02.08 更新

gview_exe.zip
466KByte EXE FILE Ver 1.18( Ver 6.0(Prof版) 使用 ) 
gcat_exe.zip
483KByte EXE FILE Ver 1.13( Ver 6.0(Prof版) 使用 ) 


gcat_src.zip
81KByte  ソ−ス File Ver 1.13( Ver 6.0(Prof版) 使用 )
gview_src.zip
79KByt・・ ソ−ス File Ver 1.18( Ver 6.0(Prof版) 使用 )


デジカメなどの画像整理を目的に作りました.JPG,BMP,GIF,PNG しか表示できませんが, RAM 128KByte で 500枚ほどのサムネイルは 十分表示できるようです.現在,画像の整理で活用中です. リソ−スを・ノ端に浪費するBugがあったのですが,一応なくしたつもりです.
2005.1.2 GIF、PNGは保存は出来ませんが,表示可能としました。


説明
1 : フオルダ−内の全画像のサムネイルの表示,サムネイルをクリックする事で原画像を表示
2 : 削除,一括してリネ−ム,BMP→JPG,JPG→BMP,PNG→BMP,PNG→JPG に変換
3 : マップ File の作成(ネットスケ−プでは範囲が狂うようです)
4 : GCat.exeとgview.exeは同じフオルダ−に存在しないと動作しません
5 : gview には,画像の切り出し,縮小機能,多少の編集機能があります.SAVEはBMP,JPG(圧縮率の指定可能) 共に可能です。 gview.exeはVer1.04から,単独でも動作可能としました(Debugのため)
6 : gviewの右クリックで,画像情報(カメラの機種,撮影条件など)を表示
7: ifgif.spiInPng.spi をGCat,gviewと同じフオルダ−に入れておく事で GIF,PNG を 表示可能となるが、保存は出来ません。


Ver 1.05 CD−ROMからコピ−した場合、属性がReadOnlyに設定され、削除、移動の操作が出来ないのでReadOnlyも削除してしまう様に変更、CD-ROMに対し削除、移動が出来ないようにしました・B
gview  Ver 1.04 とし、切り出しの範囲をドラッグ操作で変更可能とし、枠も大きさを指定出来るようにしました(自分のホ−ム ペ−ジ用の画像の加工をし易くするため)
gview  Ver 1.05 Ver1.04の変更時に生じてしまった,編集→部分修正の位置が設定出来ないBugを修正

GCat Ver 1.06 一覧表示での 1ファイルに対しての名前変更時に,一部誤動作するバグの修正(エラ−処理が抜けておりました)
GCat Ver 1.07 2ByteコードのDi・窒・モ狽盾窒剿シの処理・ナの誤動作修正(83H 5CH の5CHをDirの / 記号として処理するBug)
保存の際 File名で test.jpg など拡張子を指定出来るように変更.指定しない時はフイルタ−の拡張子となる (File名の拡張子が優先される 例 File名 t.bmp,フイルタ− jpg は t.bmp として保存)
(注)Windowsのフオルダ− オプションで拡張子も表示可能としたほうが判り易いです
2003.9.23 実行時にDLLを必要としないようにしました(うっかりしておりました)

gview Ver 1.08 ホイ−ル付き3ボタンマウスに対応,ホイ−ルでスクロ−ル出来るようにしました

gview Ver 1.09 任意の位置にクリッカブル マップを設定,新規のHTMLのソ−スを作成出来る機能を追加(骨組み程度)
gview Ver 1.10 mapファイルの作成機能を追加したため,200ドット以下の表示が上手く出来なくなったBUGの修正
GCat  Ver 1.09 移動先が元と同じ場合にエラ−とならないBugを修正(元のフオルダ−内のファイルが削除されてしまうBUG)
gview Ver 1.11 デジカメでExifの場合に撮影条件,カメラメ−カ,機種など表示可能とした(Canon,Sony,Olimpusなどで 一応確認)
GCat  Ver 1.10 gviewを見つけるのにGetCurrentDir()を使用していた所,ショ−ト カットの場合,作業フォルダ−のパス が返ってくる為,作業フォルダ−のパスの設定の状態でgviewが見つからないバグがあり修正(Application->ExeNameでgview のパスを取得するように変更)
サムネイルの表示する大きさを変更可能とした(2種類)

gview Ver 1.13 Exifのモトロ−ラ方式に対応(コダック,サンヨウ,ニコンで入手出来た画像では,画像情報が表示可能でした), マウスによるスクロ−ル時の一部異常に対処

GCat 1.11,gview 1.14 susie pugin( Susieの部屋にあるifgif.spiInPng.spi)を・・pして GIF,PNG画像を表示・o来るようにした。
ホ−ムペ−ジ,Linuxとの関係でGIF,PNGを表示したく作成したので,プログラムを簡単にするため,ifgif.spiInPng.spi以外には対応しておりません。spiをIsSupported (file name,DWORD)を利用し,プログラムでチェッ・Nすれば,他のpluginにも対応出来ると思います。

gview ver 1.17 部分編集でColorDialogにより色を選択出来るようにした

gview ver 1.18 山歩きの時に, 地図に升目があると, 距離, 位置を調べるのに便利なので, 右クリックのメニュ−に機能を追加

GCat 1.01 バグの修正, BDS2006でコンパイルしたので Ver 1.00よりスタ−トしました 



GCat

下は画像一覧

---- Susie Pluginを利用するために組んだプログラムの概略 ----


Susie Pluginの情報取得
フオルダ−にある拡張子 SPI の情報を表示するプログラム → 実行ファイル, ソ−ス ファイル
GetPluginInfo typedef int __stdcall (*ProcGetPluginInfo) (int,LPSTR,int); void main { char buf[80]; int i; HINSTANCE hspi=LoadLibrary("InPng.spi"); if(hspi==NULL) { ShowMessage("Can not Load"); } ProcGetPluginInfo GetPluginInfo= (ProcGetPluginInfo) GetProcAddress(hspi,"GetPluginInfo"); for(i=0;i<4;i++) { GetPluginInfo(i,buf,80); Memo->Lines->Add(buf); } } i-- 0 Version 1:CopyRightなど 2:拡張子 3:ファイル名
画像表示の概略 typedef int __stdcall (*ProcGetPluginInfo) (int,LPSTR,int); typedef int __stdcall (*ProcIsSupported)(LPSTR,DWORD); typedef int __stdcall (*ProcGetPicture)(LPSTR,long,unsigned int,HANDLE*,HANDLE*,FARPROC,long); void PNG(AnsiString fname,Graphics::TBitmap *theBitmap) { int theFile; HINSTANCE hSPI =LoadLibrary("inpng.spi"); //ここを変えないと,他のspiは使用できない if(hSPI==NULL) return; ProcIsSupported lsSupported =(ProcIsSupported) GetProcAddress(hSPI,"IsSupported"); if(lsSupported==NULL) { ShowMessage("InPng.spiが見つかりません"); goto ret; } theFile=FileOpen(fname,fmOpenRead); if(lsSupported(fname.c_str(),theFile) !=0) { FileClose(theFile); HLOCAL theHBm, theHBInfo; ProcGetPicture GetPicture =(ProcGetPicture)GetProcAddress(hSPI,"GetPicture"); if(GetPicture==NULL) { ShowMessage("GetPictureが見つかりません"); goto ret; } GetPicture(fname.c_str(),0,0,&theHBInfo,&theHBm,NULL,0); BITMAPINFO *theBInfo=(BITMAPINFO*)LocalLock(theHBInfo); void *theData = LocalLock(theHBm); theBitmap->Width = theBInfo->bmiHeader.biWidth; theBitmap->Height =theBInfo->bmiHeader.biHeight; SetDIBits(theBitmap->Canvas->Handle,theBitmap->Handle, 0,theBInfo->bmiHeader.biHeight,theData,theBInfo,DIB_RGB_COLORS); LocalUnlock(theHBm); LocalFree(theHBm); LocalUnlock(theHBInfo); LocalFree(theHBInfo); } else { FileClose(theFile); } ret: FreeLibrary(hSPI); } void main {   Graphics::TBitmap *BMP  BMP=new Graphics::TBitmap; PNG("TEST.PNG",BMP); Image1->Picture->Assign(BMP); }























LinkChk 2003.6.12
コンパイルはC++Builder Ver 6.0(Prof版) で行ってあり、サ−バ−へ転送する前に,「HTML ファイル」のリンク切れ,使用していないファイルをチェックする目的で作りました。(市販の??など使ってみましたが,使いにくので)
http:// など外部のリンクはチェックしておらず,リストアップのみ行いないました。解析は拡張子HTML,HTM,S・gTMLに対し行い,CGIは行っておりません。 結果として,CGI内で使用しているファイルは未使用としてリストアップされ・トしまいます。
未使用ファイルのチェックは,指定したindex.htmlなどのパス内にあるファイルを,最初に配列(10000まで)に格納し,HTMLファイルで使用されている時は,印を付け,最後に印の無いものを未使用としております。 このため,10,000以上のファイルがある時は使用出来ません。(私のホ−ムペ−ジでは,1,500まで無いので十分です),Dirも1000以内の制限があります。
チェックしているタグは,<A,<AREA,<FORM,<INPUT,<IMG,WINDOW.OPEN,<METAなどです。
私は<A,<AREA,<IMG,window.openしか,HTMLで使用しておらず,その他は良く知らず,チェック漏れが出るかも知れません。

Ver 1.12 外部リンク の チェック,ListUp,未確認リンクのListUp などの機能の追加,他Bug退治
外部リンクのチェックは NMHTTPコンポ−ネント を利用,Header,Body を読み込みチェックしております(完全にはチェック出来ません)

Ver 1.13 <A HREF=URL>,*.cgi?,など,””で区切られていないURL,FileName に対応出来るようにしました
(FlashMXで出来るHTMLで HREF=http:// など ””で区切られていないものがあり,これに対応)

Ver 1.15 BACKGROUND=”T.JPG” などに対処

linkchk_exe.zip  410KByte  実行ファイル ver1.15
linkchk_src.zip  44KByte   ソ−スファイル ver1.15


使用法
チェック
まず,ファイルで,メインとなるHTMLファイル(index.htmlなど)を指定,その中のHTMLファイルを順に解析し,リンク切れ,未使用ファイルを報告。
メイン以外のHTMLを指定しないで下さい(未使用ファイルが山程に出ます)
外部リンクのチェック
チェックでリストアップした外部リンクをチェック(インタ−ネットに接続後・ノ使用)
一覧で外部リンクを全て表示
不明リストでチェック出来なかったリンクを表示
印刷
表示されている内容を印刷

(注)リストアップされた未使用ファイルは,可能性があるだけで,無条件で削除はし・ネいで下さい(削除の結果は??です)
実際に,自分で使用しており,Bugは一応とったつもりです ?

Unixなど0Aの改行コ−ドには対応しておりません(改行コ−ドは0D 0A として処理しております)
















HostChk    2001.10.11

コンパイルはC++Builder Ver 5.0(Prof版) で行ってあり,WinApi関数の gethostbyname(), gethostbyaddr()を利用し,ホスト名からIPアドレスを,IPアドレスからホスト名を取得するプログラムです。 Win98,2000,XPで動作確認しております。Win95は持っておらず未確認です。
Ver 1.01 は IP,Host の入力欄が空の時にエラ−が起こり,カ−ソルの形状が元に戻らないバグを修正

ーーーーーーーーーーーーーーーーーーー
C++Builder6でコンパイル
hostchk_exe.zip Ver 1.01 実行ファイル
hostchk_src.zip  Ver 1.01 ソ−ス

ーーーーーーーーーーーーーーーーーーー
RadStudio 10.2でコンパイル
hostchk_exe_10.zip  実行ファイル
hostchk_src_10.zip  ソ−ス
ーーーーーーーーーーーーーーーーーーー

使用方法
起動は,解凍して出来た hostchk.exe を直接,ク・潟bク すれば実行できます。dll などは使用しておりません。
入力欄(左)に,0.0.0.0 などIPアドレスを入れ,変換ボタンを押すと右に結果が出ます (結果をコピ−したりするために Edit を使用しております)
ホストにチェックを入れれば,ホスト → IPアドレス,チェックをはずせば IPアドレス → ホスト名 が得られます

HOSTENT構造体
struct hostent {
 char   FAR * h_name;
 char   FAR * *h_alias;
 short  h_addrtype;
 short  h_length;
 char   FAR * FAR * h_addr_list;
}
の扱いが,良く判らず,困りました(char ** など ポインタ−のポインタ− など使った事が無く)
利用していない ClientSocket を追加して・りますが,こうしなと gethostbyname()が上手く動作しなく困った末です (ヘッダ− ファイル かなにかの関係でしょうか ??)
(追記 2006.6.25) #include <winsock2.h> WSAStartup(2 , &wsaData); gethostbyname( ); WSACleanup(); として,WinSock の初期化して gethostbyname を使用すれば ClientSocket は削除可能でした (Borland Developer Studio 2006 でClientSocket コンポ−ネントがなくなり,試行錯誤して見つけました)








































参考書

Window95 APIバイブル1,C++Builder 入門プログラミング,C++Builder3「コンポーネント活用」,C++Builder「パワフルテクニック大全集」 を参考にしました.
「パワフルテクニック大全集」のCD ROMに画像処理のTwistedPixel.OCXがあり,C++Builderのコンポーネントに追加出来,JPG,BMP,GIF..などが,簡単に自作プログラムで処理できました