2017-05-07 15 views
0

私は現在、ワイド文字への基本的なラテン語の入力(0x21で< & & 0x7eの>)キーボードをフックし、ターンしようとしている(0xff10 < & & 0xff6dを>)入力。C# - キーボードフックは+ワイド文字に基本ラテンを回し

簡単な説明で、ユーザーがexを押すたびに。キーボードの "A"キーを押すと、入力は "A"に変わります(これは「効果」と呼ばれます)。ワイド文字はUnicodeです。私はAをBに変えないという単一の問題はありません。問題はUnicodeを表示することから始まります。

私はhttp://inputsimulator.codeplex.com/ライブラリを使用しています。これまでのところ、私のコードは:

private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
    if(nCode >= 0 && wParam == (IntPtr)257) 
    { 
     int _vkCode = Marshal.ReadInt32(lParam); 
     if(_vkCode >= 0x21 && _vkCode <= 0x7e) 
     { 
      _vkCode += 0xfee0; 
      InputSimulator.SimulateTextEntry(Encoding.Unicode.GetString(BitConverter.GetBytes(_vkCode))); 
      return (IntPtr)1; 
     } 
    } 
    return CallNextHookEx(_hookID, nCode, wParam, lParam); 
} 

ですが、私はすべてそれから出ています、ただの疑問です。

答えて

0

同じ問題が発生した場合。私は周りの道を見つけた。あなたがしなければならないことは、文字を生成することです - >キーボードコピーをフックする - >キーボードペーストをフックします。

public bool _vaporize = false; 
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) 
{ 
    if(_vaporize) 
     return (IntPtr)1; 
    if(nCode >= 0 && wParam == (IntPtr)257 || wParam == (IntPtr)256) 
    { 
     int _vkCode = Marshal.ReadInt32(lParam); 
     if(_vkCode >= 0x21 && _vkCode <= 0x7e) 
     { 
      if(wParam == (IntPtr)257) 
       return (IntPtr)1; 
      Clipboard.SetText(Encoding.Unicode.GetString(BitConverter.GetBytes(_vkCode + 0xfee0))); 
      _vaporize = true; 
      SendKeys.Send("^(v)"); 
      _vaporize = false; 
      return (IntPtr)1; 
     } 
    } 
    return CallNextHookEx(_hookID, nCode, wParam, lParam); 
} 

私の解決策は、8.1より新しいWindowsでは動作しません。

関連する問題