私が今行っていることについて、知識が豊富であると見なされる寸前ではないので、助けていただければ幸いです...
私は現在、C# Steam ゲーム トレーナーに取り組んでいます。ここでできるようにしたいのは、現在のホットキー設定を、ユーザーがホットキーの複数のボタンの組み合わせを押すことができるものに置き換えることです。アクティブ化のための単一のキーに限定されるのではなく、アクティブ化します。
トレーナーのドロップダウン ボックスに数字を入力しようとすると問題が発生しますが、数字キーを押しても入力されません。これは、このホットキー設定により、トレーナー内の特定の機能のみに制限されているためです。 . おそらく、現在のホットキー コードでは、トレーナーで指定されたプロセス以外で動作するように割り当てられたボタンを許可しない方法に関係していると思います(?)
可能であれば、プロセスのみに割り当てられたボタンの使用を制限しない代替ホットキー システムを実装するにはどうすればよいでしょうか (つまり、プロセス以外では 1 または 2 を押すことはできません)。オンのときはトレーナー)、CTRL + F1、ALT + 1、SHIFT + F1など、1キーではなく2キーの組み合わせを押すことで機能するマルチプライヤーにするにはどうすればよいですか?私が取り組んでいるトレーナーのコードは次のとおりです。
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();
ありがとう!