c#写一个窗口工具,根据端口号自动查找进程映像名
时间: 2023-07-20 15:05:38 浏览: 101
以下是使用 C# 编写的一个简单的窗口工具,可以根据端口号自动查找进程映像名:
```csharp
using System;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
namespace PortToProcessTool
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnSearch_Click(object sender, EventArgs e)
{
if (int.TryParse(txtPort.Text.Trim(), out int port))
{
var processes = Process.GetProcesses().Where(p => p.PortIsListening(port)).ToList();
if (processes.Any())
{
var processNames = processes.Select(p => p.ProcessName).Distinct().ToList();
txtResult.Text = string.Join(Environment.NewLine, processNames);
}
else
{
txtResult.Text = "No process is listening on port " + port;
}
}
else
{
MessageBox.Show("Invalid port number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public static class ProcessExtensions
{
public static bool PortIsListening(this Process process, int port)
{
var connections = IPGlobalProperties.GetIPGlobalProperties().GetActiveTcpConnections();
return connections.Any(c => c.State == TcpState.Established && c.LocalEndPoint.Port == port && c.ProcessId == process.Id);
}
}
}
```
在窗口上放置一个 `TextBox` 控件(用于输入端口号)、一个 `Button` 控件(用于触发查找操作)和一个 `TextBox` 控件(用于显示查找结果),然后在相应的事件处理程序中调用 `Process.GetProcesses()` 方法获取所有正在运行的进程,然后筛选出监听指定端口的进程,最后将结果显示在 `TextBox` 控件中即可。为了方便使用,我们还可以将上述操作封装到一个扩展方法 `PortIsListening()` 中,以便在 LINQ 查询中使用。
阅读全文