C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: フローバルフックを使ってのキー変更


(過去ログ 116 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■68540 / inTopicNo.1)  フローバルフックを使ってのキー変更
  
□投稿者/ まるまる (1回)-(2013/10/26(Sat) 15:05:57)

分類:[C#] 

はじめまして。
C#を使ってグローバルフックのアプリを作っています。
その中で、キーボードから入力された値を取得して別の内容に変更して出力したいのですが、どのようにすればいいでしょうか。

具体的には、グローバルフックアプリを常駐する。
メモ帳に「a」を入力すると、「ap」をメモ帳に表示、「ai」を同時に押すと「aikatu」とメモ帳に表示させたいです。
日本語入力モードのときは、「a」と入力すると「あめ」をメモ帳に表示、「a」キーと「i」キーを同時に押すと「あいかつ」とメモ帳に入力し、
変換可能な状態にしたいです。
まず、グローバルフックしてからキーの内容変更自体がまったくできません。
ご教授のほどよろしくお願いします。
引用返信 編集キー/
■68543 / inTopicNo.2)  Re[1]: フローバルフックを使ってのキー変更
□投稿者/ オショウ (97回)-(2013/10/26(Sat) 17:09:52)
No68540 (まるまる さん) に返信
> はじめまして。
> C#を使ってグローバルフックのアプリを作っています。
> その中で、キーボードから入力された値を取得して別の内容に変更して出力したいのですが、どのようにすればいいでしょうか。

  ttp://mula.b.sourceforge.jp/2013/02/02/day7-3/
  day7.3: グローバルフックを実装する

  ここの記事はお読みになりましたか?

以上。
引用返信 編集キー/
■68555 / inTopicNo.3)  Re[2]: フローバルフックを使ってのキー変更
□投稿者/ まるまる (2回)-(2013/10/28(Mon) 08:42:53)
No68543 (オショウ さん) に返信
> ■No68540 (まるまる さん) に返信
>>はじめまして。
>>C#を使ってグローバルフックのアプリを作っています。
>>その中で、キーボードから入力された値を取得して別の内容に変更して出力したいのですが、どのようにすればいいでしょうか。
>
>   ttp://mula.b.sourceforge.jp/2013/02/02/day7-3/
>   day7.3: グローバルフックを実装する
>
>   ここの記事はお読みになりましたか?
>

上記記事を参考にグローバルフックまではできており、入力したキーの取得まではできます。

>>メモ帳に「a」を入力すると、「ap」をメモ帳に表示、「ai」を同時に押すと「aikatu」とメモ帳に表示させたいです。
>>日本語入力モードのときは、「a」と入力すると「あめ」をメモ帳に表示、「a」キーと「i」キーを同時に押すと「あいかつ」とメモ帳に入力し、
>>変換可能な状態にしたいです。

私がしたいのは、上記のように取得したキーの値を別のキーに変えて出力したいのです。
キーの内容を変更するにはどのようにすればよいかご教授ください。

引用返信 編集キー/
■68560 / inTopicNo.4)  Re[3]: フローバルフックを使ってのキー変更
□投稿者/ Hongliang (111回)-(2013/10/28(Mon) 12:58:29)
まず、グローバルキーフックにおいて、入力されたキーの差し替えはできません。
この差し替えというのは、Aが押されたことを、以降のフックチェインおよび入力待ちウィンドウに対しては「Bが押された」と偽装する行為を指します。

入力のキャンセルは可能です。
CallNextHookExを呼ばないことで、以降のフックチェインは処理されず、入力待ちウィンドウに対してウィンドウメッセージが生成されることもありません。

差し替えはできませんが、フック内で改めてキー入力を生成することは可能です。
Win32APIのSendInput関数を使用できます(結構複雑な構造体を使用しますが)。
これを使って、フックして、該当キーが入力されたときに必要なだけSendInputを呼び出すことで、目的は達成できるでしょう。
なお、SendInputによってもフックコールバックは発生するので、気をつけないと無限再帰呼び出しが発生し得ます。
これはdwExtraInfoメンバを使用することで回避できるかもしれません。
引用返信 編集キー/
■68561 / inTopicNo.5)  Re[4]: フローバルフックを使ってのキー変更
□投稿者/ まるまる (3回)-(2013/10/28(Mon) 13:10:44)

> 差し替えはできませんが、フック内で改めてキー入力を生成することは可能です。
> Win32APIのSendInput関数を使用できます(結構複雑な構造体を使用しますが)。
> これを使って、フックして、該当キーが入力されたときに必要なだけSendInputを呼び出すことで、目的は達成できるでしょう。
> なお、SendInputによってもフックコールバックは発生するので、気をつけないと無限再帰呼び出しが発生し得ます。
> これはdwExtraInfoメンバを使用することで回避できるかもしれません。

ご回答ありがとうございます。
SendInput関数を使ってやりたいことが実現できるかやってみたいと思います。
ありがとうございました。

引用返信 編集キー/
■68562 / inTopicNo.6)  Re[5]: フローバルフックを使ってのキー変更
□投稿者/ まるまる (4回)-(2013/10/28(Mon) 13:12:03)
No68561 (まるまる さん) に返信
>
>>差し替えはできませんが、フック内で改めてキー入力を生成することは可能です。
>>Win32APIのSendInput関数を使用できます(結構複雑な構造体を使用しますが)。
>>これを使って、フックして、該当キーが入力されたときに必要なだけSendInputを呼び出すことで、目的は達成できるでしょう。
>>なお、SendInputによってもフックコールバックは発生するので、気をつけないと無限再帰呼び出しが発生し得ます。
>>これはdwExtraInfoメンバを使用することで回避できるかもしれません。
>
> ご回答ありがとうございます。
> SendInput関数を使ってやりたいことが実現できるかやってみたいと思います。
> ありがとうございました。
>
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -