获取所有正在运行的. net应用程序(不是Java)
本文关键字:应用程序 不是 Java net 运行 获取 | 更新日期: 2023-09-27 18:09:07
我使用下面的代码,我得到了在一个窗口中运行的所有应用程序。
现在我只想得到。net (.exe)的应用程序。你能帮我吗?
public Form1()
{
InitializeComponent();
EnumWindows(new WindowEnumCallback(this.AddWnd), 0);
}
public delegate bool WindowEnumCallback(int hwnd, int lparam);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnumWindows(WindowEnumCallback lpEnumFunc, int lParam);
[DllImport("user32.dll")]
public static extern void GetWindowText(int h, StringBuilder s, int nMaxCount);
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(int h);
private List<string> Windows = new List<string>();
private bool AddWnd(int hwnd, int lparam)
{
if (IsWindowVisible(hwnd))
{
StringBuilder sb = new StringBuilder(255);
GetWindowText(hwnd, sb, sb.Capacity);
Windows.Add(sb.ToString());
txtTest.Text += hwnd.ToString()+" ";
lst.Items.Add(sb.ToString());
}
return true;
}
您可以使用如下方法,以及p/Invoke函数GetFileVersion()
:
[DllImport("mscoree.dll", CharSet = CharSet.Unicode)]
private static extern int GetFileVersion(string path, StringBuilder buffer, int buflen, out int written);
public static bool IsDotNetExecutable(string path)
{
StringBuilder sBuilder = new StringBuilder(256);
int written;
int gvf = GetFileVersion(path, sBuilder, sBuilder.Capacity, out written);
return gvf == 0;
}
函数失败时不会抛出异常。返回值不是0表示发生了错误,并且可执行程序不是。net程序集。因此,上面的IsDotNetExecutable
方法相应返回true
或false
。