C# 根据进程获取程序主窗口句柄(包括最小化和隐藏程序)
来源:互联网 发布:qq安全中心mac版 编辑:程序博客网 时间:2024/09/21 06:34
namespace Applications.UI
{
class CurrentProcess
{
private static Hashtable processWnd = null;
public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);
static CurrentProcess()
{
if (processWnd == null)
{
processWnd = new Hashtable();
}
}
[DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);
[DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
public static extern IntPtr GetParent(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
[DllImport("user32.dll", EntryPoint = "IsWindow")]
public static extern bool IsWindow(IntPtr hWnd);
[DllImport("kernel32.dll", EntryPoint = "SetLastError")]
public static extern void SetLastError(uint dwErrCode);
public IntPtr GetCurrentWindowHandle(Process process)
{
IntPtr ptrWnd = IntPtr.Zero;
uint uiPid = (uint)process.Id; // 进程 ID
object objWnd = processWnd[uiPid];
if (objWnd != null)
{
ptrWnd = (IntPtr)objWnd;
if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd)) // 从缓存中获取句柄
{
return ptrWnd;
}
else
{
ptrWnd = IntPtr.Zero;
}
}
bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid);
// 枚举窗口返回 false 并且没有错误号时表明获取成功
if (!bResult && Marshal.GetLastWin32Error() == 0)
{
objWnd = processWnd[uiPid];
if (objWnd != null)
{
ptrWnd = (IntPtr)objWnd;
}
}
return ptrWnd;
}
private static bool EnumWindowsProc(IntPtr hwnd, uint lParam)
{
uint uiPid = 0;
if (GetParent(hwnd) == IntPtr.Zero)
{
GetWindowThreadProcessId(hwnd, ref uiPid);
if (uiPid == lParam) // 找到进程对应的主窗口句柄
{
processWnd[uiPid] = hwnd; // 把句柄缓存起来
SetLastError(0); // 设置无错误
return false; // 返回 false 以终止枚举窗口
}
}
return true;
}
}
}
- C# 根据进程获取程序主窗口句柄(包括最小化和隐藏程序)
- C# API 根据进程名获取程序句柄
- 根据窗口句柄获取所在程序路径
- 根据进程id获取主窗口句柄
- C#获取进程的主窗口句柄
- C#遍历进程获取主窗口句柄
- C#获取进程的主窗口句柄
- C#获取进程的主窗口句柄
- C#遍历进程获取主窗口句柄
- C#获取进程的主窗口句柄
- C#隐藏其他程序窗口以及添加最小化/最大化按钮
- c# 获取程序句柄
- C# 获取句柄程序
- C++根据进程获取主窗口的句柄
- 根据窗口句柄来获取进程ID
- 根据进程名称获取窗口句柄
- c# 获取鼠标处窗口句柄,程序嵌入桌面
- 根据窗口句柄判断程序运行状态
- GDI入门实例(在VC++6.0中将JPG格式图片转换成BMP格式)
- 11 java 王少飞-JavaWeb技术之面向对象设计模式
- LeetCode 4Sum
- 【转】Aptana3 SVN Client安装
- IOS成长之路-DES+Base64 加密、解密
- C# 根据进程获取程序主窗口句柄(包括最小化和隐藏程序)
- USB底层协议
- 游标的使用
- 第一篇博客:只是随便写写
- 用javascript将中文名字拆分为姓与名的jquery插件
- ping 代码
- 快速查找内核源代码脚本
- sqrt
- 利用Base64在XML中存储BLOB