C# 包含适用于memory.dll c的进程的组合框#
我知道有一个类似的问题,但是先读一读 我使用的是Windows10x64 我正在用c#with memory.dll写一些东西,所以我想显示进程,然后在用户选择的进程中用memory.dll写一个值C# 包含适用于memory.dll c的进程的组合框#,c#,windows,visual-studio,process,C#,Windows,Visual Studio,Process,我知道有一个类似的问题,但是先读一读 我使用的是Windows10x64 我正在用c#with memory.dll写一些东西,所以我想显示进程,然后在用户选择的进程中用memory.dll写一个值 public partial class Form1 : Form { public Mem m = new Mem(); public Form1() { InitializeComponent();
public partial class Form1 : Form
{
public Mem m = new Mem();
public Form1()
{
InitializeComponent();
loadprocess();
}
private void loadprocess()
{
comboBox1.Items.Clear();
Process[] MyProcess = Process.GetProcesses();
for (int i = 0; i < MyProcess.Length; i++)
comboBox1.Items.Add(MyProcess[i].ProcessName + "-" + MyProcess[i].Id);
}
private void timerDontCamera_Tick(object sender, EventArgs e)
{
m.OpenProcess(Process.GetProcessesByName(comboBox1.SelectedValue.ToString()).FirstOrDefault().Id);
m.WriteMemory("zVideoUI.dll+003BED80,68,E4", "byte", "1");
}
它引发异常:System.NullReferenceException:“对象引用未设置为对象的实例。”
System.Windows.Forms.ListControl.SelectedValue.get返回空值。根据我的测试,我重现了您的问题 首先,我建议您使用
comboBox1.SelectedItem
替换comboBox1.SelectedValue
其次,如果我们想使用process.getProcessByName
方法,我们应该获取进程名。但是,您的组合框
所选项目应该是processname
+process.id
最后,您可以尝试以下代码来获得正确的Id
public Form1()
{
InitializeComponent();
loadprocess();
timer1.Interval = 1000;
}
private void loadprocess()
{
comboBox1.Items.Clear();
Process[] MyProcess = Process.GetProcesses();
for (int i = 0; i < MyProcess.Length; i++)
{
comboBox1.Items.Add(MyProcess[i].ProcessName + "-" + MyProcess[i].Id);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
string processname = comboBox1.SelectedItem.ToString().Split('-').First();
string id = comboBox1.SelectedItem.ToString().Split('-').Last();
var process = Process.GetProcessesByName(processname).Where(i=>i.Id==Convert.ToInt32(id)).First();
Console.WriteLine(process.Id);
m.OpenProcess(process.Id);
}
public Form1()
{
初始化组件();
loadprocess();
计时器1。间隔=1000;
}
私有void loadprocess()
{
comboBox1.Items.Clear();
Process[]MyProcess=Process.getprocesss();
for(int i=0;ii.Id==Convert.ToInt32(Id)).First();
Console.WriteLine(process.Id);
m、 OpenProcess(process.Id);
}
对其进行测试:
我不知道该怎么办,因为我知道有3个进程同名,在作弊引擎中,我选择了一个正确的进程,它向我显示了值,但这个c表示找不到值,这意味着它正在使用其他两个同名进程中的一个name@Jos安东尼奥,似乎您希望基于组合框找到相应的进程。我已经更新了我的代码,你可以试一试。我已经检查过了,我几乎肯定combobox不会显示同名的进程,因为我一直在搜索,我找不到另一个进程,而作弊引擎没有任何问题。如果我尝试出现在那里的进程,它会说我的指针找不到更多,我发现这两个进程都在那里,但它说它没有找到我的指针,而作弊引擎却找到了我的指针。这是我的错,我的项目必须是x86,我尝试了没有你的代码,它不工作,所以你的回答很有帮助,谢谢。
public Form1()
{
InitializeComponent();
loadprocess();
timer1.Interval = 1000;
}
private void loadprocess()
{
comboBox1.Items.Clear();
Process[] MyProcess = Process.GetProcesses();
for (int i = 0; i < MyProcess.Length; i++)
{
comboBox1.Items.Add(MyProcess[i].ProcessName + "-" + MyProcess[i].Id);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
string processname = comboBox1.SelectedItem.ToString().Split('-').First();
string id = comboBox1.SelectedItem.ToString().Split('-').Last();
var process = Process.GetProcessesByName(processname).Where(i=>i.Id==Convert.ToInt32(id)).First();
Console.WriteLine(process.Id);
m.OpenProcess(process.Id);
}