可配置的按键快捷键C#

时间:2019-03-19 18:34:44

标签: c#

我正在寻找一种方法,以便使用我的程序的用户可以自己更改热键,使其不绑定到D,F12,K,F,A等。我有点希望ppl可以通过文本框进行更改或通过设置文件。现在已经被困了几个星期了,我只是找不到实现它的方法,这是我第一个正在开发的程序。

    public void gHook_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.D:
            // stuff
            Salvagebtn.PerformClick();
            break;
        case Keys.F12:
            // stuff
            pausebtn.PerformClick();
            break;
        case Keys.K:
            //stuff
            Geardropbtn.PerformClick();
            break;
        case Keys.F:
            //stuff
            Gamblebtn.PerformClick();
            break;
        case Keys.A:
            //stuff
            LeftClickSpambtn.PerformClick();
            break;
        case Keys.H:
            // stuff
            openGRbtn.PerformClick();
            break;
        case Keys.B:
            //stuff                    
            gemupbtn.PerformClick();
            break;
    }
}

2 个答案:

答案 0 :(得分:3)

在广告期间,我花了几分钟。所以,我写了以下内容:

编辑:用全局键盘处理程序包装的代码。您还需要添加对PresentationCore和WindowsBase的引用...

names = []
bdays = []

f = open("DOB.txt", "r")
data = f.readlines()

for line in data:
    parts = line.split()
    names.append(parts[:2])  # store the name
    bdays.append(parts[2:])  # store the bday

f.close()

print("Name")
for i, name in enumerate(names, start=1):
    print("{}. {}".format(i, " ".join(name)))

print("Bday")
for i, bday in enumerate(bdays, start=1):
    print("{}. {}".format(i, " ".join(bday)))

向您介绍:

enter image description here

尝试所需的快捷方式:

enter image description here

仅举一个例子,说明有很多方法可以做事情。

易于将它们写到文件或其他内容中。如果要...我将把AddHotKey Action参数更改为包含函数名称的字符串,然后使用其他方法可以让它调用该函数。

不过,实际上,我将在下面讨论的那本书中加入一个词典。

答案 1 :(得分:1)

您可以采用多种方法来处理此问题。就个人而言,我选择使用Dictionary,将键码作为键,并将委托/操作作为值。然后在按键上,您只需在与该按键代码关联的字典中调用该函数即可。类似于:

Dictionary<KeyCode, System.Action> keyDict = new Dictionary<KeyCode, System.Action>();

// populate it however you wish. Whether it's user entry or from a file or something.
keyDict.Add(KeyCode.D, SomeFunction);

如果要在字典中更改委托:

keyDict[KeyCode.D] = SomeOtherFunction;

然后稍后在事件处理程序中:

public void gHook_KeyDown(object sender, KeyEventArgs e)
{
    keyDict[e.KeyCode].Invoke();
}

public void SomeFunction()
{
    Console.WriteLine("called some function");
}

(此问题可能需要一些详细信息:Create dictionary with dynamic keys in C#