18/05/27 02:26:41.49 uQYWIjzd0.net
>>922
あー、他のツールをお使いでしたか! 他のツールとの共存は茨の道なのです…
各種ツールはみんな、マウスやキーボードに対するフックを仕掛けて、アプリケーションより先に情報を受け取り、そのメッセージを
・ゴミ箱に捨てたり(CreviceではCancelと呼んでいます)
・確定のハンコを押したり(Determine)
・次のフックに処理を委ねたり(Transfer)
しています
そして各種ツールが使っているフックには、
・メッセージフックと
・ローレベルフック
という2種があるのですが、Creviceは後者を使用しています
Creviceではジェスチャに使用したメッセージは全てCancelとして処理するので、Transferする必要がある場合は、SendInputを使用してユーザーが手動でメッセージを再送する必要があります
SendInputから送信されたメッセージにはマーカーが仕込まれているので、Creviceはこれを認識して自動的にTransferします
ローレベルフックのほうが先に処理されるため、Creviceが先にメッセージを受け取ることになるので、より優先度が低いメッセージフックを使用するソフトウェアに対してはこれでうまく共存できるのですが、問題はローレベルフックを使うツール同士の場合です
・あるメッセージがあるツールによってCancelされる場合に、それを何らかの手段でTransferに変更する手段がないと、他のツールにはそのメッセージを感知する手段がありません
・また、Determineについては、そのメッセージはローレベルフックでは確定されたものと扱われ、「それ以降のローレベルフックを通過しないが、メッセージフックを再び通過する」というさらに微妙な動作をします
というわけで、XMBCが先にローレベルフックでメッセージを受け取り、それをCancelかDetermineした場合に、Creviceはそのメッセージを感知できません
Creviceが先にメッセージを受け取り、SendInputを使って手動でメッセージを送信する場合に限り、他のツールと共存できる…はずです