Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Unicode与数字键盘结合使用?_C#_Unicode_Unicode String - Fatal编程技术网

C# 如何将Unicode与数字键盘结合使用?

C# 如何将Unicode与数字键盘结合使用?,c#,unicode,unicode-string,C#,Unicode,Unicode String,我希望你能帮助我,我有一个应用程序,它可以接收我按下的每一个键,就像一个键盘记录程序(是的,我知道,这是一种恶意软件,但我习惯了另一种东西,好东西,非常好的东西。不适合间谍)。当我按字母键和F键之间的数字键时(我的意思是,字母上方的键,如果你的键盘没有数字键盘,你可以使用这些键),它是这样写的: 0123456789 但当我使用数字键盘(键盘右侧的那一个)时,它显示如下: ABCDEFGHIJ 如何将字母转换为数字 PS:我对此进行了研究,发现我可能需要使用unicodeincodig.Unic

我希望你能帮助我,我有一个应用程序,它可以接收我按下的每一个键,就像一个键盘记录程序(是的,我知道,这是一种恶意软件,但我习惯了另一种东西,好东西,非常好的东西。不适合间谍)。当我按字母键和F键之间的数字键时(我的意思是,字母上方的键,如果你的键盘没有数字键盘,你可以使用这些键),它是这样写的:

0123456789

但当我使用数字键盘(键盘右侧的那一个)时,它显示如下:

ABCDEFGHIJ

如何将字母转换为数字

PS:我对此进行了研究,发现我可能需要使用
unicodeincodig.Unicode
,但我不知道如何使用它

这是捕获密钥的类:

using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows.Forms;   

public class GlobalKeyboardHook
{
    [DllImport("user32.dll")]
    static extern int CallNextHookEx(IntPtr hhk, int code, int wParam, ref keyBoardHookStruct lParam);

[DllImport("user32.dll")]
static extern IntPtr SetWindowsHookEx(int idHook, LLKeyboardHook callback, IntPtr hInstance, uint theardID);

[DllImport("user32.dll")]
static extern bool UnhookWindowsHookEx(IntPtr hInstance);

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string lpFileName);

public delegate int LLKeyboardHook(int Code, int wParam, ref keyBoardHookStruct lParam);

public struct keyBoardHookStruct
{
    public int vkCode;
    public int scanCode;
    public int flags;
    public int time;
    public int dwExtraInfo;
}

const int WH_KEYBOARD_LL = 13;
const int WM_KEYDOWN = 0x0100;
const int WM_KEYUP = 0x0101;
const int WM_SYSKEYDOWN = 0x0104;
const int WM_SYSKEYUP = 0x0105;

LLKeyboardHook llkh;
public List<Keys> HookedKeys = new List<Keys>();

IntPtr Hook = IntPtr.Zero;

public event KeyEventHandler KeyDown;
public event KeyEventHandler KeyUp;

// This is the Constructor. This is the code that runs every time you create a new GlobalKeyboardHook object
public GlobalKeyboardHook()
{
    llkh = new LLKeyboardHook(HookProc);
    // This starts the hook. You can leave this as comment and you have to start it manually (the thing I do in the tutorial, with the button)
    // Or delete the comment mark and your hook will start automatically when your program starts (because a new GlobalKeyboardHook object is created)
    // That's why there are duplicates, because you start it twice! I'm sorry, I haven't noticed this...
    hook(); <-- Choose!
}
~GlobalKeyboardHook()
{ unhook(); }

public void hook()
{
    IntPtr hInstance = LoadLibrary("User32");
    Hook = SetWindowsHookEx(WH_KEYBOARD_LL, llkh, hInstance, 0);
}

public void unhook()
{
    UnhookWindowsHookEx(Hook);
}

public int HookProc(int Code, int wParam, ref keyBoardHookStruct lParam)
{
    if (Code >= 0)
    {
        Keys key = (Keys)lParam.vkCode;
        if (HookedKeys.Contains(key))
        {
            KeyEventArgs kArg = new KeyEventArgs(key);
            if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
                KeyDown(this, kArg);
            else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
                KeyUp(this, kArg);
            if (kArg.Handled)
                return 1;
        }
    }
    return CallNextHookEx(Hook, Code, wParam, ref lParam);
}

如何获取值?如下所示:
private void Form1_Load(object sender,EventArgs e){gHook=new GlobalKeyBoardhooh();gHook.KeyDown+=new keydeventhandler(gHook_KeyDown);foreach(Enum.GetValues中的键)(typeof(Keys)))gHook.HookedKeys.Add(key)}
@Andrey Marchuk如果看起来不好,我在这一页是新的,如果答案不清楚,稍后我会在整个代码中提出相同的问题…什么是GlobalKeyBoardhooh?@Andrey Marchuk这是一个我像键盘记录程序一样使用的类…如果你愿意,后面我会把整个代码,以及这个类的详细信息。。。
GlobalKeyboardHook gHook;
private void Form1_Load(object sender, EventArgs e)
{
   gHook = new GlobalKeyboardHook();
   gHook.KeyDown += new KeyEventHandler(gHook_KeyDown);
   foreach(Keys key in Enum.GetValues(typeof(Keys)))
         ghook.HookedKeys.Add(key);
}

public void gHook_KeyDown(object sender, KeyEventArgs e)
{
    textBox1.Text += ((char)e.KeyValue).ToString();
}