喫茶XRAYトップページ


[1554] 涙がちょちょ切れるほど嬉しいです。返信 削除
2008/2/15 (金) 23:13:15 宮 〔HomePage
マスターあれからサンプルをDLしていろいろいじりながら
http://homepage2.nifty.com/Mr_XRAY/Halbow/Chap04.html
を読みながら勉強しています。
本当にすばらしい。

喫茶店で予想外の(知らぬが仏)重い質問をしてすみませんでした。

申し訳ありませんが後一つ、
下記のことをしていますが問題ないでしょうか。

通常、左・#95;ブルクリックはビューワーが起動しますが
1 で左の・#95;ブルクリックに変えています。
2 でこの処理をしたら後にメッセージを渡さない。
(そうしないとビューワーも起動するので)としたいのですが
上記のホームページに
・・・「 ここで示したようにメッセージ伝達機構の
ある断面を「のぞき見て」から、本来の流れに戻すという
手法が一般的であるし「完全犯罪」??の可能性も高い。・・・」
この文が気になるのですが、問題はないのでしょうか。
いま探せないですが、メッセージを後へ渡さないで断ち切る
コードがあると読んだ記憶があるのですが気になります。

============Mr_XRAYさんのサンプルの一部==========
function MouseProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var
    szClassName : array[0..255] of Char;
begin
     if (nCode < 0) then begin
       Result := CallNextHookEx(HookID, nCode, wParam, lParam);
       exit;
     end;

     if (wParam = WM_LBUTTONDBLCLK) then <---------1------左・#95;ブルクリック
     begin
       GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND,szClassName,SizeOf(szClassName));
       if lstrcmp(@szClassName[0], @LV_name[1]) = 0 then
       begin
         SpeedButton1Click(nil);
         exit; <-----------2---これで後へメッセージを渡さない。
       end;
     end;
     Result := CallNextHookEx(HookID, nCode, wParam, lParam);
end;
================================
m(_ _)m




[1555] マウスフック関数で本来の動作を禁止する方法返信 削除
2008/2/16 (土) 00:36:26 Mr.XRAY
▼ 宮さん

>      if (wParam = WM_LBUTTONDBLCLK) then <---------1------左ダブルクリック
>      begin
>        GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND,szClassName,SizeOf(szClassName));
>        if lstrcmp(@szClassName[0], @LV_name[1]) = 0 then
>        begin
>          SpeedButton1Click(nil);
>          exit; <-----------2---これで後へメッセージを渡さない。
>        end;
>      end;
>      Result := CallNextHookEx(HookID, nCode, wParam, lParam);
> end;


これだと,ダブルクリックで本来の動作をしてしまうと思いますが.
しませんか? しないならそれでいいですけど.
明日(いや,もう今日ですが)試してみます.
マウスフック関数WH_MOUSEでは,マウスメッセージを目的のウィンドウに送られる
のを禁止するには,0以外の値を返す必要があるハズです.よく使用されるのは,
HS_SKIP(HC_SKIP(=2?)だったかな?)です.

         SpeedButton1Click(nil);
         Result := HC_SKIP;  //0以外ならなんでも可
         exit; <-----------2---これで後へメッセージを渡さない。
                                  //これだけだと渡ってしまいます.
                                  //このままではResult値が不定,つまり0な
                                  //ので.Delphiでは値を代入していない値は0
       end;

[1556] Re:マウスフック関数で本来の動作を禁止する方法返信 削除
2008/2/16 (土) 12:57:04 宮 〔HomePage
▼ Mr.XRAYさん
> これだと,ダブルクリックで本来の動作をしてしまうと思いますが.
> しませんか?


すみませんm(_ _)m
私が昨日、いろいろ(理解しないくせに)がちゃがややっていたら
成功したはずだったのですが、今日、やってみるとおっしゃるとおり
起動します。?????(#やはり幻だったのか・・・)

人は、アイコンを見たら、自然にダブルクリックする習性がありますが、
そこで、目的は選択したファイル名を取得できればいいのだから
通常の左クリックで

     if (wParam = WM_LBUTTONUP) then begin<-----左クリック
       GetClassName(PMOUSEHOOKSTRUCT(lParam)^.HWND,szClassName,SizeOf(szClassName));
       if lstrcmp(@szClassName[0], @LV_name[1]) = 0 then begin
         Form1.SpeedButton1Click(nil);
         Result := HC_SKIP; <-----付けました。
       end;

マスクをご説明の通り
 mask := LVIS_SELECTED or LVIS_FOCUSED;<-----フォーカスを追加しました。

としてみましたら、ダブルクリックではないけど
指定したファイル名を取得でき、
アイコン以外の余白はクリックしても受け付けず、
左クリックコンテキストメニューもつかえて
万々歳だと思うのですが。
いかがでしょうか。




[1557] Re2:マウスフック関数で本来の動作を禁止する方法返信 削除
2008/2/16 (土) 16:59:46 Mr.XRAY
▼ 宮さん

>(#やはり幻だったのか・・・)

プログラマーは時々幻覚を見ることがあるそうです (^_^;)
特に年をとると更に... (冗談です!!)

> 万々歳だと思うのですが。
> いかがでしょうか。


好みの問題です(笑).


[1558] Re3:マウスフック関数で本来の動作を禁止する方法返信 削除
2008/2/17 (日) 00:41:47 宮 〔HomePage
▼ Mr.XRAYさん
>
> プログラマーは時々幻覚を見ることがあるそうです (^_^;)

ハッハッハッ。
年のせいで幻を見たりテレビに腹を立てたりすることが多いです。
理詰めで積み上げてやっていないので、その場その場でぱっぱっと
やっぱりだめだ〜の繰り返しで、何の残骸が残っての結果だったのかすら記録にない。

前にも書いたかもしれませんが
上京してすぐいま話題の港区に居抜きで住宅付きのボロ喫茶店を買ったのですが
ぶっ壊すのはもったいないので婆さんと二人で「やってみようか」と
周りの心配をよそに、ド素人がおっぱじめました。
2009年から6年間私も喫茶店のマスターでした。(^^;)
最近見かけなくなった、大人が安らげる喫茶店にしようと
リニューアルし、コーヒー500円でガキはオフリミットです。
(五月蠅い奴は追い出したし、客とも喧嘩をしてました)
近所にテレビ制作会社やスーパーモデルクラブがあり
結構、有名人やタラバガニみたいに足の長い女の子も来てくれたり、
お水さんたちが出勤前に一服してました。
有り難かったのですが、疲れるので9時開店6時閉店で土日際休みしました。
お客に、やる気があるの?とよく笑われていました。
ドラマのロケにも何回か貸したので見ているかも。
婆さんが「もう疲れた。体あっての物だね」というので閉店。
今は小生のリビングに再改装してPCと遊んでます。
バレンタインは結構チョコをもらってたなぁ。楽しかった〜。(笑)

それが、いまどうしてコ難しいプログラムと格闘してんだろ??
やっぱ、喫茶店でもやってた方が呆けなくて良かったかも。
では。


[1560] Re4:マウスフック関数で本来の動作を禁止する方法返信 削除
2008/2/18 (月) 23:48:51 Mr.XRAY
▼ 宮さん

> それが、いまどうしてコ難しいプログラムと格闘してんだろ??

何故なんでしょうね.
私も,何故こんなことやっているのか不思議です.
プログラミング,それは不思議な世界です.と思います.あぁ〜.

INCM/CMT
Cyclamen v3.82