1

我几乎不会被认为对我现在正在做的任何事情都很了解,所以我很感激你的帮助......

我目前正在开发 C# Steam 游戏培训师,我希望在这里能够做的是将当前的热键设置替换为允许用户按下多个按钮的组合的热键来激活,而不是仅限于激活单个密钥。

当我在教练的下拉框中输入数字时遇到问题,但是当我按下数字键时不会输入数字键,因为此热键设置仅将其限制为教练中其他东西的特定功能. 我认为这可能与当前热键代码不允许分配的任何按钮在训练器中指定的过程以外的任何其他东西上工作的方式有关(?)

如果可能的话,我将如何实施一个替代热键系统,该系统不限制仅分配给进程的按钮的使用,(我的意思是,除了trainer 当它打开时),我将如何使它成为一个通过按 2 个键而不是 1 个键的组合来工作的倍增器,例如 CTRL+F1、ALT+1、SHIFT+F1?这是我正在研究的培训师的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Threading;
using Memory;

namespace DBXVTrainerProject
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    [DllImport("user32.dll")]
    public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);

    public Mem MemLib = new Mem();

    public bool loaded;

    public object AllEn99_Checked { get; private set; }

    private void openGame()
    {
        if (loaded)
            return;

        //new memory.dll 1.0.2 function
        int gameProcId = MemLib.getProcIDFromName("DBXV");

        if (gameProcId != 0)
        {
            loaded = true;
            ProcessID.Text = ("Found!");
            MemLib.OpenGameProcess(gameProcId);

            int Badge = MemLib.readInt("base+0x01F43372,4ef5");

            if (Badge == 1)
                Badge_checkbox.Checked = true;
            else
                Badge_checkbox.Checked = false;
        }
    }

    protected override void WndProc(ref Message m) //hotbuttons
    {
        if (m.Msg == 0x0312)
        {
            int id = m.WParam.ToInt32();
            if (id == 1)
            {
                MemLib.writeMemory("base+01A47e4,2c,44,e,4c,c3", "int", "17");
            }
            { 
                if (id == 2)
                    MemLib.writeMemory("base+01A47e4,2c,44,e,4c,c3", "int", "22");
            }

        }
        base.WndProc(ref m);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        RegisterHotKey(this.Handle, 1, 0, (int)Keys.D1);
        RegisterHotKey(this.Handle, 2, 0, (int)Keys.D2);


        if (backgroundWorker1.IsBusy == false)
            backgroundWorker1.RunWorkerAsync();
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        while (true) //infinite loop
        {
            openGame();

谢谢!

4

0 回答 0