PostMessageでマウスクリック操作

解決


雪平  2009-11-07 09:09:04  No: 36104  IP: 192.*.*.*

ウインドウハンドルをマウスカーソル位置で取得し
そこにPostMessageでWM_LBUTTONDOWNと
WM_LBUTTONUPを送ってマウス位置を
マウスクリックボタン以外で(例えば任意のキーとかで)
マウスクリック操作をする物を
作っているのですがウィンドウのクライアント領域は
下の方法でうまくいくのですが
タイトルバー上ではうまくいきません
(閉じる、最小化ボタンなどが動作しません)
タイトルバー上ではマウスメッセージを送るだけでは
だめなのでしょうか?
解決策が分かる方、おられましたらよろしくお願いします。

var p: TPoint; h: HWND;

GetCursorPos(p);
h := WindowFromPoint(p);
Windows.ScreenToClient(h, p);  //ここをコメントアウトしてもダメでした
PostMessage(h, WM_LBUTTONDOWN, 0, MakeLParam(p.X, p.Y));
PostMessage(h, WM_LBUTTONUP, 0, MakeLParam(p.X, p.Y));

編集 削除
ttt  2009-11-07 13:16:56  No: 36105  IP: 192.*.*.*

タイトルバーなどの部分はノンクライアント領域なので
WM_NCLBUTTONUP/DOWNではどうでしょうか?

編集 削除
雪平  2009-11-07 15:37:09  No: 36106  IP: 192.*.*.*

tttさん、ありがとうございます。
WM_NCHITTESTとWM_NCLBUTTONDOWN、WM_NCLBUTTONUPで
タイトルバーをクリックしたらアクティブには(ダブルクリックで最大化とかは)出来るようになりました。
ただ、下の方法では、システム、最小化、最大化、閉じるボタンが
WM_NCLBUTTONDOWN状態で止まってしまいうまくいかないです。
他アプリのタイトルバーのボタンを操作するのは、また違った方法が必要なのでしょうか。

gp = グローバル座標
nht = WM_NCHITTESTメッセージが返すコード

    PostMessage(h, WM_NCLBUTTONDOWN, nht, MakeLParam(gp.X, gp.Y));
    PostMessage(h, WM_NCLBUTTONUP, nht, MakeLParam(gp.X, gp.Y));

編集 削除
monaa  2009-11-07 15:55:07  No: 36107  IP: 192.*.*.*

mouse_eventの方が簡単に思えますが、
PostMessageの場合、基本的なWindowsMessageの流れを把握する必要があります。
WM_LBUTTONDOWNのWPARAMも0で大丈夫なんですか?
http://yokohama.cool.ne.jp/chokuto/urawaza/message/WM_LBUTTONDOWN.html

編集 削除
雪平  2009-11-07 17:12:23  No: 36108  IP: 192.*.*.*

Mouse_Event・・・こんないい関数があったなんて。
ありがとうございます。Mouse_Eventでうまくいきました。

PostMessageのほうを、調べてみたところ

ウィンドウ右上の閉じる(×)ボタンをクライアント領域に擬似的に配置する方法
http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/ea80973b-262a-4136-9518-c48022491652

ここを読んだ限りではボタンを押すのは無理っぽいので
WM_NCHITTESTの戻り値でボタンを判断し
WM_SYSCOMMANDを送って処理するしかないっぽいです。

皆様ありがとうございました。

編集 削除
雪平  2009-11-07 17:15:35  No: 36109  IP: 192.*.*.*

すいません解決ボタン押し忘れました。

編集 削除
雪平  2009-11-07 17:29:58  No: 36110  IP: 192.*.*.*

しかもここうぜぇぇ場所で
馬鹿で雑魚だなああああああwwwwwww

編集 削除
雪平  2009-11-07 17:31:45  No: 36111  IP: 192.*.*.*

俺が本物だよカスwwwwwww

編集 削除
雪平  2009-11-07 17:34:22  No: 36112  IP: 192.*.*.*

おめぇぇはきめぇぇし
すぐ怒る怒るしwwww
もう隠しも無駄だ!!

編集 削除
雪平  2009-11-07 17:37:00  No: 36113  IP: 192.*.*.*

おめぇはガキのくせに
生意気なんだよ
さっさとかかってこいよ!!
臆病者め!!!

編集 削除
雪平  2009-11-07 17:38:49  No: 36114  IP: 192.*.*.*

逃げてるし馬鹿だなあww
おいおいww

編集 削除
雪平  2009-11-07 17:41:49  No: 36115  IP: 192.*.*.*

何が「ありがとう」だとぉ?
認めねーよ雑魚!!!!

編集 削除