这样做的一种方法是,如果应用程序在使用库和包装器方面超出您的控制范围:
Process[] Procs = Process.GetProcessesByName("NameofProcess");
这将为您提供相关过程。现在这将是棘手的地方,具体取决于您需要做什么。
您最终需要找到字符串在内存中的存储位置,您可以使用内存分析器或类似 CheatEngine 的工具来查找值,而不是了解您使用 CheatEngine 的目的或使用方式,但这只是查找内存位置的一种简单方法。
然后您可以使用以下方式读取/写入内存位置:
[DllImport("kernel32.dll")]
public static extern Int32 ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, UInt32 size, out IntPtr lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
public static byte[] ReadMem(IntPtr MemAddy, uint bytestoread, Process Proc)
{
//
//Create new Memory buffer and pointer to that buffer
//
byte[] buffer = new byte[bytestoread];
IntPtr bufferptr;
//
//Read Process Memory and output to buffer
//
ReadProcessMemory(Proc.Handle, MemAddy, buffer, bytestoread, out bufferptr);
//
//Return the buffer
//
return buffer;
}
public static bool WriteMem(IntPtr MemAddy, byte[] buffer, Process Proc)
{
int NumWriten;
WriteProcessMemory(Proc.Handle, MemAddy, buffer, (uint)buffer.Length, out NumWriten);
if (NumWriten != buffer.Length)
{
return false;
}
else return true;
}
这两个函数可以让你读写一些任意进程的内存位置。
如果你想要有问题的窗口,你可以使用:
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
像这样:
IntPtr HWND = FindWindow(null, "WinName");
这将为您提供相关窗口的句柄。
另一种方法是找到窗口,然后将一些事件传递给它,例如使窗口成为焦点,然后以编程方式在文本框之间切换。但是,如果没有更多关于你到底想要做什么的信息,我不确定这里还能说什么。