微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有适用于 memory.dll c# 的进程的组合框

如何解决带有适用于 memory.dll c# 的进程的组合框

我知道有一个类似的问题,但请先阅读

我使用的是 Windows 10 x64

我正在用 memory.dll 在 c# 中写一些东西,所以我想显示进程,然后在用户选择的进程中用 memory.dll 写一个值。

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");
        }

问题是这一行:

m.OpenProcess(Process.GetProcessesByName(comboBox1.SelectedValue.ToString()).FirstOrDefault().Id);
           m.WriteMemory("zVideoUI.dll+003bed80,"1");

它抛出一个异常:System.NullReferenceException:'未将对象引用设置为对象的实例。'

System.Windows.Forms.ListControl.SelectedValue.get 返回空值。

解决方法

根据我的测试,我重现了您的问题。

首先,我建议您使用 comboBox1.SelectedItem 替换 comboBox1.SelectedValue

第二,如果我们想使用Process.GetProcessesByName方法,我们应该得到进程名称。但是,您选择的 comboBox 项应该是 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);
        }

做一个测试:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。