03543
金魚鉢
ホームページへ戻る
ご意見・ご要望ございましたらここに書き込みをお願いします。
最近はあまり対応できていなくて申し訳ありません。


Alt+Tabの乗っ取りについて / サトイモ
windowfrogいつも便利に使わせていただいています。

要望なのですが、
Alt+Tabをwindowfrogに置き換える機能があってとても便利なのですが
これの逆はできないでしょうか?

つまり通常のAlt+Tabで呼び出されるデフォルトの切り替え用ウィンドウをwindowfrog起動時のマウスクリック+ホイールで呼び出せるというか
マウスクリック+ホイールでPCにAlt+Tabのキーが送られるような機能という感じです

design.iniのカスタマイズでデフォルトの切り替え用ウィンドウに近づける事もできますが
少し手間なので・・・

No.221 2010/10/19(Tue) 13:18:08

Re: Alt+Tabの乗っ取りについて / Goldfish(管理人)
Windowfrogをご利用いただきありがとうございます。

ご要望についてですが、実現することは可能だとは思いますが、それだとWindowfrogの存在意義がなくなる気が…(^^;)

この場合フリーのマウスジェスチャツール(ex.マウ筋)で実現する方が適しているかと思います。

No.222 2010/10/19(Tue) 21:09:20

Re: Alt+Tabの乗っ取りについて / サトイモ
>>それだとWindowfrogの存在意義がなくなる気が…(^^;)

うわ、言われてみるとその通りですね・・・
大変失礼しましたorz

No.223 2010/10/21(Thu) 12:50:15
Windowfrogについて / zoon
最近Windowfrogを使い始めたのですが、
ウィンドウ切り替え後カーソルが一瞬固まり動かなくなります。

あと、alt+tabを押すと自動でカーソルを中央に移動させる設定にしているのですが、カーソルを動かしている時にalt+tabを押すとカーソルが中央に移動しません。
環境は windows7 64bit Windowfrog 1.20.10 です。

もし改善できることでしたら変更していただけると
ありがたいです。よろしくお願いします。

No.214 2010/09/30(Thu) 16:18:36

Re: Windowfrogについて / Goldfish(管理人)
windowfrogをご利用いただきありがとうございます。

・1つ目の問題ですが、ウィンドウの切り替えの関係の処理を若干変更しました。遅延の問題は大分改善されたと思います。

・2つ目の問題も、少し無理やりな感はありますがカーソルが戻らないよう工夫しました。が、完璧ではないです…これが今の限界です。


ウィンドウの切り替えをいじったのが少し不安ですが。。
今のところ自分の環境では上手く動作しています。
ご確認よろしくお願いします。

No.215 2010/09/30(Thu) 23:07:11

Re: Windowfrogについて / zoon
早速の対応ありがとうございます。
ウィンドウ切り替え後の延滞はまったくなくなりました。

他にも要望があります。

設定内容を
・選択/決定方法をホイール回転/ボタンを離す
・「Alt」+「Tab」をWindowfrogに置き換える、標準モード
で他の設定はデフォルトの状態で使用したいのですが

マウスのボタンに「Alt+Tab」を設定しボタンを押したまま
にすると常に「Alt+Tab」が押された状態になってしまうので、
ウィンドウが選択できなくなってしまいます。

もうひとつは、カーソルが画面の中央から離れている時に
一つ前に開いていたウィンドウの位置に自動でカーソルが
移動してくれると便利です。

No.216 2010/10/03(Sun) 03:05:03

Re: Windowfrogについて / Goldfish(管理人)
申し訳ないのですがご要望をもう少し詳しくお聞かせください。

>マウスのボタンに「Alt+Tab」を設定し
これは外部ソフトを利用してマウスボタンにAlt+Tab操作を割り当てているということですか?それとも単にwindowfrogを起動させておくという意味ですか?

>ボタンを押したままにすると常に「Alt+Tab」が押された状態になってしまうので、
>ウィンドウが選択できなくなってしまいます。

これはwindowfrogを起動させていると、マウスボタンを押した状態でかついまだホイール回転がなされていない状態ではマウスボタン押下が効かなくなってしまっているということでしょうか?
仮にその場合でしたら、設定→マウス→詳細→タイムアウト値を小さくすると、windowfrogの表示はシビアになりますが、より通常のクリックに近い動作をシュミレートできます。

ちなみにwinndowfrog側でAltやTabのキー操作の生成はしていません。

>もうひとつは、カーソルが画面の中央から離れている時に
>一つ前に開いていたウィンドウの位置に自動でカーソルが
>移動してくれると便利です。

これはおもしろいアイディアだと思いますが、どのタイミングでカーソルを以前のウィンドウ位置に移動させるかが問題となると思います。常に強制的にウィンドウの位置にカーソルを固定させるわけにはいきませんし。。笑

以上の点よろしくお願いします。

No.217 2010/10/03(Sun) 07:55:54

Re: Windowfrogについて / zoon
使用しているマウスはLogicoolのWireless Mouse G700でマウスのボタン設定のソフトは専用ソフトのSetpointというソフトを使っています。マウスのボタンの一つに「Alt+Tab」を設定しているのでそのボタンを押したままの状態だと「Alt+Tab」がずっと押されたままの状態になります。

キーボードで「Alt+Tab」を押しっぱなしにしているとウィンドウが選択できなのと同じで「Alt+Tab」を設定したボタンを押し続けると、Altが押されたままTabを離す動作にはならず、「Alt+Tab」がずっと押されたままの状態になりウィンドウを選択できない状態になります。
ブラウザとファイラーなど2つのウィンドウを交互に切り替えて使う時は「Alt+Tab」のボタンを一度押しすぐマウスのボタンを離せば前のウィンドウに切り替わるので問題ないのですが他のソフトのウィンドウに切り替える時は右クリック+ホイール回転で使っているのでこれを「Alt+Tab」を設定したボタン一つで操作できないかと思っていました。

Windows XPを使用していた頃はLigicoolのMX1100というマウスで同じくSetpointというソフトで設定しVistaSwitcherというソフトでウィンドウ切り替えをしていましたが「Alt+Tab」を設定したボタン一つで操作できたのでWindows7でも同じように動かないかと試行錯誤しています。


カーソルの移動についてはホイール回転でwinndowfrogのウィンドウを選択するよりカーソルを動かして選択したかったので前バージョンで「Alt+Tab」を押した時に画面の中央にカーソルが移動するのをwinndowfrogのウィンドウの中の1つ前に開いていたウィンドウの位置に移動できないかと思いました。
もしくは画面の中央の位置に1つ前に開いていたウィンドウを移動させる設定などです。

No.218 2010/10/03(Sun) 18:49:25

Re: Windowfrogについて / Goldfish(管理人)
ありがとうございます。

一つ目ですが、「Alt+Tab」ボタン一つでウィンドウを切り替えるということが、申し訳ないのですがいまいち理解できません(^^;)
windowfrog(に限らずタスク切り替え)を呼び出してウィンドウを選択→アクティブ化する場合、最低でも「選択」「決定」の2種類のコマンドを必要とすると思います。
「Alt+Esc」のような動作なら可能ですが、それだとwindowfrogの意味ないですし 笑
もしくはまだ解釈が違っているのでしょうか・・・

よろしくお願いします。

No.219 2010/10/04(Mon) 23:00:40

Re: Windowfrogについて / zoon
言葉だけで説明するのはなかなか難しいものですね。
いろいろと要望を聞き入れていただき大変感謝しております。

Windowfrogは現在のバージョンを使わせていいただきます。
ありがとうございました。

No.220 2010/10/05(Tue) 01:44:26
Windowfrogについて / caferatnica

今日、こちらのWindowfrogを使用させていただき、すぐに気に入りさっそくスタートアップに登録させていただきました!
一つ気になったことがあるんですが私の環境で "マウスカーソルをウィンドウ中央に移動する"( この機能はマルチディスプレイで使用しましたがとっても便利です! ) を有効にして動作させてみると移動する前にカーソルが瞬間ハングアップしたようになります。環境は xp sp3 です。

ディスプレイは全部で6台使っています。
よろしくお願いします!

No.212 2010/08/26(Thu) 06:28:00

Re: Windowfrogについて / Goldfish(管理人)
Windowfrogをご利用いただきありがとうございます。

> 移動する前にカーソルが瞬間ハングアップしたようになります。
こちらですが、ウィンドウの切り替えの際の処理が原因で発生していた遅延でしたm(__)m
ご報告ありがとうございました。

修正版に更新しましたのでご確認ください。よろしくお願いします。

No.213 2010/08/27(Fri) 06:37:00
サムネイルについて / 茶美
Windowfrogをダウンロードして使わせていただいているものです。design.iniにファイル名を変更して"thumbnail"を1にしてるのですが、サムネイルが表示されません。環境はwindows xp sp3です。何が原因なのでしょうか。そこ以外は書き換えていません。
サムネイルが出ないことでひとつ思いついたのですが、アイコンのあるウィンドウの背景色を半透明にする機能があれば枠表示の時に下の画面が透けて見えるので便利だなと思いました。

No.207 2010/08/18(Wed) 01:54:32

Re: サムネイルについて / Goldfish(管理人)
Windowfrogをご利用いただきありがとうございます。

サムネイルの表示ですが、この機能はVista以降の機能を利用しているためXPでは表示されません。説明書きが抜けていたかもしれません。申し訳ありませんm(__)m

>アイコンのあるウィンドウの背景色を半透明にする機能
Windowfrog自身が半透明になるという事ですよね??
早速実装してみました。
design.iniのWindowセクションのalphaという項目で透明度を設定できます。1〜255の範囲で値を設定すると、値が小さいほど透明度が増します。こんな感じでいかがでしょうか?

よろしくおねがいします。

No.208 2010/08/18(Wed) 21:04:38

Re: 透明化について / 茶美
早いお返事に感謝いたします。Windowセクションのalphaという項目がサンプルのdesign.iniに無いのですが、どこに記述を入れたらいいのですか?私はプログラミングに詳しくないもので、一例を乗せてもらえると大変ありがたいのですが‥‥

この場合アイコンも一緒に透明になってしまうのですか?

No.209 2010/08/19(Thu) 00:52:13

Re: サムネイルについて / Goldfish(管理人)
?@まず、Windowfrogのバージョン1.209をダウンロードしてください。
?ALHZファイルを解凍すると、本体と共にdesign_sample.iniというファイルが存在するのでこのファイルをメモ帳等で開いてください。
?B
";ウィンドウの透過(0=無効、1〜255=値が大きいほど不透明)(0)"
という記述のすぐ下の行の"alpha=0"の数値を変更すると、Windowfrog全体の透明度を変更できます。
ex. "alpha=200"
?C上書き保存し、ファイルの名称をdesign.iniに変更する
?DWindowfrogを起動
という手順が手っ取り早いと思います。(デザインが変わってしまいますが、、、


> この場合アイコンも一緒に透明になってしまうのですか?
はい、Windowfrog全体を透明にしてしまいました…(^^;)

ただし、今気付いたのですが、XPの場合でもdesign.iniのthumbnailを1に、thumbnail-sizeを32位に、thumbnail-overlayを1にすると透過されないアイコンがちょうど良くでてきたりします。。。偶然というかミスというか見落としですが… 

何か不明な点・ご要望がありましたらお気軽にどうぞ。

No.210 2010/08/19(Thu) 01:35:36

Re: サムネイルについて / 茶美
新しいWindowfrogを使わせていただきました。下が透けて見えるようになり、邪魔にならないので、選択中のウィンドウ以外は枠表示の最小化に選択すれば表示されたウィンドウの確認も出来るし、アイコンも思ったより透過されないので、使いづらくなりませんでした。これでサムネイルが無くても便利です。この設定で長く愛用して行きます。ありがとうございました!
No.211 2010/08/20(Fri) 01:26:09
マウスジェスチャについて。 / NoName
Windowfrogを愛用させていただいている者です。
この頃ほんの少しながらプログラムをかじり始め、
Windowfrogの便利なマウスジェスチャ機能を自作ツールの中でも実現出来たらと思ったのですが、
以下の点で悩んでおります。

?@マウスフックプロシージャ内のcase WM_MOUSEWHEELにて、
GetAsyncKeyState(VK_LBUTTON)で左クリックされているかどうかを確認してPostMessage()するも、
自作ツールが反応するより先に、元から表示されているウインドウでスクロールが行われてしまいます。

?A上記の点については目を瞑ってそのまま処理を続行するも、左クリックや右クリックを離したことを検出する方法が分かりません。

宜しければ、以下の二点について答えていただければと思います。

掲示板で相応しくない話題であれば、メールで答えていただければと思います。

No.175 2010/08/07(Sat) 21:39:24

Re: マウスジェスチャについて。 / Goldfish(管理人)
はじめまして。Windowfrogをご利用いただきありがとうございます。
こちらで返信させていただきます。

?@フックプロシージャでメッセージを処理した際に0以外の値を返すとそのメッセージをそこで止めることができます。これで他のウィンドウのスクロールを阻止できると思います。

”If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the target window procedure.”
http://msdn.microsoft.com/en-us/library/ms644988(v=VS.85).aspx

それでも上手くいかない場合は何らかの原因でグローバルフック自体に失敗している可能性も考えられると思います。

?A左ボタン/右ボタンが離されたことを検出するにはそれぞれWM_LBUTTONUP/WM_RBUTTONUPというメッセージがあるので、それらを捕捉すれば可能です。

お役に立てば幸いです。もし見当はずれだったらすみません(^^;)

No.176 2010/08/07(Sat) 23:02:00

Re: マウスジェスチャについて。 / NoName
回答ありがとうございます。
?@について、既にreturn 1;と言った具合にスクロールを潰す事は試したのですが、その場合自作ツールのウインドウの方でもスクロールが動いてくれません。
(これはwindowfrogの様に左クリック+ホイール操作を続けた場合のことであって、クリック操作を中断すれば勿論スクロールは可能です)

?Aこれについても既に試しており、
ツールのウインドウが表示される以前に押下した場合、
WM_LBUTTONUPは自作ツール本体のウインドウプロシージャ及びDLLのフックプロシージャに飛んできませんでした。
(WM_NCLBUTTONUPも同様)

条件を後出し等と大変厚かましい行為をお許し下さい。

回答宜しくお願いします。

No.177 2010/08/07(Sat) 23:51:17

Re: マウスジェスチャについて。 / Goldfish(管理人)
う〜ん、フックって面倒ですよね・・笑

自ウィンドウがみえている時のみ飛んでくるとなると、グローバルなフックが上手くいっていない可能性が高いと思いますよ。(実は自分でも経験あります(^^;


自分的には、試しに最小の別プロジェクトで実験を行い、その後本体に組み込むというのがお薦めです。

No.178 2010/08/08(Sun) 01:27:10

Re: マウスジェスチャについて。 / Goldfish(管理人)
C++のソースですが、プロシージャの処理は以下のような感じで簡易版が実現可能かと思います。
ご参考までに。。。

if (wParam == WM_RBUTTONDOWN) {
bButtonDown = TRUE;
return TRUE;
}
else if (wParam == WM_RBUTTONUP) {
bButtonDown = FALSE;
if (bVisible) {
PostMessage(hwndTarget, WM_HOOKMSG_HIDE, 0, 0);
bVisible = FALSE;
}
return TRUE;
}
else if (wParam == WM_MOUSEWHEEL && bButtonDown)
{
if (!bVisible) {
PostMessage(hwndTarget, WM_HOOKMSG_SHOW, 0, 0);
bVisible = TRUE;
}
MSLLHOOKSTRUCT* msll = (MSLLHOOKSTRUCT*)lParam;
PostMessage(hwndTarget, WM_HOOKMSG_WHEEL, msll->mouseData, 0);
return TRUE;
}

No.180 2010/08/08(Sun) 01:48:17

Re: マウスジェスチャについて。 / NoName
回答ありがとうございます。
サンプルまで提示していただき、大変ありがたいのですが、
WM_RBUTTONDOWNやWM_RBUTTONUPを受け取った時TRUEを返すと、
通常の右クリック操作に支障をきたす様です。
(CallNextHookExすれば解決しました)

しかし、wParamがWM_MOUSEWHEELかつbButtonDownがTRUEの条件のところまで来てくれないようです。
(WM_RBUTTONDOWNやWM_RBUTTONUPのところには来てくれています)

グローバルフックは他の条件(WM_MOUSEMOVEなど)で見る限り成功しているようです。

何度も何度も申し訳ありませんが、宜しくお願いします。

No.181 2010/08/09(Mon) 00:10:42

Re: マウスジェスチャについて。 / NoName
以下の点についてお詫び申し上げます。
先程の質問の原因は変数をstaticにするのを忘れているだけでした。
「WM_RBUTTONUPのところには来てくれています」とありますが、実際の状況は以前の?Aから変化しておらず、
いまだにこちらの原因は分かりません。

また、先程は書き忘れたのですが、WM_HOOKMSG_WHEELは一体どのような処理を呼び出しているのでしょうか。
SendInputで十字キーで良いのでしょうか。

連投で申し訳ないですが、宜しくお願いします。

No.182 2010/08/09(Mon) 01:44:48

Re: マウスジェスチャについて。 / Goldfish(管理人)
つまり、最初の状況から何も変わってないってことですか 笑
言葉で説明するにはお互い限界があるのでサンプル的なプロジェクトを作ってみました。
http://molmott.hp.infoseek.co.jp/src/hook_test.lzh

VisualStudio2010のプロジェクト形式になっています。(というかよくわからないので丸ごと固めました、馬鹿みたいにでかいです… 笑)
他のIDEをご使用の場合も、重要なのはHook.cpp(DLLのソース)とhook_test.cpp(呼び出し側のソース)のみですので、これらを見ていただければわかると思います。
ちなみにMyRegisterClassやらInitInstanceやらの関数がいますがこれらはVisualStudioのWin32標準テンプレートの記述です。気にしないでください。

一応ソースにコメントを付けましたがわかりにくかったらすみません・・・
見ていただくとわかるとおもいますが、このサンプルでは大して難しいことはやっていません。


>また、先程は書き忘れたのですが、WM_HOOKMSG_WHEELは一体どのような処理を呼び出しているのでしょうか。
これは実現したいことに応じて変わると思います。上記サンプルではウィンドウのサイズの変更を行っています。
自ウィンドウに単純にスクロールとして認識させたい場合はWM_MOUSEWHEELを送る手もあると思います(その場合パラメータも作るべきかもしれません…)

>TRUEを返すと、通常の右クリック操作に支障をきたす様です。
これはTRUEを返して無効にしているので当然のことで、この点は上記サンプルでも同じです。
そのうえでWindowfrogではWM_RBUTTONDOWNを受けた時にタイムアウト処理を行うスレッド作り、所定の時間内にホイールの回転が行われなかった場合はmouse_event関数を使って擬似的に無効にした右ボタン押下を再現しています。
記述が込み入るためこの処理は省きました。

これが何らかの手掛かりになれば幸いです

No.183 2010/08/09(Mon) 16:28:42

Re: マウスジェスチャについて。 / NoName
回答有難う御座います。
お陰で上記の問題を解決する事が出来ました。

後は、
>タイムアウト処理を行うスレッド作り、所定の時間内にホイールの回転が行われなかった場合は...
の部分だけとなったのですが、これについてはWaitForSingleObject()を使えばよいのでしょうか?
マルチスレッドは始めてですので、自信があまりないのですが...

No.184 2010/08/09(Mon) 21:33:49

Re: マウスジェスチャについて。 / Goldfish(管理人)
よかったです。何が原因でしたか??

タイムアウト処理ですがWaitForSingleObject関数でいけますよ。
また、スレッドを呼び出す方法はいくつかありますが、解説サイトがたくさんありますので、そちらを参考にがんばってください(^^)

No.185 2010/08/09(Mon) 22:07:04

Re: マウスジェスチャについて。 / NoName
原因はSetWindowsHookExのフックタイプが誤っていた事でした。

スレッドについてですが、「イベント」なるものをなかなか理解できず、今尚前回の投稿より進歩していません。
宜しければ助言を頂けないでしょうか。

No.186 2010/08/10(Tue) 17:55:44

Re: マウスジェスチャについて。 / Goldfish(管理人)
たいして詳しいわけではないので、自分なりの解釈で説明させていただきます。

イベントとは要はON・OFFを示すグローバル変数です。
・CreateEvent関数で任意の名前を持つイベントを作成できます。
・作成したイベントはOpenEvent関数で名前を指定することで複数のスレッドからアクセスできます。
・SetEvent関数・ResetEvent関数でイベントの状態を変更できます。

また、WaitForSingleObject関数は所謂待機関数というもので、指定時間が経過するか、指定されたイベントがONになると処理を返すというものです。

以下のサイトの説明が分かりやすいと思うのでこちらを是非ご参考に。
http://www.geocities.jp/debu0510/personal/kusosure.html


具体的な実装としては、
・フック側は
?@マウスボタンが押されたらスレッドを開始する。
?A(タイムアウト前に)ホイール回転がなされたらイベントをONにする(スレッドを停止させる)
?Bウィンドウ表示

・スレッド側は
?@WaitforSingleObject関数で待機。
?A(タイムアウトで処理を抜けた場合)mouse_event関数でボタン押下を再現
?BイベントをOFFにする

というような感じでしょうか。あまり上手く説明できてませんね…
実際Windowfrogもいろいろな処理をしていて、ぱっとソースを見ても何をやっているのか分からず、カオスな状態だったりします…

No.187 2010/08/10(Tue) 18:52:55

Re: マウスジェスチャについて。 / NoName
回答有難う御座います。
なんとかイベントの方を理解することが出来、終わりまであと少しなのですが、以下の問題が発生しています。

?@WaitForSingleObjectの適切なタイムアウト値が分かりません。
また、環境のせいか、例えば1000msとすると、それ毎にマウスの動きが少し止まってしまいます。

?Amouse_eventやSendInputが届きません。
MessageBoxで確認する限り、mouse_event手前までは来ているのですが、肝心のマウスのクリックが出来ません。
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
とするだけで出来ると思っているのですが、違うのでしょうか。

ご教授お願いします。

No.188 2010/08/10(Tue) 20:35:31

Re: マウスジェスチャについて。 / Goldfish(管理人)
> また、環境のせいか、例えば1000msとすると、それ毎にマウスの動きが少し止まってしまいます。
まず、この点ですがマウスの動きが止まるということは、並行処理ができていないということなので、スレッドの作成に失敗しています。
ちなみに、Windowfrogは初期値は500msになっています(実は設定で変更できたりもします。

> ?Amouse_eventやSendInputが届きません。
> mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
> mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);

であっていると思います。
先ほど書き忘れましたがmouse_eventで合成したメッセージもフックプロシージャに届くので、場合によってはそれも考慮して処理を組む必要があります。

自分もかなり苦労した部分です(^^;)がんばってください!

No.189 2010/08/10(Tue) 20:53:45

Re: マウスジェスチャについて。 / NoName
>mouse_eventで合成したメッセージもフックプロシージャに届くので、場合によってはそれも考慮して処理
について、以下のようなグローバル変数を使用した簡単な切り替えを試してみました。
void Thread(void){
if(WaitForSingleObject(hEvent,500)==WAIT_TIMEOUT){
bClick=TRUE;
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
bClick=FALSE;
ResetEvent(hEvent);
}
ExitThread(0);
}
//フックプロシージャ内
if(wParam==WM_LBUTTONDOWN){
hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,0,0,NULL);
CloseHandle(hThread);
hThread=NULL;
bLeftButtonDown=TRUE;
if(bClick)return CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);
else return TRUE;
}

すると、クリックが効いたかと思いきや、
500ms毎にクリック操作が繰り返されてしまうようです。

これはスレッドの作成が失敗しているからなのでしょうか。

No.190 2010/08/10(Tue) 22:53:35

Re: マウスジェスチャについて。 / Goldfish(管理人)
?@CloseHandleがその位置にあるのはまずい気がします。スレッドが終了してからハンドルを閉じるべきだと思います。が、今回の場合スレッドの終了を待っているわけでないのでどう閉じるべきか…

自分の場合はハンドルを閉じる必要がない_beginthreadを使ってたりします。楽ちんですよ 笑

?Aクリックが繰り返されるのは、
タイムアウトでクリックを合成する
→プロシージャにWM_LBUTTONDOWNが飛んでくる
→またスレッドを作っている
→・・・・
となってしまっているからだと思います。
if(bClick)return CallNextHookEx(g_hMouseHook,nCode,wParam,lParam);
この行をCreateThreadの前に置くと上手くいくと思います。

No.191 2010/08/10(Tue) 23:38:21

Re: マウスジェスチャについて。 / NoName
回答有難う御座います。
?@?A共に修正し、色々と試しているのですが、前へと進むことが出来ません。
もう少し助言を頂けないでしょうか。
特に、マウスを離した際の処理についてお願いします。

No.192 2010/08/11(Wed) 14:07:00

Re: マウスジェスチャについて。 / Goldfish(管理人)
多分たくさんの実現方法があると思うので一概には言えないのですが…

考えられる方法としてWM_*BUTTONUPの際の処理は、「タイムアウト前」の場合と「ボタン押下&&ウィンドウ表示中」の場合の2つに分けて処理するといいと思います。

前者の場合は、
?@タイムアウトスレッドを停止
?Aメッセージをmouse_eventで合成
?Breturn TRUE

後者は、
?@ウィンドウを非表示にする(終了処理)
?Areturn TRUE

といった感じでしょうか。

No.193 2010/08/11(Wed) 14:57:04

Re: マウスジェスチャについて。 / Goldfish(管理人)
> 考えられる方法としてWM_*BUTTONUPの際の処理は、「タイムアウト前」の場合と

というより「ボタン押下&&ウィンドウ非表示」の方がわかりやすいですね(^^;)

ちょっと試してみましたが、

上述のような場合分けを使うならば、WM_*BUTTONUP時にボタン押下フラグを折ってさえおけばタイムアウト時にはこの処理は素通りしてくれるので、タイムアウト時にはUPを合成する必要はないです。

No.194 2010/08/11(Wed) 15:16:02

Re: マウスジェスチャについて。 / NoName
>WM_*BUTTONUPの際の処理は、「タイムアウト前」の場合と「ボタン押下&&ウィンドウ表示中」の場合の2つに分けて処理する
について、以下のようなコードで良いのでしょうか。
if(bVisible){
PostMessage(hwndTarget,WM_HOOKMSG_HIDE,0,0);
bVisible=FALSE;
}else{
SetEvent(hEvent);
bClick=TRUE;
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
bClick=FALSE;
}
また、
>WM_*BUTTONUP時にボタン押下フラグを折ってさえおけばタイムアウト時にはこの処理は素通りしてくれるので、タイムアウト時にはUPを合成する必要はないです。
の部分をもう少し詳しく説明していただけないでしょうか。
ちなみに、
>ボタン押下フラグ
と言うのは、bButtonDownの事であると勝手に解釈していますのでご注意ください。

読解力が乏しくて申し訳ないです。

No.195 2010/08/11(Wed) 15:58:03

Re: マウスジェスチャについて。 / Goldfish(管理人)
> 以下のようなコードで良いのでしょうか。
WM_RBUTTONDOWNでTRUEを返してメッセージを止めていると思うので、スレッドを停止したのちRIGHTUPを合成する前にどこかでRIGHTDOWNを合成する必要があると思います。
あとbButtonDownも考慮してほしいです。


> もう少し詳しく説明していただけないでしょうか。
ボタン押下フラグはサンプルでいうところのbButtonDownのつもりでした。
言わんとしたことは上のコードだとスレッド内の処理で
?@タイムアウトする
?ARIGHTDOWNとRIGHTUPを合成する
?Bスレッド終了
という流れになりますが、現実のマウスボタンはまだ押されたままになっていて、それを離したときもプロシージャにWM_RBUTTONUPが飛んできますのでWM_RBUTTONUPが二重になってしまう…
ということでした。
仮に先ほどの場合分けをすれば(bButtonDownがFALSEであればどちらにも該当せずメッセージはそのまま素通りすることになるので)、スレッドの?Aの段階でbButtonDownをFALSEにしておけばタイムアウト時の処理ではRIGHTUPを合成する必要はないです。

という感じです。自分でも書いていて混乱してきました 笑

>WM_*BUTTONUP時にボタン押下フラグを折ってさえおけばタイムアウト時にはこの処理は素通りしてくれるので、タイムアウト時にはUPを合成する必要はないです。
この文章は明らかにおかしかったです。すみません。

もう自分の日本語能力が限界なのでコードで書きます。
(この掲示板、タブが使えなくて見づらいのですが、、、

No.197 2010/08/11(Wed) 16:51:50

Re: マウスジェスチャについて。 / Goldfish(管理人)
やはりファイルをアップしました。
サンプルのHook.cppを置き換えていただくだけで大丈夫だと思います。
http://molmott.hp.infoseek.co.jp/src/Hook.cpp

bClickのスキップ処理を少しいじりましたが、この方が安全かな?という程度です。

今気付きましたがドロップ操作が駄目ですね…
WM_*BUTTONDOWNのときにカーソルの座標をグローバル変数に保持しておき、mouse_event時に元に戻せば上手くいきます。

No.198 2010/08/11(Wed) 17:37:17

Re: マウスジェスチャについて。 / Goldfish(管理人)
今スキップ処理の部分を微妙に修正しました(^^;)

ほんと、ぐだぐだですみません。。

No.199 2010/08/11(Wed) 18:24:04

Re: マウスジェスチャについて。 / NoName
回答有難う御座います。
>WM_*BUTTONDOWNのときにカーソルの座標をグローバル変数に保持しておき、mouse_event時に元に戻せば上手くいきます。
とのことですので、
WM_LBUTTONDOWNでGetCursorPos(&pt);
WM_LBUTTONUPで
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
SetCursorPos(pt.x,pt.y);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
としてみたのですが、選択は出来るものの、ドラッグアンドロップが出来ないようです。

本当に何度も何度も申し訳ないです。
これ以外はアップロードしてくれましたコードのお陰で正常に動作している為、おそらくこれが最後の質問になるかと思われます。
お願いします。

No.200 2010/08/11(Wed) 21:24:11

Re: マウスジェスチャについて。 / Goldfish(管理人)
> としてみたのですが、選択は出来るものの、ドラッグアンドロップが出来ないようです。
WM_MOUSEMOVE等WM_*BUTTONUP以外のメッセージが飛んできた場合も復元作業(?)をするように変更しました。(ただしこれをやると判定がシビアになってしまうのですが…
http://molmott.hp.infoseek.co.jp/src/Hook.cpp

微妙にプロシージャの処理が変わっていますが、以前のものを修正した後、まとめただけです。
また、mouse_eventは古いと書かれていたのでSendInputに置き換えました。(無駄な構造体が増えただけだと思っていたのですが、実は引数の精度が上がってました。)

グローバル変数ptButtonDownを用意し、WM_*BUTTONDOWNの処理時にそこに座標を格納しています。

こんな感じでWindowfrogもD&Dにも対処してます(^^)v

No.201 2010/08/11(Wed) 23:03:50

Re: マウスジェスチャについて。 / NoName
回答有難う御座います。
環境が悪いのかコードの写し間違いか定かではないのですが、
選択が出来ないようです。
(何度か修正を試みるも残念ながら...)

今度こそ最後の質問となるはずです。
宜しくお願いします。

No.202 2010/08/12(Thu) 00:30:33

Re: マウスジェスチャについて。 / Goldfish(管理人)
選択とはデスクトップ等でアイコンを複数選択するもののことですよね?

再度確認しましたが、以前のサンプルのHook.cppを今回のHook.cppの内容に置き換えただけですが、特に自分の環境では問題はないようです…

どの段階で失敗しているようですか?
ご確認よろしくお願いします。

No.204 2010/08/12(Thu) 08:45:54

Re: マウスジェスチャについて。 / NoName
申し訳ありません。
押下後、少し待ってからであれば可能でした。

No.205 2010/08/12(Thu) 20:51:52

Re: マウスジェスチャについて。 / NoName
>押下後、少し待ってから
についてはWM_MOUSEMOVEで処理を追加すれば何とかなりそうです。

No.206 2010/08/12(Thu) 22:39:58
(No Subject) / hoge
毎日Windowfrog使用させてもらっています。ものすごく便利です。
今回久しぶりに更新させてもらいましたが、以前はあったタイトルを指定して無視をする機能がなくなっていませんか?
自分は結構使っていたので、復活してもらえるとうれしいのですが…。

No.172 2010/06/30(Wed) 01:49:34

Re: / Goldfish(管理人)
Windowfrogをご利用いただきありがとうございます!


ご指摘の通り1.20を作った時(多分)にタイトル指定で除外する機能を省きました。

もともとはウィンドウを選別する処理が稚拙で、スタートメニュー等までも列挙してしまっていたための苦肉の策でしたが、現行のバージョンではほぼAlt+Tabを再現できるようになったためです。

作者の自分としては実はさっさとなくしてしまいたい機能でした (笑



ですが、ご利用いただいていた方がいらっしゃったということで設定画面を省略した形で復活させました。

かわりにさくっと簡易のツールを用意しましたのでこちらを本体と同じフォルダに置いて実行してみてください。

http://molmott.hp.infoseek.co.jp/windowfrog/ExcludeWnd.lzh
ちなみにこちらはC#で作ったので.netの実行環境が必要です。


よろしくお願いします。

No.173 2010/06/30(Wed) 21:51:33

Re: / hoge
無茶なお願いを聞いていただきありがとうございました。
しかし対応が早すぎてです。本当に感謝しています。
バッチリ以前以上に便利な状態になりました!これからもよろしくお願いします!

No.174 2010/06/30(Wed) 22:34:52
Excel 選べない / 中村
ずーぅっと使っています。重宝しています。
今更ながら WinXP を SP3 にあげたら動かなくなったので、金魚鉢殿に久々訪問したところ、新バージョンがあったようです。早速上書きしたら問題なく動きました。ありがとうございます。

期待をこめて新バージョンを使ってみたところ、以前から不満だった Excel の小窓が選べない件、まだダメですね。他の方の不満がないようなのでこちらの環境だけの問題なのでしょうか?
Windows XP Professional
5.1.2600 Service Pack 3 ビルド 2600

Microsoft Excel 2003 SP3
バージョン 11.0
ビルド 8324

No.169 2010/06/29(Tue) 16:00:46

Re: Excel 選べない / Goldfish(管理人)
拙作をご利用いただきありがとうございます!

お問い合わせについてですが、申し訳ありませんがもう少し具体的にお教え頂けると幸いですm(__)m


?@どのソフトについてのお問い合わせでしょうか?

?A「Excelの小窓」とはどこのことでしょうか?(関数の入力欄(ツールバー下部)、セル(表のマス目)等々・・・

?B「選べない」というのは具体的にはどのような状態でしょうか?(クリックしても反応しない(Windowfrog)、直接貼り付けが上手くいかない(金魚鉢)等々・・・

?Cまた当該ソフトの設定状況も合わせてお教え頂けるとスムーズにお答えできると思います。

なんだか質問攻めになってしまって申し訳ありません。。。(^^;
以上4点よろしくお願いします。

No.171 2010/06/29(Tue) 21:29:59
以下のフォームに記事No.と投稿時のパスワードを入力すれば
投稿後に記事の編集や削除が行えます。
117/200件 [ ページ : << 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 >> ]

- HOME - お知らせ(3/8) - 記事検索 - 携帯用URL - フィード - ヘルプ - メール - 環境設定 -

- Skin: Modern v2.0 - Author: ロケットBBS -

Rocket Board Type-X (Free) Rocket BBS