キーボードフック


ハルカ  2004-04-12 22:14:07  No: 53472  IP: [192.*.*.*]

こんばんは、ハルカと申します。

タイトル通りキーボードのフックに関して質問
させてください。

例えば、Vキーを押したら数字の999或いは、文字列の
999のようなすり替えが可能でしょうか?

フックプロシージャの中で、
wParamに対してVK_V→VK_Pのような事は
簡単にできるかとは思うのですが、
ひとつのキーに対して999ですから
キー3つ分を割り当てることなんて可能なのでしょうか?

どうぞ宜しくお願いします。

編集 削除
たく  2004-04-13 10:22:38  No: 53473  IP: [192.*.*.*]

数字の999或いは、文字列の999という意味がわかりませんが、
VK_V→VK_Pができているのであれば、
同様にすればできますよね?
あとは、同じことを3回処理すればいいだけですし、
処理中に無限ループに陥らないように気をつければいいだけかと・・・

編集 削除
ハルカ  2004-04-13 18:43:03  No: 53474  IP: [192.*.*.*]

たく様

>VK_V→VK_Pができているのであれば、

これが思っていたようにできませんでした。

wParam=VK_Pのようにすればできるのかと、
でも、実際には私の思い違いでした。

そうですね、単純に考えれば3回ループ
されればよいですね。

質問がもっと初歩的になってしまいましたが、
VK_V→VK_Pのようにするにはどうすればよいでしょうか?

よろしくお願いします。

編集 削除
たく  2004-04-14 11:26:03  No: 53475  IP: [192.*.*.*]

めんどうなのでコードで示します。
適当に変更して試してください。

BOOL CEditTest::PreTranslateMessage(MSG* pMsg) 
{
  // キーボード入力の、すべての'V'を'P'に変換
  // Ctrl+Vでペーストできなくなります
  if(pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
  {
    switch(pMsg->wParam)
    {
    case 'V':
      pMsg->wParam = 'P';
      break;
    }
  }

  // WM_CHARの'P'の処理
  if(pMsg->message == WM_CHAR)
  {
    if(pMsg->wParam == 'P' || pMsg->wParam == 'p')  
    {
      // 999の処理をする
      TRACE("Push \'P\'\n");
      return TRUE;
    }
  }
  return CEdit::PreTranslateMessage(pMsg);
}

編集 削除