21 10月

7-zip32.dll/7-zip64.dll/7z.dll文字化け対策版 Ver.15.09.00.01 beta公開

7-zip32.dll/7-zip64.dll/7z.dll文字化け対策版 Ver.15.09.00.01 betaを公開しました。

○Ver.15.09.00.01 beta – 2015/10/21
・7-Zip 15.09 betaをベースにビルド。
・SevenZipSetCP(),SevenZipGetCP()を追加し、SevenZipSetUnicodeMode()でのコードページ指定を廃止。
・7z.dll対応版「7-zip32.dll」「7-zip64.dll」について、SevenZipExists7zdll()を追加し、通常版と7z.dll対応版の判別、及び7z.dllの存在を確認出来るように。

SevenZipSetUnicodeMode()で行っていたコードページの指定は廃止し、かわりにSevenZipSetCP()での指定となりました。
また、7z.dll対応版のみSevenZipExists7zdll()を追加しました。

15 10月

7-zip32.dll/7-zip64.dll/7z.dll文字化け対策版 Ver.15.08.00.02 beta公開

7-zip32.dll/7-zip64.dll/7z.dll文字化け対策版 Ver.15.08.00.02 betaを公開しました。

○Ver.15.08.00.02 beta – 2015/10/15
・余計なSFXモジュールを誤って内蔵していたのを修正。
・7z.dll対応版「7-zip32.dll」「7-zip64.dll」追加。
・32bit版ライブラリについてはコンパイラをMicrosoft Visual C++ 2010に変更。

オリジナルの「7-zip32.dll」は「7za.exe」をベースとしているため、対応書庫は7zやZip等々に限定されています。
7-zip32.dllでCabやRar、Nsisなんかも解凍出来たらなぁ…

とそんな訳で「7z.exe」ベースの「7-zip32.dll」を作ってみました。(と言っても特にコードの変更はしていません^q^)
もちろん「7z.dll」依存ですので、公式インストーラでインストールを忘れずに!
#インストーラを使用しない場合は7-zip32.dllと同じ階層に7z.dllと愉快な仲間たちを配置してください。

これで本家7-Zipで対応している形式すべてを扱える…はずです。(以下公式日本語サイトより引用)

  • 圧縮/解凍(展開): 7z, XZ, BZIP2, GZIP, TAR, ZIP, WIM
  • 解凍(展開)のみ: AR, ARJ, CAB, CHM, CPIO, CramFS, DMG, EXT, FAT, GPT, HFS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RPM, SquashFS, UDF, UEFI, VDI, VHD, VMDK, WIM, XAR, Z

以下は7z.dll対応版7-zip32.dllでRar書庫を閲覧中の図

ただし、7-zip32.dllを使用するソフトウェアが拡張子でライブラリを判定している場合、
オリジナルと同じく7zやzipしか処理できませんのでご注意くださいませ。

7 10月

TimeStamp Keeper Ver.1.01公開

ファイルのタイムスタンプを記憶し、変更後もワンクリックで元に戻すTimeStamp Keeper Ver.1.01を公開しました。

○Ver.1.01 – 2015/10/07
・起動済みプロセスがなくとも、Ctrlキー押下で最小化起動するように。
・ファイル名、更新日時の編集ができるように。
・エラーダイアログを表示しないように。

F2キーや「編集」ボタンから、ファイル名や更新日時を編集することができるようになりました。

DateTimePickerにミリ秒を直接表示するがフォーマットがないため、コールバックで文字列を制御する’XXX’を用い、WM_NOTIFY内でDTN_FORMATQUERY,DTN_FORMAT,DTN_WMKEYDOWNを処理しました。

				case DTN_FORMATQUERY:{
					HDC hDC=GetDC(handle());
					HFONT hFont=(HFONT)GetStockObject(DEFAULT_GUI_FONT);
					HFONT hOldFont=(HFONT)SelectObject(hDC,hFont);

					if(lstrcmp(_T("XXX"),((LPNMDATETIMEFORMATQUERY)lparam)->pszFormat)==0){
						GetTextExtentPoint32(hDC,
											 _T("999"),
											 3,
											 &((LPNMDATETIMEFORMATQUERY)lparam)->szMax);
					}
					SelectObject(hDC,hOldFont);
					ReleaseDC(handle(),hDC);
					break;
				}

				case DTN_FORMAT:{
					wsprintf(const_cast<LPTSTR>(((LPNMDATETIMEFORMAT)lparam)->pszDisplay),
							 _T("%03d"),
							 m_wMilliseconds);
					break;
				}

				case DTN_WMKEYDOWN:{
					if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey==VK_DOWN){
						if(m_wMilliseconds==0){
							m_wMilliseconds=999;
						}else{
							m_wMilliseconds--;
						}
					}else if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey==VK_UP){
						if(m_wMilliseconds>=999){
							m_wMilliseconds=0;
						}else{
							m_wMilliseconds++;
						}
					}else if(((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey>='0'&&
							 ((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey<='9'){
						TCHAR szMilliseconds[4]={};
						wsprintf(szMilliseconds,_T("%d"),m_wMilliseconds);

						//入力された数字
						TCHAR szNum[2]={((LPNMDATETIMEWMKEYDOWN)lparam)->nVirtKey};

						if(lstrlen(szMilliseconds)==3){
							//3桁なら文字列をクリアし新たに数字を追加
							m_wMilliseconds=_ttoi(szNum);
						}else{
							//3桁未満なら現在の文字列に数字を追加
							lstrcat(szMilliseconds,szNum);
							m_wMilliseconds=_ttoi(szMilliseconds);
						}
					}
					InvalidateRect(getDlgItem(IDC_DATETIMEPICKER_FILE),NULL,TRUE);
					break;
				}
				default:
					break;
			}
広告