簡體   English   中英

檢索Windows 10任務欄的顏色

[英]Retrieve color of windows 10 taskbar

我發現, System.Windows.SystemParameters類中有一個靜態屬性,用於聲明用戶為其Windows整體選擇的顏色。

但是,用戶還有另一種可能性可以使他啟用或禁用任務欄/窗口欄是否應使用相同的顏色。

我無法在SystemParameters類中找到該鍵。

我相信有一個注冊表值可以找到顏色,並且可能在里面:

HKEY_CURRENT_USER\Control Panel\Colors

但是,在我的系統上,我禁用了任務欄上的顏色,並且該鍵中似乎沒有顏色值。

解決方法是將以下兩個問題的答案結合起來:

  1. 任務欄位置
  2. 如何讀取屏幕像素的顏色

您需要以下導入:

[DllImport("shell32.dll")]
private static extern IntPtr SHAppBarMessage(int msg, ref APPBARDATA data);

[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
private static extern int BitBlt(IntPtr hDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop);

以下結構:

private struct APPBARDATA
{
    public int cbSize;
    public IntPtr hWnd;
    public int uCallbackMessage;
    public int uEdge;
    public RECT rc;
    public IntPtr lParam;
}

private struct RECT
{
    public int left, top, right, bottom;
}

以及以下常量:

private const int ABM_GETTASKBARPOS = 5;

然后可以調用以下兩個方法:

public static Rectangle GetTaskbarPosition()
{
    APPBARDATA data = new APPBARDATA();
    data.cbSize = Marshal.SizeOf(data);

    IntPtr retval = SHAppBarMessage(ABM_GETTASKBARPOS, ref data);
    if (retval == IntPtr.Zero)
    {
        throw new Win32Exception("Please re-install Windows");
    }

    return new Rectangle(data.rc.left, data.rc.top, data.rc.right - data.rc.left, data.rc.bottom - data.rc.top);
}

public static Color GetColourAt(Point location)
{
    using (Bitmap screenPixel = new Bitmap(1, 1, PixelFormat.Format32bppArgb))
    using (Graphics gdest = Graphics.FromImage(screenPixel))
    {
        using (Graphics gsrc = Graphics.FromHwnd(IntPtr.Zero))
        {
            IntPtr hSrcDC = gsrc.GetHdc();
            IntPtr hDC = gdest.GetHdc();
            int retval = BitBlt(hDC, 0, 0, 1, 1, hSrcDC, location.X, location.Y, (int)CopyPixelOperation.SourceCopy);
            gdest.ReleaseHdc();
            gsrc.ReleaseHdc();
        }

        return screenPixel.GetPixel(0, 0);
    }
}

像這樣:

Color taskBarColour = GetColourAt(GetTaskbarPosition().Location);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM