久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C# Windows API應(yīng)用之GetDesktopWindow

 redersun 2016-03-01

Windows API


Windows 這個(gè)多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行,、分配內(nèi)存,、管理資源…之外,, 它同時(shí)也是一個(gè)很大的服務(wù)中心,,調(diào)用這個(gè)服務(wù)中心的各種服務(wù)(每一種服務(wù)就是一個(gè)函數(shù)),,可以幫應(yīng)用程式達(dá)到開啟視窗,、描繪圖形,、使用周邊設(shè)備等目的,由于這些函數(shù)服務(wù)的對(duì)象是應(yīng)用程序(Application),, 所以便稱之為 Application Programming Interface,,簡稱 API 函數(shù)。WIN32 API也就是Microsoft Windows 32位平臺(tái)的應(yīng)用程序編程接口,。

GetDesktopWindow


函數(shù)功能:該函數(shù)返回桌面窗口的句柄,。桌面窗口覆蓋整個(gè)屏幕。桌面窗口是一個(gè)要在其上繪制所有的圖標(biāo)和其他窗口的區(qū)域,。
函數(shù)原型:HWND GetDesktopWindow(VOID)
參數(shù):無,。
返回值:函數(shù)返回桌面窗口的句柄。
速查:Windows NT:3.1以上版本,;Windows:95以上版本:,;
頭文件:Winuser.h;庫文件:user32.lib,。
【聲明】
vb
Public Declare Function GetDesktopWindow Lib “user32” Alias “GetDesktopWindow” () As Long
vb_net
Public Declare Function GetDesktopWindow Lib “user32” Alias “GetDesktopWindow” () As Integer
c#
[DllImport(“user32.dll”, EntryPoint = “GetDesktopWindow”, CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetDesktopWindow();

【說明】
  獲得代表整個(gè)屏幕的一個(gè)窗口(桌面窗口)句柄
【返回值】
  Long,,桌面窗口的句柄

獲得桌面所有窗口句柄的方法


創(chuàng)建項(xiàng)目

文件->新建->項(xiàng)目…
這里寫圖片描述

API導(dǎo)入

GetDesktopWindow

/// <summary>
        /// 該函數(shù)返回桌面窗口的句柄。桌面窗口覆蓋整個(gè)屏幕,。桌面窗口是一個(gè)要在其上繪制所有的圖標(biāo)和其他窗口的區(qū)域,。
        /// 【說明】獲得代表整個(gè)屏幕的一個(gè)窗口(桌面窗口)句柄.
        /// </summary>
        /// <returns>返回值:函數(shù)返回桌面窗口的句柄。</returns>
        [DllImport("user32.dll", EntryPoint = "GetDesktopWindow", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr GetDesktopWindow();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

GetWindow

        /// <summary>
        /// 該函數(shù)返回與指定窗口有特定關(guān)系(如Z序或所有者)的窗口句柄,。
        /// 函數(shù)原型:HWND GetWindow(HWND hWnd,,UNIT nCmd);
        /// </summary>
        /// <param name="hWnd">窗口句柄,。要獲得的窗口句柄是依據(jù)nCmd參數(shù)值相對(duì)于這個(gè)窗口的句柄,。</param>
        /// <param name="uCmd">說明指定窗口與要獲得句柄的窗口之間的關(guān)系,。該參數(shù)值參考GetWindowCmd枚舉。</param>
        /// <returns>返回值:如果函數(shù)成功,,返回值為窗口句柄,;如果與指定窗口有特定關(guān)系的窗口不存在,則返回值為NULL,。
        /// 若想獲得更多錯(cuò)誤信息,,請(qǐng)調(diào)用GetLastError函數(shù)。
        /// 備注:在循環(huán)體中調(diào)用函數(shù)EnumChildWindow比調(diào)用GetWindow函數(shù)可靠,。調(diào)用GetWindow函數(shù)實(shí)現(xiàn)該任務(wù)的應(yīng)用程序可能會(huì)陷入死循環(huán)或退回一個(gè)已被銷毀的窗口句柄。
        /// 速查:Windows NT:3.1以上版本,;Windows:95以上版本,;Windows CE:1.0以上版本;頭文件:winuser.h,;庫文件:user32.lib,。
        /// </returns>
        [DllImport("user32.dll", SetLastError = true)]
        static extern IntPtr GetWindow(IntPtr hWnd, GetWindowCmd uCmd);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

GetWindowCmd

        /// <summary>
        /// 窗口與要獲得句柄的窗口之間的關(guān)系。
        /// </summary>
        enum GetWindowCmd : uint
        {
            /// <summary>
            /// 返回的句柄標(biāo)識(shí)了在Z序最高端的相同類型的窗口,。
            /// 如果指定窗口是最高端窗口,,則該句柄標(biāo)識(shí)了在Z序最高端的最高端窗口;
            /// 如果指定窗口是頂層窗口,,則該句柄標(biāo)識(shí)了在z序最高端的頂層窗口:
            /// 如果指定窗口是子窗口,,則句柄標(biāo)識(shí)了在Z序最高端的同屬窗口。
            /// </summary>
            GW_HWNDFIRST = 0,
            /// <summary>
            /// 返回的句柄標(biāo)識(shí)了在z序最低端的相同類型的窗口,。
            /// 如果指定窗口是最高端窗口,,則該柄標(biāo)識(shí)了在z序最低端的最高端窗口:
            /// 如果指定窗口是頂層窗口,則該句柄標(biāo)識(shí)了在z序最低端的頂層窗口,;
            /// 如果指定窗口是子窗口,,則句柄標(biāo)識(shí)了在Z序最低端的同屬窗口。
            /// </summary>
            GW_HWNDLAST = 1,
            /// <summary>
            /// 返回的句柄標(biāo)識(shí)了在Z序中指定窗口下的相同類型的窗口,。
            /// 如果指定窗口是最高端窗口,,則該句柄標(biāo)識(shí)了在指定窗口下的最高端窗口:
            /// 如果指定窗口是頂層窗口,則該句柄標(biāo)識(shí)了在指定窗口下的頂層窗口,;
            /// 如果指定窗口是子窗口,,則句柄標(biāo)識(shí)了在指定窗口下的同屬窗口。
            /// </summary>
            GW_HWNDNEXT = 2,
            /// <summary>
            /// 返回的句柄標(biāo)識(shí)了在Z序中指定窗口上的相同類型的窗口,。
            /// 如果指定窗口是最高端窗口,,則該句柄標(biāo)識(shí)了在指定窗口上的最高端窗口;
            /// 如果指定窗口是頂層窗口,,則該句柄標(biāo)識(shí)了在指定窗口上的頂層窗口,;
            /// 如果指定窗口是子窗口,則句柄標(biāo)識(shí)了在指定窗口上的同屬窗口。
            /// </summary>
            GW_HWNDPREV = 3,
            /// <summary>
            /// 返回的句柄標(biāo)識(shí)了指定窗口的所有者窗口(如果存在),。
            /// GW_OWNER與GW_CHILD不是相對(duì)的參數(shù),,沒有父窗口的含義,如果想得到父窗口請(qǐng)使用GetParent(),。
            /// 例如:例如有時(shí)對(duì)話框的控件的GW_OWNER,,是不存在的。
            /// </summary>
            GW_OWNER = 4,
            /// <summary>
            /// 如果指定窗口是父窗口,,則獲得的是在Tab序頂端的子窗口的句柄,,否則為NULL。
            /// 函數(shù)僅檢查指定父窗口的子窗口,,不檢查繼承窗口,。
            /// </summary>
            GW_CHILD = 5,
            /// <summary>
            /// (WindowsNT 5.0)返回的句柄標(biāo)識(shí)了屬于指定窗口的處于使能狀態(tài)彈出式窗口(檢索使用第一個(gè)由GW_HWNDNEXT 查找到的滿足前述條件的窗口);
            /// 如果無使能窗口,,則獲得的句柄與指定窗口相同,。
            /// </summary>
            GW_ENABLEDPOPUP = 6
        }

        /*GetWindowCmd指定結(jié)果窗口與源窗口的關(guān)系,它們建立在下述常數(shù)基礎(chǔ)上:
              GW_CHILD
              尋找源窗口的第一個(gè)子窗口
              GW_HWNDFIRST
              為一個(gè)源子窗口尋找第一個(gè)兄弟(同級(jí))窗口,,或?qū)ふ业谝粋€(gè)頂級(jí)窗口
              GW_HWNDLAST
              為一個(gè)源子窗口尋找最后一個(gè)兄弟(同級(jí))窗口,,或?qū)ふ易詈笠粋€(gè)頂級(jí)窗口
              GW_HWNDNEXT
              為源窗口尋找下一個(gè)兄弟窗口
              GW_HWNDPREV
              為源窗口尋找前一個(gè)兄弟窗口
              GW_OWNER
              尋找窗口的所有者
         */
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

編寫方法

        /// <summary>
        /// 獲得桌面所有窗口句柄的方法
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Rows.Clear();

            //1、獲取桌面窗口的句柄
            IntPtr desktopPtr = GetDesktopWindow();
            //2,、獲得一個(gè)子窗口(這通常是一個(gè)頂層窗口,,當(dāng)前活動(dòng)的窗口)
            IntPtr winPtr = GetWindow(desktopPtr, GetWindowCmd.GW_CHILD);

            //3、循環(huán)取得桌面下的所有子窗口
            while (winPtr != IntPtr.Zero)
            {
                //4,、繼續(xù)獲取下一個(gè)子窗口
                winPtr = GetWindow(winPtr, GetWindowCmd.GW_HWNDNEXT);
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多