ClockLauncher 置き場(miki's Hom Page)

Windows98 から開発をはじめ Windows7 に仮対応した状態のままですが、作者自身 Windows10 でも現役で使用できています。
もう開発再開は無いと思いますが、せっかく世に出したものなので閉じずに置いておこうと思います。

Blog

ホーム | 記事一覧 | サムネイル | ワード検索 |

 2001年07月06日(金) ボーナス♪

本日、ボーナス明細もらいました。

ノートパソコン買おかな、マジで...

 2001年07月05日(木) InsertMenuについて(MFC)

ファイルアイコンがフォルダアイコンに化ける現象が直った気がするので、こっそり v1.11.1 に差し替えておきました。

いままでは、メニュー作成する際の InsertMenu のパラメータでコマンドIDと文字列を渡して、描画時にコマンドIDから配列サーチしたりして相当無駄な処理(というか、おかしな処理)してたんです・・・
プログラム的にどう考えてもおかしいとは思ってたんだけど(汗

MSDNで、ちょいと調べてみると、
nFlags lpszNewItem の解釈
MF_OWNERDRAW
アプリケーション提供の 32 ビットの値を保持します。この値は、アプリケーションがそのメニュー項目に割り当てる付加的なデータを管理するために使います。この 32 ビットの値はWM_MEASUREITEM メッセージとWM_DRAWITEM メッセージにより提供される構造体の itemData メンバに格納され、アプリケーションで利用できます。これらのメッセージはメニュー項目が初期表示されたとき、または変更されたときに送られます。
などと、書いてありました。
オーナードロー(MF_OWNERDRAW)の場合、別に文字列じゃなくて構造体のポインタ渡してもよかったんだね(汗

速度的にはミリ秒単位でしか変わってないとは思うけど、プログラム的にはかなりスッキリしました。
というか、いままでしょぼいプログラム書いてた・・。

分かる人にしか分からない内容だけど、まだまだ未熟です。

 2001年07月04日(水) ClockLauncher v1.11

毎日のようにバージョンアップしてるんですが、いいんでしょうかねえ?
ここも、開発日記になってるし...

さて、今回はランチャメニューの折り返し設定と、サブメニュー展開時にフォルダを開けるようにしてみました。
前者はどうでもいいんですが、後者に関してはサブメニュー展開の使いみちが結構増した気がします。

あと、フォルダをサブメニュー展開した時、ファイルが多かった場合折り返すというのも出来たんですが、ちょっと試した結果未実装となっています。

というのは、2列程度に広がるくらいのファイル数なら結構便利なんですが、Windowsフォルダのようにファイルが数百もあるような所だと画面いっぱいにメニューが広がってしまって大変使いにくかったのです。
しかも、一度に表示できるメニュー項目の数が増えるためアイコンの取得から描画までに若干時間がかかってました。

まあ、そんなフォルダを展開することは無いと思いますが・・・

 2001年07月03日(火) エアコン付いた♪

もらいものだけど、無いよりまし。

とあるホームページで「ファイルやフォルダの検索」ダイアログの呼び出し方法が載っていたので、ClockLauncherのおまけ項目に追加しておきました。
IShellDispatch *pShellDispatch;

CoInitialize( NULL );
if ( S_OK == CoCreateInstance( CLSID_Shell, NULL, CLSCTX_INPROC_SERVER, IID_IShellDispatch, (void **)&pShellDispatch ) )
{
  pShellDispatch->FindFiles();// 「ファイルやフォルダを検索」
  pShellDispatch->Release();
}
CoUninitialize();
ちなみに、pShellDispatch->FileRun() にすると「ファイル名を指定して実行」になる。

 2001年07月02日(月) 雑誌

なんとなく「日経ソフトウェア」と「C MAGAZINE」を買ってみた。

意外と初歩的なことから書いてあったので、プログラミングはじめたての学生なんかが読むと為になるだろうなと感じた。

 2001年07月01日(日) あぢー

エアコンのない部屋で過ごすのは地獄だ...

さて、Windows2000での半透明ウインドウ。
興味本位でつけてはみたものの、まったく意味ない機能ですね(笑

ソースコードは以下のとおりです。
// 1) OSのチェック
GetVersionEx( &os );
if( os.dwPlatformId == VER_PLATFORM_WIN32_NT && os.dwMajorVersion >= 5 )
{
  // Windows2000
}

// 2) ウインドウスタイルの変更
LONG exstyle = GetWindowLong( hWnd, GWL_EXSTYLE );
// 0x80000 = WS_EX_LAYERED 半透明ウインドウ
SetWindowLong( hWnd, GWL_EXSTYLE, exstyle | 0x80000 );

// 3) 半透明処理
if( (hDLL = LoadLibrary( "user32" )) )
{
  typedef DWORD (WINAPI *PFUNC)( HWND, DWORD, BYTE, DWORD );
  PFUNC pFunc = (PFUNC)GetProcAddress( hDLL, "SetLayeredWindowAttributes" );
  if( pFunc ) pFunc( hWnd, 0, alpha, 2 ); // alpha = 透明度(0〜255)
  FreeLibrary( hDLL );
}
SetLayeredWindowAttributes、
パラメータの渡し方で、カラーキー設定できたりもするので使い方によっては面白い効果が出せそうですね。

 2001年06月29日(金) メモリ量表示と、掃除機能

物理メモリ量の表示は、もともとつけたいと思ってたんですがAPI調べてなかった為未実装だったんです。
メモリ関係の要望を頂いていたこともあり、ちょっと実装してみることにしました。

メモリ情報の取得には、GlobalMemoryStatus( &m_MemStat );を使い、メモリ掃除は任意のサイズのメモリを一時的に確保しすぐ解放するという方法です。
これによって、OSが保持しているメモリを強制的に解放させるというわけです。

短時間で作成したわりには、それっぽく動いてるようです(汗

 2001年06月28日(木) 今日の修正

付箋メモ入力の際、最初から日本語入力モードにするというもの...
if ( (himc = ImmGetContext( m_hWnd )) ) {
  ImmSetOpenStatus( himc, TRUE );
  ImmReleaseContext( m_hWnd, himc );
}
たったの 4行で出来てしまいました(笑

特にデバッグするほどのものでもなく、即アップ。
このくらいの修正だと、楽でいいですね。

あと、デスクトップクリック動作に「新規付箋メモ」の項目を設けました。

 2001年06月26日(火) スタートメニュー

今日は、デスクトップダブルクリック動作にスタートメニューを表示させる項目を追加してみました。

まず最初に考えた方法は、ウィンドウズキーでスタートメニューが表示されることを利用し、プログラム中からウィンドウズキーが押されたっていうメッセージを送ってみるというもの。
さっそく実装しようとおもったんだけど、肝心のウィンドウズキーのキーコードがわかんない。
VK_...なんだろ?
ためしにVCインストールフォルダでVK_でグレップしてみると...それらしいのが出てきました。
WINUSER.H(373): #define VK_LWIN 0x5B
WINUSER.H(374): #define VK_RWIN 0x5C
これかな?
とりあえず、デスクトップやタスクバーなどにPostMessage( hDesktopWnd, WM_KEYDOWN, VK_LWIN, 0 );な感じでメッセージを送ってみるが上手くいかない。
そもそも、どのウインドウハンドルにメッセージを送ればいいのだろう?
ひょっとして、この方法じゃダメなんじゃ...?

で、次に考えたのがタスクバーのウインドウハンドルからスタートボタンのウインドウハンドルを取得して、マウスクリックのメッセージを送信するというもの。
ためしに書いてみる。
hwnd = FindWindowEx( NULL, NULL, "Shell_TrayWnd", NULL );
hwnd = FindWindowEx( hwnd, NULL, "Button", NULL );
PostMessage( hwnd, WM_LBUTTONDOWN, 0, 0 );
なんだか、今度は上手くいきました(笑
ほんとに、こんなソースコードでいいのでしょうか?

(Windows98でしか動作確認してないです)

 2001年06月24日(日) タクオー漬け

は〜、今日は一日中「タクティクス・オウガ外伝」やってたきがします。

あの、重いシナリオ・魅力的なキャラクター・洗練されたシステムは健在で、どれをとっても否の付けどころ無いです。
GBA版も完成度高くて嬉しいです。

ターン制になったり、行動のあと移動できなくなったりと、システムに若干の変更はあったものの、やっぱり良く出来てます。
細かい変更点に関しても携帯ゲーム向けにあえて変更したんだろうなと思えますし...

まだ先は長そうだし、きっとマルチエンディングだろうから長く遊べそうです。
マルチエンディングで全パターンやりたく思わせてくれるゲームって本当すごいよね。

さ〜て、寝る前に続き少しやろっと...(汗

 2001年06月22日(金) Clock Launcher v1.03

マウスアシスト機能で、ウインドウの中央でなく「OK」「はい」などのボタンに向かわせるため少し細工をしてみました。
はっきり言って、不完全でウインドウやダイアログの作成者に依存してます。
というのは、親のウインドウハンドルを使ってFindWindowExでボタンクラスの子供ウインドウを探してるだけだからです。
チェックボックスやラジオボタンもボタンクラスに含まれるので、不規則に配置してあったりするとどこに行くかわかりません...(汗
hChildWnd = FindWindowEx( hParentWnd, NULL, "Button", NULL );
GetWindowRect( hChildWnd ? hChildWnd : hParentWnd, &rc );
Target.x = rc.left + (rc.right - rc.left) / 2;
Target.y = rc.top + (rc.bottom - rc.top ) / 2;

...な感じのソースコード。
もっと良い方法あるよ。...という方いたら教えてください。

あと、デスクトップダブルクリックの動作として、ランチャーメニュー表示の他に任意のプログラムを実行する設定を設けたので、本当に良く起動するプログラムを設定すると便利になるかもしれません。

どうも、メールチェックにバグあるようですね。
Msvcrt.dllのバージョンによって不正落ちするらしいのでメールチェック機能使う方は注意してください。
環境設定の保存は、プログラム終了時に行っていますので不正落ちなどすると設定が保存されません。
もし設定をたくさんした場合は一度終了して起動しなおすと良いでしょう。

 2001年06月21日(木) タクティクスオウガ

お昼休みに、会社近くのお店で買ってきました「タクティクスオウガ外伝」
\3,980でした。
待望のゲームがこの価格で手に入るなんて嬉しいことです。
しばらくランチャーの開発も止まることになるでしょう...

 2001年06月20日(水) マウスアシスト機能 2

昨日、マウスアシスト機能をつけてはみたものの瞬時にマウスカーソルが別の場所に移動してしまうと、カーソルを見失ってしまうことがあります。
やはり移動途中の軌跡も描画してやらないと使いにくい気がするので、さっそく実装してみることにしました。

このような処理をやる場合はタイマーを使うのがお決まりで、とりあえず標準のSetTimer関数を使ってみました。
...が、予想通り精度が悪い。
ミリ秒指定できるにもかかわらず、どう考えてもその精度で動いてくれないのです。

しかたなく、マルティメディアタイマを使用してみたところ今度は気持ち良いくらいスムーズに移動中の軌跡を描いてくれました。

う〜ん、良い感じ。

現時点ではウインドウの中央にしか向かっていかないのですが、やはり「はい」「OK」「確定」などのお決まりのボタンの上に向かって移動してくれたほうが使いやすいですよね?
ボタンの判断が難しいところなので未実装ですが良い判断方法が見つかり次第実装する予定ですので...

 2001年06月19日(火) マウスアシスト機能

今日は開発日記を少し...
前回、CLHook.dllを作成し外部のメッセージを拾えるようにしたので、できることが少し広がった感じがします。
アクティブなウインドウを追っかけるのもそうだし、デスクトップダブルクリックでメニュー表示するのもそうです。
いまやってみたいと思っているのが、新しく開いたウインドウにマウスが勝手に移動してくれるマウスアシスト機能です。
現時点で私は、BearMouse というソフトをスタートアップに登録して使っているのですが、CLockLauncherにもシンプルでいいからマウスアシスト機能を実装してみたいと思いました。

ということで、さっそく考えてみることにします。

何らかのウインドウが表示されたらそのウインドウの中央にマウスを移動させればいいのだから、WM_SHOWWINDOWメッセージをつかまえてその時のウインドウハンドルからGetWindowRectでウインドウのサイズを取得。
そこからウインドウの中央を計算してSetCursorPosでマウスカーソルを中央に移動する.....だけかな?

なんだ簡単に出来そうじゃん。

実装してみると、上手くいかない。
どうやら、ウインドウ内のボタンやらリストやらスクロールバーやらのWM_SHOWWINDOWメッセージをつかまえてしてしまい、ウインドウの中央でなくボタンの中央だったり、スクロールバーの中央だったり見当外れの位置にマウスが移動しちゃう。

親ウインドウだろうが子供ウインドウだろうが、メッセージ処理してるはずだもんな...などと怪しい解釈をし、ウインドウスタイルが子供ウインドウ(WS_CHILD)だった時は処理しないようにしてみると....ちゃんとウインドウ中央にカーソルが移動してくれるようになった。

う、うれしい。 (こういう小さな喜びがたまらないのです^^)

ニヤニヤしながらテストしてると問題がひとつ。
「ファイル」「編集」やらのメニューを開いたときの、ポップアップメニューにも反応してしまいえらい使いにくいこと、この上ない。
へ〜、これって子供ウインドウじゃなかったのか?などとさらに適当に納得し、ポップアップメニューのウインドウクラスは分かっていたので、これもメッセージ処理しないようにしたところあっけなく解決。

しばらくテストしてみると、またまた問題が。
なぜか「秀丸」に限ってツールチップ(アイコンボタン等の上に出るやつ)にも反応してしまうのです。秀丸のツールチップは自前ウインドウなのか?(謎

いろいろ悩んだあげく、メッセージを受け取ったウインドウハンドルとGetForegroundWindowで取得したウインドウハンドルが一致したときだけ処理すれば上手くいく事が判明しました。
なんか、この方法にしたら子供ウインドウかどうかの判断とポップアップメニューかどうかの判断が必要なくなったのですが...
とりあえず動いたので暫くこれでテストしてみようと思います。

...と、こんな感じで日夜バージョンアップしているのです。

 2001年06月17日(日) ブロードバンドルータ

家のLAN用にブロードバンドルータを物色、価格デザインともに悪くないメルコのブロードバンドステーションなるルータ(BLR-TX4)を発見し、早速購入しました。
設定すること30分、あっけなく家庭内LANの完成です。
こういうのにてこずると気分悪いんだよね。
ADSLモデムの時は最悪だったけど、今回は一発でうまくいったので良かった。

でも、ISDNにしたときにはモデム、LAN組んだ時にはTA、ADSLにしたらISDNルータのように通信環境変える毎にいらなくなる機械が出るんだけど、誰か貰ってくれる人いないかな?

将来FTTH(光)になればADSLモデムは要らなくなるしな〜

 2001年06月16日(土) つながった!

9:00に起きて、まず「116」にかけたら「113」にかけてくれと言われ
次に「113」にかけたらADSLのことはフリーダイアルのほうにかけてくれと言われ...
んで、そっちにかけたら今度はぜんぜんつながらない。
10:00くらいまでコールしまくったけど、ず〜と話中。
それ以降も適当に時間おいてかけ続け、やっとつながったのが13:00...なめてんのかNTT!!

とりあえず症状を話して、調べてもらったところ回線は問題ないとのことで、「ADSLモデムからパソコンへの接続がおかしいみたいですね」と言われて、それは絶対無いよと言い張ったら、んじゃ伺いますだってさ。

それから1時間ほどしてNTTの人が尋ねてきて、びっくり。
中学のときの同級生だった奴でした(笑
地元をいろいろ回ってるらしく、知り合いにあうことはよくあるとか。

さっそく回線のテストとADSLモデムみてもらったけど問題なさそう...
ふと、ガス屋の電話回線使ったサービスついてるかもしれないというのを思い出して話したところ、一件前の家はそれだったから見てみようということで、開けてみたんだけど既にはずされてて全く関係なかった。う〜ん...まいった。

次に動作確認取れてるADSLモデムとノートパソコンを持ってきてくれていたので、それでテストしたところ.....つながった!?

(なんで〜?もしかしてパソコンのせい?)

今度は、そのADSLモデムと俺のパソコンでやってみたら....あっけなく、つながりました!
結局ADSLモデムの初期不良ということで落ち着いて解決しました。

でもさ、これだけのためにNTTの人3人で来たんだけど1人でじゅうぶんだろ?
1人1件まわれば3件まわれてるじゃんかよ。人件費の無駄遣いだよな、まったく。
ま〜、繋がったから許す^^;

さっそくMTUの調整などして、ADSLのテストしたんだけど、最高171KByte/sくらいまで出ました。
171KByte/sということは...え〜と約1.3Mbps!?
はえー、昨日アナログモデムで40Kbpsでつないでたのが馬鹿みたいです。
夜はもう少し落ちるとしても、かなり満足の行くスピードでてますね。

よかったよかった。

 2001年06月15日(金) つながらーん

適当に調べてみたけれど、怪しいところないしわけわからん。
ドライバ類アップデートしても状況かわらないし...もう、NTTに聞いてみるしかないかな?
サポート受付時間9:00〜17:00なんで、明日電話してみよ。

ADSLにしたというのにアナログモデムで接続している俺っていったい...

 2001年06月14日(木) ADSL切替日

フレッツ接続ツールのインストールからIDパスワード等の設定を終えて、
わくわくしながら接続を試みるも「E0040P:ネットワークに接続できません」と出てつながらない
プロパティー開いたりいろいろやってると突然ブルーバックの画面になりWindows再起動...

どういうこと?

フレッツ登録時のプロバイダからのメールを確認するが、IDパスワードのことが書いてあるだけで、
設定方法、Q&Aなどは、下記のアドレス参照してくださいとURLが書いてあるだけ。

こういうときはインターネットで調べれば、たいてい解決への糸口見つかるんだけど、インターネットつながらないんじゃ何も出来ない。

Windows98、2000それぞれで試しても同じような結果なので、あきらめて寝ました。
明日、会社で調べてから再チャレンジだな。

がっくし...

 2001年06月13日(水) ClockLauncher v1.00

v0.01からはじめて、やっとv1.00にたどり着きました。
ここまで半年以上かけてるけど、自分ではかなり使いやすくなったと思ってます。
まー、自分が一番に使いやすいようカスタマイズしてるんだから当然といえば当然なんですけどねー
でも、そこそこユーザーさまも増えてるみたいで結構うれしいです。

いろいろ機能つけてきてプログラミングの勉強にもなったし、C++,SDK,MFC結構わかってきました。
v1.00から、メッセージフック用のDLLつけたんですが、意外に苦労したのがデスクトップWクリックで出たポップアップメニューがなかなか消えない現象で、いろいろHP見て回ってなんとか回避させたつもりです。
デスクトップWクリックの判断も、これでいいのか?って感じで実装してありますが意外とうまくいってるみたいです。

こう書くと、あやしいげな部分もありますが温かい目で見守ってください。

 2001年06月11日(月) エクソダスギルティーネオスクリア

神とか悪魔とか重そうなテーマを扱っているにもかかわらず、管野風にわかりやすくまとめられている点が良かった。
ストーリも壮大で泣けるシーンもちらほら。いや実際には泣いてないけど...
買って1週間ほどでクリアしたわけだが、この程度のゲームが一番嬉しいね。

DCの「探偵紳士DASH!」もやってみたいんだけど、どこにも売ってないのよね...

Category

全て
ClockLauncher
LINEスタンプ
Giorno&Ciao
マイホーム
ゲーム他
懸賞
飲み食い
仕事
車、自転車
祝い事、記念日
日常






ページのトップへ戻る