dポイントプレゼントキャンペーン実施中!

グローバルフックを使って、マウスの右クリックだけのときは右クリックメニューを表示し(通常動作)、
マウスの右クリック+Shiftキーのときは右クリックメニューを表示させず、代わりにプログラムでSendKeysを使ってキーコードを送ることは可能ですか?

Delphi10を使おうと思っています。

質問者からの補足コメント

  • うれしい

    回答ありがとうございます。

    使用上、グローバルフックを使う必要があり、グローバルフックは低レベルフックでしか使えないということがネットに書かれていました。
    ただ、低レベルフックではメッセージの書き換えができないので、上記のようにして解決できないか疑問に思った次第です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/08/07 14:29
  • うーん・・・

    C#で検索すると、グローバルフックは低レベルフックしかできないように書いてあったんですけど、
    Delphiではできるようですね。
    Mr.XRAYさんのサイトにはそう書いてありますね。
    でもWindows10なので、どうなるか?

      補足日時:2017/08/07 15:21

A 回答 (4件)

>メッセージの書き換えができないので、



メッセージの書き換えというのは正確な表現ではないですね.
つい,つられて書いてしまいましたが.
ただし,この「メッセージ」が具体的に何を意味するのかにもよりますが.
    • good
    • 0

>>メッセージの書き換えができないので、


>
>メッセージの書き換えというのは正確な表現ではないですね.
>つい,つられて書いてしまいましたが.

ということで,私のサイトには「メッセージの書き換え」のサンプルはないです.
メッセージの内容によって,処理を変更するサンプルしかありません.
「メッセージの書き換え」というのがどういうのかはよく分かりません.
メッセージのダイアログでメッセージの文字列とかテキストを書き換える,
というのであれば理解できますが.
    • good
    • 0
この回答へのお礼

メッセージの書き換え-->動作の変更という意味で使いました。
Shift+マウスの右クリックの動作をプログラムで(グローバルフックで)取り消して、SendKeysで別のコマンドを発行するようにすれば簡単にできるかなと思ったのですが...
以前の方法で思いついたことがあるので、もう少し、いろいろやってわからければ専門の掲示板に聞いてみます。

お礼日時:2017/08/09 13:11

>C#で検索すると、グローバルフックは低レベルフックしかで (以下略)



質問の内容との関係がよく分かりませんが.
C# の場合,絶対できないということではなくDLL との関係だと思います.

>でもWindows10なので、どうなるか?

やってみればすぐ分かります.
私,Mr.XRAY 本人ですが,当サイトにはグローバルフックのサンプルがあります.
もちろんメッセージの書き換えのサンプルもあります.
提供しているコンポーネント類にもあります.
全てソースコード付き,EXE 付きで提供していますから,すぐ確認できます.

余計なお世話ですが,こういうやりとりは,教えて! goo や知恵袋等では無理があります
Delphi 関係のコミュニティの場があるのですから,そちらを利用された方がいいと思います.
ポイントとやらを貯めるのが目的であれば,
ポイントを貯めるのが重要か,問題解決を優先するのかの判断が必要ですね.

それから,質問の文章はよく考えた方がよろしいかと.
グローバルフックの制御なのか,マウス押下やキーの操作検出の問題なのか,
提示の文章ではマウスとキーのことが強調されているように思われます.

>代わりにプログラムでSendKeysを使ってキーコードを送ることは可能ですか?

SendKeys の使い方が不明なのか ? とも解釈できます.
でしたら,可能です.という答えになりますしね.
マウスの右ボタン押下の検出も,Shift キー押下の検出方法も理解しているのであれば,
何が問題なのかを書くべきですね.
それが解決への早道だと思います.
    • good
    • 0

次のように処理すればできると思いますが...



if (マウスの右クリック) and (Shiftキー押下) then begin
SendKeysによる処理
end;

if (マウスの右クリック) then begin
if (Shiftキー押下) then begin
SendKeysによる処理
end;
end;
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!