c# 根据坐标获取该位置上的PID及进程信息(进程名,路径,版本号等)

这篇文章展示了如何使用WinAPI函数GetWindowThreadProcessId和WindowFromPoint从给定的坐标获取窗口句柄,然后通过句柄获取进程ID。进一步,它根据PID查找进程的详细信息,包括进程名、主模块文件名、文件版本等。
摘要由CSDN通过智能技术生成

运行实例
在这里插入图片描述

下载地址

https://download.csdn.net/download/u012932582/87755579

用到的两个win api

 /// <summary>
        /// 通过窗口句柄获取线程ID(TID)和进程ID(PID)
        /// </summary>
        /// <param name="hwnd">窗口句柄</param>
        /// <param name="PID">返回进程ID</param>
        /// <returns>返回线程ID</returns>
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int PID);   //获取线程ID

        /// <summary>
        /// 获得包含指定点的窗口的句柄
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        static extern IntPtr WindowFromPoint(System.Drawing.Point p);

调用

 //坐标
            int x = int.Parse(this.tx_point_x.Text);
            int y = int.Parse(this.tx_point_y.Text);
            //根据坐标获取句柄
            IntPtr _hwnd = WindowFromPoint(new Point(x, y));
            int pid = 0;
            //根据句柄找pid
            GetWindowThreadProcessId(_hwnd, out pid);
            //根据pid找进程详细信息
            var p = FindInfoByPid(pid.ToString());
            this.textBox1.Text = $"抓取句柄:{_hwnd.ToString()} \r\n" +
                $"PID:{pid.ToString()} \r\n" +
                $"进程名:{p.ProcessName} \r\n" +
                $"运行文件名:{p.FileName} \r\n" +
            $"运行程序路径:{p.FileAddress} \r\n" +
            $"文件版本:{p.FileVersion} \r\n" +
            $"文件描述:{p.FileDescription} \r\n" +
            $"产品名称:{p.ProductName} \r\n" +
            $"产品版本:{p.ProductVersion} \r\n";

    /// <summary>
        /// 根据PID找信息
        /// </summary>
        /// <param name="strProcid"></param>
        /// <returns></returns>
        public CloudUpload FindInfoByPid(string strProcid)
        {
            try
            {
                foreach (Process p in Process.GetProcesses())
                {
                    if (p.Id.Equals(Int32.Parse(strProcid)))
                    {
                        var t = new CloudUpload()
                        {
                            ProcessName = p.ProcessName,
                            FileName = p.MainModule.ModuleName,
                            FileAddress = p.MainModule.FileName,
                            FileVersion = p.MainModule.FileVersionInfo.FileVersion,
                            ProductName = p.MainModule.FileVersionInfo.ProductName,
                            ProductVersion = p.MainModule.FileVersionInfo.ProductVersion,
                            FileDescription = p.MainModule.FileVersionInfo.FileDescription
                        };
                        return t;
                    }
                }
                return null;
            }
            catch
            {
                return null;
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值