通过调用Win32API实现。
代码如下:
publicclassUser32API
{
privatestaticHashtableprocessWnd=null;
publicdelegateboolWNDENUMPROC(IntPtrhwnd,uintlParam);
staticUser32API()
{
if(processWnd==null)
{
processWnd=newHashtable();
}
}
[DllImport(“user32.dll”,EntryPoint=”EnumWindows”,SetLastError=true)]
publicstaticexternboolEnumWindows(WNDENUMPROClpEnumFunc,uintlParam);
[DllImport(“user32.dll”,EntryPoint=”GetParent”,SetLastError=true)]
publicstaticexternIntPtrGetParent(IntPtrhWnd);
[DllImport(“user32.dll”,EntryPoint=”GetWindowThreadProcessId”)]
publicstaticexternuintGetWindowThreadProcessId(IntPtrhWnd,refuintlpdwProcessId);
[DllImport(“user32.dll”,EntryPoint=”IsWindow”)]
publicstaticexternboolIsWindow(IntPtrhWnd);
[DllImport(“kernel32.dll”,EntryPoint=”SetLastError”)]
publicstaticexternvoidSetLastError(uintdwErrCode);
publicstaticIntPtrGetCurrentWindowHandle()
{
IntPtrptrWnd=IntPtr.Zero;
uintuiPid=(uint)Process.GetCurrentProcess().Id; //当前进程ID
objectobjWnd=processWnd[uiPid];
if(objWnd!=null)
{
ptrWnd=(IntPtr)objWnd;
if(ptrWnd!=IntPtr.Zero&&IsWindow(ptrWnd)) //从缓存中获取句柄
{
returnptrWnd;
}
else
{
ptrWnd=IntPtr.Zero;
}
}
boolbResult=EnumWindows(newWNDENUMPROC(EnumWindowsProc),uiPid);
//枚举窗口返回false并且没有错误号时表明获取成功
if(!bResult&&Marshal.GetLastWin32Error()==0)
{
objWnd=processWnd[uiPid];
if(objWnd!=null)
{
ptrWnd=(IntPtr)objWnd;
}
}
returnptrWnd;
}
privatestaticboolEnumWindowsProc(IntPtrhwnd,uintlParam)
{
uintuiPid=0;
if(GetParent(hwnd)==IntPtr.Zero)
{
GetWindowThreadProcessId(hwnd,refuiPid);
if(uiPid==lParam) //找到进程对应的主窗口句柄
{
processWnd[uiPid]=hwnd; //把句柄缓存起来
SetLastError(0); //设置无错误
returnfalse; //返回false以终止枚举窗口
}
}
returntrue;
}
}
调用User32API.GetCurrentWindowHandle()即可返回当前进程的主窗口句柄,如果获取失败则返回IntPtr.Zero。
–EOF–
您可能感兴趣的文章:win7中C#的winForm编程使用savefiledialog不能弹出保存窗体的解决方法C#设置MDI子窗体只能弹出一个的方法C#实现在前端网页弹出警告对话框(alert)的方法C#实现客户端弹出消息框封装类实例C#调用API函数弹出映射网络驱动器对话框问题div弹出层的ajax登录(Jquery版+c#)C#WinForm窗口最小化到系统托盘C#Winform中实现主窗口打开登录窗口关闭的方法c#winform窗口一直置顶显示在桌面最上方或最底层的方法C#Winform让整个窗口都可以拖动C#winform实现右下角弹出窗口结果的方法
C++实现顺序排序算法简单示例代码
VC++实现选择排序算法简单示例
上述就是C#学习教程:C#获取进程的主窗口句柄的实现方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/904632.html