C#获取窗口句柄和进程ID的类
刚刚从老旧的VB6.0转移到C#的IDE当中,那玩意简直是干啥啥不行啊,关键Windows10还不支持。。。最近遇到个小项目(瞎折腾),需要枚举窗口句柄,并且获得相关的信息,各种折腾我,最后一通宵搞定,希望能帮助到需要的人:keai
private static extern int GetWindowTextW(int hWnd, StringBuilder lpString, int nMaxCount);
private static extern int GetClassNameW(int hWnd, StringBuilder lpString, int nMaxCount);
public delegate bool WNDENUMPROC(int hWnd, int lParam);
public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, int lParam);
/// <summary>
/// 枚举结构
/// </summary>
public struct WindowInfo
{
public int PW_Hwnd;
public string PW_WindowName;
public string PW_ClassName;
}
/// <summary>
/// 枚举当前系统窗口
/// </summary>
/// <returns></returns>
public static WindowInfo[] FindWindows()
{
try
{
List<WindowInfo> WindowsList = new List<WindowInfo>();
EnumWindows(delegate (int APP_Hwnd, int lParam)
{
WindowInfo _W = new WindowInfo();
StringBuilder sb = new StringBuilder(256);
_W.PW_Hwnd = APP_Hwnd;
GetWindowTextW(APP_Hwnd, sb, sb.Capacity);
_W.PW_WindowName = sb.ToString();
GetClassNameW(APP_Hwnd, sb, sb.Capacity);
_W.PW_ClassName = sb.ToString();
WindowsList.Add(_W);
return true;
}, 0);
return WindowsList.ToArray();
}
catch (Exception ex)
{
//处理异常
}
} 其实利用C#自带的Process类就可以做到
Process process = Process.GetProcessesByName("notepad.exe");
IntPtr windowHandle = process.Handle;
int pid = process.Id;
以后可能会会用到,感谢分享 曾经接触过C sharp,也不懂。
这个时候一般就去虚拟机里搞 CrazyZhang 发表于 2021-5-21 12:22
其实利用C#自带的Process类就可以做到
Process process = Process.GetProcessesByName("not ...
老哥猛啊 CrazyZhang 发表于 2021-5-21 12:22
其实利用C#自带的Process类就可以做到
Process process = Process.GetProcessesByName("not ...
关键问题就是他各方面只有窗口句柄是特定的。。。其他的都在变 曾经接触过C sharp,也不懂 不错不错 学习一下 句柄可以控制窗体 比较有用 不错不错 可能会用到先看一下
页:
[1]
2