2007年08月09日

Windows用フリーウェア「HookDate」を公開します

はてなブックマークに登録

■ はじめに

プログラム開発にテストはつきもので、テストの際に特定の年月日でプログラムの動作を確認しなければならないことがよくあります。その場合に手っ取り早いのは「コンピュータのシステム日付を変更する」という方法ですが、Windows ではバックグラウンドで多くのプログラムが動いており、システムへの影響を予測できないためできればその方法は避けたいものです。
そこで、API フックを利用して、特定のプログラムに対してシステム日付とは異なる日付を伝えるツール「HookDate」を作ってみました。
せっかくなのでこのブログの読者の方にフリーウェアとして公開することにします。

(追記)2010年06月16日:バージョン 1.0.2.0 を公開しました

■ 最新版の改訂内容


ver 1.0.2.0 (2010/06)
  • 64ビット Windows 環境への対応
  • exe ファイルへのショートカットファイルを HookDate.exe にドラッグ&ドロップできるように
  • HookDateRegister.exe を追加しインストール手順を簡素化

■ インストール・バージョンアップ方法 (ver 1.0.2.0〜)


お手持ちの Windows 環境に適合する HookDate アーカイブをダウンロードし、任意のフォルダへすべてのファイルを展開して下さい。この記事では例として一式を「C:\HookDate」へ展開したものとして説明します。

C:\HookDate\HookDateRegister.exe を実行すると HookDate がシステムへ登録されます。

旧バージョンの HookDate をご利用中の場合は「旧バージョンの HookDate をアンインストールしてから実行して下さい」というメッセージが表示されます。この場合はインストールずみのバージョンをアンインストール([スタートメニュー] - プログラムグループ - [KLab] - [HookDate] - [アンインストール] を実行)した後に再度 HookDateRegister.exe を実行して下さい。旧バージョンで作成・編集したプロファイルはそのまま継承されます。

上記の手順で HookDate をインストールすると C:\HookDate フォルダ配下のモジュールがシステムから参照されるようになります。そのため、HookDate をアンインストールするまでは、C:\HookDate フォルダおよび配下の各ファイルを削除・移動・リネームしないで下さい

■ アンインストール方法 (ver 1.0.2.0〜)


HookDate をシステムにインストールした状態で C:\HookDate\HookDateRegister.exe を実行すると、システムから HookDate が切り離されます。

C:\HookDate 下の各ファイルは削除されませんので、ふたたび HookDate を使用する場合はあらためて HookDateRegister.exe を実行して下さい。

■ HookDate の使い方


インストールが終わったら、まず C:\HookDate\HookDate.exe を実行して下さい。 初めて HookDate をインストールした場合には図のメッセージが表示されますので [OK] を押下します。

初回起動時の表示例を以下に示します。「メモ帳」が設定サンプルとして登録されています。64ビット Windows で実行の場合は、64ビット版・32ビット版のふたつの notepad.exe のエントリーが存在します。

※32ビット Windows で実行した場合の表示例

※64ビット Windows で実行した場合の表示例

このデフォルトのエントリーは HookDate の動作確認用です。 メモ帳には、編集時に [F5] キーを押すと現在の日付時刻がテキストに挿入されるというちょっと便利な機能がありますので、これを使えば簡単に動作を確認できます。図の要領で日付が出力されれば HookDate は正しく動作しています。

HookDate に登録したプログラムにはそれぞれに別の日付を通知することができます。
一例として、自作の小さなプログラムをテスト対象に見立てて登録する手順を説明します。 「DateTest.exe」は [DATE] ボタンを押すと C 言語標準ライブラリ関数の time() と localtime() を呼び出して現在の日付を出力するものです。

HookDate.exe のプログラム一覧に DateTest.exe をドラッグ&ドロップします。

登録された行をダブルクリックして「2033年1月27日」という日付を設定してみます。

タイトルバーに表示されている通り、この時点ではまだ新しい設定は有効になっていません。 [ファイル] - [設定を保存] を選択して内容を確定します。

ふたたび DateTest.exe を起動し [DATE] ボタンを押すと日付設定が正しく反映されました。

使いかたは以上です。HookDate アーカイブに含まれる README.txt に詳細を記載していますのでご併読下さい。

■ 過去の改訂履歴


ver 1.0.1.0 (2007/09)
  • Windows Vista の UAC 環境に対応
  • HookDate.exe へ登録するプログラムの User32.dll への依存状況チェックを廃止
ver 1.0.0.0 (2007/08)
  • 最初の公開バージョン

■ 動作環境


HookDateの動作は以下のテスト環境において確認しています。
  • Windows 2000 Professional SP4 (x86)
  • Windows XP Home SP3 (x86)
  • Windows XP Professional SP3 (x86)
  • Windows Vista Business SP2 (x86)
  • Windows 7 Professional (x86)
  • Windows XP Professional SP2 (x64) *仮想環境
  • Windows Vista Business SP2 (x64)
  • Windows 7 Professional (x64)
上記以外の環境での動作確認は実施していません。
なお、Windows 95/98/Me および Windows NT では動作しません。

■ ダウンロード (バージョン 1.0.2.0)


ダウンロードの前に下記の使用許諾契約書を必ず最後までお読み下さい。
ダウンロードを開始された場合には本使用許諾契約書に同意されたものとさせて頂きます。

32bit Windows (x86) 用:HookDate_1020_x86.zip
md5sum:7CAFB46CD2D59C198D85C05A218BF5B9

64bit Windows (x64) 用:HookDate_1020_x64.zip
md5sum:B9B1DB9722023A7DF5DED85301CB8906


(tanabe)
klab_gijutsu2 at 14:03│Comments(29)win 

この記事へのトラックバック

1. [メモ]任意の実行モジュールを指定した日付で実行できるツール  [ ほげげの戯言 ]   2007年08月09日 17:53
任意の実行モジュールを指定した日付で実行できるツール。 何かと便利そう。。。φ(..)メモメモ プログラム開発にテストはつきもので、テストの際に特定の年月日でプログラムの動作を確認しなければならないことがよくあります。その場合に手っ取り早いのは「コンピュータ
2. 今日の気になった記事 - 2007/08/10 - ヒーリングシアター UMINE ほか  [ Desire for wealth ]   2007年08月10日 13:32
タカラトミー、音と連動する「ヒーリングシアター UMINE」−オーディオプレーヤーと接続、楽曲に合わせて投射 暑い夜とかARIAのサントラを聴きながら、ホームスターの星空を見るなんてことをよくやるけど、水面のほうがよさそう! リトラクタブル...
3. links for 2007-08-10  [ 気になる記事の書き出し帳 ]   2007年08月10日 18:28
Add a Digg Widget to your website ...
4. [dev] 時間に関係するテスト  [ akimatter ]   2007年08月11日 23:54
プログラム開発にテストはつきもので、テストの際に特定の年月日でプログラムの動作を確認しなければならないことがよくあります。その場合に手っ取り早いのは「コンピュータのシステム日付を変更する」という方法ですが、Windows ではバックグラウンドで多くのプログラムが

この記事へのコメント

1. Posted by ひかりんご   2008年09月24日 17:59
5 ようするに・・・

RunASDataと同じようなものですか?
2. Posted by tanabe   2008年09月24日 19:44
ひかりんごさん、コメントをありがとうございます。
情報を見る限りでは「RunAsDate」というツールと技術面での共通点は多いように思います。
外からも見える部分での違いとしては、HookDate は対象アプリをラウンチャー経由ではなく普通に実行することを前提としています。
3. Posted by anoworl   2010年06月08日 14:31
便利なツールなのでWindows7でも使ってみたいと思ったのですが、テストのメモ帳を起動したところ日付が反映されていませんでした。
Windows7への対応予定はあるでしょうか?
4. Posted by tanabe   2010年06月09日 11:01
anoworlさん、コメントをありがとうございます。
もしかしてお手元の Windows 7 環境は 64bit 版ではないでしょうか?以下はその想定でのお返事です。もし違っていたらお知らせ下さい。

HookDate は開発当時の OS シェアの趨勢から 32bit Windows 環境での32bit プログラムにのみ対応しており、公開中のバージョンは 64bit プログラムには対応していません。64bit プログラムへの対応は未定ですが、私自身の業務上の必要性が高くなれば着手するかも知れません。その場合はこのページでお知らせします。

ちなみに 64bit Windows 7 においても互換機構を通じて 32bit プログラムのみを対象に HookDate の機能を有効にすることは可能です。HookDate マネージャにデフォルトで登録される「メモ帳」のエントリが64bit Windows 7 環境において反映されないのは、その環境では「C:\Windows\system32\notepad.exe」が 64bit 版のメモ帳であるためです。32bit 版のメモ帳は「C:\Windows\SysWOW64\notepad.exe」です。パス設定を変更の上、そのモジュールでお試し下さい。
# 64bit Windows 環境で起動した 32bit プログラムのすべてに対して HookDate が有効に機能するかどうかはわかりません

以上、ご参考になれば幸いです。
5. Posted by moemoe   2011年10月11日 19:24
・すいません教えて下さい。体験版が30日とありますが、このソフトは期限内の日付(例えば明日)と入力するものなのか、それとも30日期限外の例えば20年後の日付を入力するのかどちらのタイプですか?
6. Posted by tanabe   2011年10月11日 19:33
moemoeさん、こんにちは。
体験版?HookDateは自作プログラムのテストを目的とするものです。ご了承下さい。
7. Posted by makott   2014年04月12日 19:29
5 登録できるプログラムの上限が19個までのようで、20個目を保存しようとすると、エラーが出て登録ができませんでした。

20個を超えて登録できないものでしょうか?
個人的には99個くらいまで登録できれば、と考えています。
8. Posted by tanabe   2014年04月16日 10:17
makottさん、こんにちは。手元が落ち着いたらおって確認してみることにします。
9. Posted by AutoCAD   2014年04月21日 10:33
4 CADソフト(AutoCAD2015)をインストールしましたが、エラー表示(0xc0000142)が出て起動できませんでした。「Autoruns for Windows」をダウンロードしてApplnitを表示してみると「HookDate DLL」が表示され、HookDateファィルを削除する事で起動できるようになりました。対処方法が、ありましたらご教示ください。よろしくお願い致します。
10. Posted by tanabe   2014年04月21日 11:08
AutoCADさん、こんにちは。HookDate は自作プログラムのテストを目的とするものですから「AutoCAD2015」を登録されたわけではないと思いますが、HookDate へ登録していないプログラムであっても起動時の初期化の段階で一時的にご指摘の DLL の影響を受けます。これは HookDate が Windows 本体の機能を利用するしくみであることに起因するものです。プログラムの仕様によってはその時点で処理を中止する可能性が皆無ではありません。そのような状況に遭遇された場合はプログラムテスト専用の PC や仮想環境のもとで HookDate をご使用下さい。

11. Posted by Toshi   2014年08月02日 12:37
5 HookDateの日時の設定はできてうまくいったのですが、時間、分の指定はできないものでしょうか?よろしくお願いします。
12. Posted by tanabe   2014年08月02日 19:04
Toshiさん、こんにちは。残念ですがHookDateは時・分の設定には対応していません。開発のきっかけとなった当時のプログラムテストにそこまでの精度の必要がなかったためです。ご了承下さい。
13. Posted by Toshi   2014年08月09日 15:52
5 時と分を固定する方法をいろいろ考えて他のソフト併用したりしてみたのですが、なかなかうまくいきません。有料対応でもかまわないのですが追加していただけないでしょうか?又は、プログラムを少しはいじれますので、ソースファイル譲っていただくことはできないでしょうか?自分で使うだけです。ご検討よろしくお願いします。
14. Posted by tanabe   2014年08月09日 17:22
目的を存じ上げませんがいずれにも応じかねます。なお、どうしてもそれを実現したいのなら別の方法を考えるほうがハードルは低いと思います。ご参考まで
15. Posted by Toshi   2014年08月09日 17:34
5 そうですか。
ありがとうございました。
16. Posted by SE   2015年08月20日 17:36
Windows Server 2012 では動作しますでしょうか?よろしくお願い致します。
17. Posted by tanabe   2015年08月20日 17:43
SE さん、こんにちは。手元に Windows Server 2012 の環境はなく開発時点で動作確認は行っておりません。宜しくご了承下さい。
18. Posted by utut   2016年02月17日 09:46
 HookDateのような便利なソフトを公開していただき、ありがとうございます。
 先日、不注意からHookDateをインストールした状態でHookDateフォルダの場所を変えてしまい、元のパスもわからなくなってしまいました。
 このような場合、他の場所でHookDateRegister.exeを実行し、HookDateをシステムに登録し直しても問題ないのでしょうか?
よろしくお願いします。
19. Posted by tanabe   2016年02月17日 10:48
utut さん、こんにちは。
>このような場合、他の場所でHookDateRegister.exeを実行し、
>HookDateをシステムに登録し直しても問題ないのでしょうか?
はい、その手順で大丈夫です。
HookDateRegister はレジストリの所定のエントリへ HookDate.dll のパスの登録・削除を行うもので、当該エントリにすでに有効なパスの HookDate.dll が登録されていれば削除モードとして、そうでなければ登録モードとして処理を行います。
もし当該エントリに無効な HookDate.dll のパスの記述を見つけた場合は登録モードとして機能し、その記述の除去を行った上で現在の有効なパス名の再登録を行います。お試し下さい。

20. Posted by utut   2016年02月17日 11:10
tanabeさま
丁寧に説明していただき、ありがとうございました。
21. Posted by suzuki   2016年06月07日 17:20
32bitアプリの場合は名前の後ろに" *32"が付加されますが、設定日付を変更したい場合にこの" *32"を削らないと保存できません。このとき「指定されたファイルは存在しません」というエラーになります。
いちいち" *32"を削らなくても保存できると使いやすいと思います。いかがでしょうか。(Ver1.0.2)

ちなみに、以下での動作はOKなようです。
・Windows8.1 Pro 32bit
・Windows10 32bit/42bit

22. Posted by tanabe   2016年06月07日 17:37
suzuki さん、こんにちは。コメントをありがとうございます。現時点では近々に本プログラムを改訂する予定はなく、お手元での運用でご対応下さい。今後の参考とさせて頂きます。
23. Posted by tatsuya   2016年11月16日 16:15
5 プログマムの開発でhookdateを使用させていただいており、感謝しております。

よろしければ1点ご教示いただきたいのですが、hookdateで日付を指定してプログラムを動かすと、0:00〜9:00は指定日付プラス1日、9:00〜24:00は指定日付に設定されておりました。
こちらはhookdateの仕様によるものでしょうか?

よろしくお願いします。
24. Posted by tanabe   2016年11月16日 16:59
こんにちは。HookDateは指定された日付を単純に対象プログラムのプロセスへ反映するつくりになっており当該プログラム実行時のシステム時刻は参照していません。そのためご指摘の所作は別の要素に起因するものである可能性が考えられます。また、万一HookDate内部に何らかの意図しない要因が含まれていた結果であったとしても現時点ではこのプログラムを改訂する予定はなく運用においてご対応願います。良い展開をお祈りします。
25. Posted by tatsuya   2016年11月17日 13:05
昨日の質問について、早速の回答いただきありがとうございました。
26. Posted by yctc   2017年04月25日 10:56
win10 64bitで利用予定です。
HookDateRegisterでレジストリ登録が成功しましたと出ますが、メモ帳でF5を試したところ、日付制御が出来ていないようです。
使えないか、環境を変えた方が良いでしょうか。
27. Posted by tanabe   2017年04月25日 15:38
こんにちは。手元の 64ビット Windows10 実験環境では特に問題は見られませんでした。HookDateRegister はレジストリの以下のエントリに「HookDate.dll」のパスをショートネーム形式で登録します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
もしレジストリエディタを使用されたことがあれば念のためこれらのパス名を確認して下さい。そこに問題がなければ別の要因と考えられますが、本プログラムの開発・保守は現在停止しており追跡のできない状況です。そういった事情によりその場合には万一の事故を避けるためにその環境でのご使用を見合わせて頂くようお願いします。
30. Posted by ryu   2020年04月01日 10:52
HookDateの便利でいつも助かってます。

さて最近[C:\ProgramFile(x86)]プログラムが存在しませんって出るようになりました。
原因って何が考えられますか?
31. Posted by tanabe   2020年04月01日 11:19
ryuさん こんにちは。
> 原因って何が考えられますか? 
環境・状況が不明であることに加え、すでに手元に開発環境が存在しないため現時点でご期待にそえるコメントができないことをまずご了承願います。
一般論としては、これまでまったく同一の環境で期待通りに動作していたということであれば、一旦アンインストールした上であらためてインストールを行う選択もあろうかと思います。
使用許諾契約書の「§3」および「§4」の内容、ならびに本コメント欄へ「2017年04月25日 15:38」に投稿したメッセージを再度ご確認の上ご判断下さい。良い展開をお祈りします。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント