最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#獲取進(jìn)程的主窗口句柄的實(shí)現(xiàn)方法

 更新時(shí)間:2013年04月28日 15:39:40   作者:  
C#獲取進(jìn)程的主窗口句柄的實(shí)現(xiàn)方法,需要的朋友可以參考一下

通過調(diào)用Win32 API實(shí)現(xiàn)。

復(fù)制代碼 代碼如下:

public class User32API
{
    private static Hashtable processWnd = null;

    public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);

    static User32API()
    {
        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 static IntPtr GetCurrentWindowHandle()
    {
        IntPtr ptrWnd = IntPtr.Zero;
        uint uiPid = (uint)Process.GetCurrentProcess().Id;  // 當(dāng)前進(jìn)程 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 并且沒有錯(cuò)誤號時(shí)表明獲取成功
        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)    // 找到進(jìn)程對應(yīng)的主窗口句柄
            {
                processWnd[uiPid] = hwnd;   // 把句柄緩存起來
                SetLastError(0);    // 設(shè)置無錯(cuò)誤
                return false;   // 返回 false 以終止枚舉窗口
            }
        }

        return true;
    }
}

調(diào)用User32API.GetCurrentWindowHandle()即可返回當(dāng)前進(jìn)程的主窗口句柄,如果獲取失敗則返回IntPtr.Zero。

--EOF--

相關(guān)文章

  • C# 讀寫XML文件實(shí)例代碼

    C# 讀寫XML文件實(shí)例代碼

    在本篇文章里小編給大家整理的是關(guān)于C# 讀寫XML文件最簡單方法,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2020-03-03
  • C#如何優(yōu)雅的對WinForm窗體應(yīng)用程序進(jìn)行權(quán)限控制

    C#如何優(yōu)雅的對WinForm窗體應(yīng)用程序進(jìn)行權(quán)限控制

    經(jīng)常會出現(xiàn)winfrom頁面需要加載權(quán)限樹,下面這篇文章主要給大家介紹了關(guān)于C#如何優(yōu)雅的對WinForm窗體應(yīng)用程序進(jìn)行權(quán)限控制的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Unity UGUI的GridLayoutGroup網(wǎng)格布局組件使用詳解

    Unity UGUI的GridLayoutGroup網(wǎng)格布局組件使用詳解

    這篇文章主要介紹了Unity UGUI的GridLayoutGroup網(wǎng)格布局組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 解析C#中斷言與異常的應(yīng)用方式及異常處理的流程控制

    解析C#中斷言與異常的應(yīng)用方式及異常處理的流程控制

    這篇文章主要介紹了C#中斷言與異常的應(yīng)用方式及異常處理的流程控制,一般來說斷言用于修正程序員自己的錯(cuò)誤而異常用于應(yīng)對程序運(yùn)行過程中可能出現(xiàn)的錯(cuò)誤,需要的朋友可以參考下
    2016-01-01
  • C#中sealed修飾符的具體使用

    C#中sealed修飾符的具體使用

    在 C# 中,sealed?是一個(gè)修飾符,用于限制繼承和重寫,本文就來介紹一下具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 詳解C#中的out和ref

    詳解C#中的out和ref

    本文主要介紹了out和ref的相關(guān)知識。具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-01-01
  • C#中事件的繼承實(shí)例分析

    C#中事件的繼承實(shí)例分析

    這篇文章主要介紹了C#中事件的繼承,通過一個(gè)面向?qū)ο蟪绦驅(qū)嵗齺碚f明子類調(diào)用父類事件的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-08-08
  • C#中簡單的拆箱操作用法實(shí)例分析

    C#中簡單的拆箱操作用法實(shí)例分析

    這篇文章主要介紹了C#中簡單的拆箱操作用法.實(shí)例分析了C#中拆箱的概念與相關(guān)的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#數(shù)組學(xué)習(xí)相關(guān)資料整理

    C#數(shù)組學(xué)習(xí)相關(guān)資料整理

    最近開始學(xué)習(xí)c#,并有幸接觸到了數(shù)組方便的操作,感覺確實(shí)不錯(cuò),這里簡單的整理下c#相關(guān)的學(xué)習(xí)資料,方便大家學(xué)習(xí)
    2012-09-09
  • C#加解密之DES算法的實(shí)現(xiàn)

    C#加解密之DES算法的實(shí)現(xiàn)

    DES算法為密碼體制中的對稱密碼體制,又被稱為美國數(shù)據(jù)加密標(biāo)準(zhǔn)。本文將用C#語言實(shí)現(xiàn)DES算法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08

最新評論

长汀县| 香格里拉县| 福贡县| 凉山| 班戈县| 江达县| 南漳县| 贡觉县| 布尔津县| 天峨县| 积石山| 民权县| 观塘区| 云安县| 汽车| 德安县| 惠东县| 秭归县| 东乡县| 汉川市| 彩票| 铜梁县| 舒兰市| 衡南县| 西乌珠穆沁旗| 井陉县| 邵东县| 清丰县| 嘉义县| 宣威市| 大同市| 织金县| 金溪县| 大兴区| 宁波市| 海阳市| 剑河县| 中卫市| 营山县| 秭归县| 吉首市|