我正在使用
从其他正在运行的进程中读取内存,这是我没有的源代码[DllImport("kernel32.dll")]
public static extern int ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [In, Out] byte[] buffer, uint size, out IntPtr lpNumberOfBytesRead);
一切正常。我得到了我需要的值,但现在我想在我的程序中实现类似INotifyPropertyChanged的东西,所以当非托管进程中的值发生变化时,我的代码会注册它并更新我的变量X.
到目前为止我已经
了private string x;
public string X { get { return x; } }
....
Threading.Timer timerX = new Timer(x => UpdateX(), null, 0, 500)
....
private void UpdateX()
{
//Read value from unmanaged process
OnPropertyChanged("X");
}
通过每500毫秒读取一次非托管进程内存来更新X,但这感觉就像是黑客攻击。此外,非托管进程中的内存可以在500毫秒内更改几次或在几分钟内更改一次,因此减少间隔似乎有点过分。有更优雅的解决方案。感谢。
答案 0 :(得分:2)
不,当另一个进程中的内存发生更改时,无法获取通知。如果您是调试器,则可以使用CPU数据断点来了解一小组位置的更改。但是这会产生很大的性能影响,如果你实际调试的话,它只是正确的方法。
如果其他进程是您拥有的,那么最好的方法是反汇编并理解其他进程的代码,并添加您自己的代码以发送通知。没有来源工作并进行小的改动可能不像你想象的那么难。
马丁