私はそこに色を見つけるために、レジストリ値があり、それが内部におそらくあると信じて:
HKEY_CURRENT_USER\Control Panel\Colors
しかし私のシステム上で、私は無効になってタスクバー上の色を持っており、その色値がに表示されていないようですこのキー。周り
作業は、次の2つの質問に対する答えを組み合わせることになります:
- TaskBar Location
- How to Read the Colour of a Screen Pixel
あなたは以下の輸入が必要です
[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 const int ABM_GETTASKBARPOS = 5;
次に、あなたは、次の2つのメソッドを呼び出すことができます。このよう
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);
は、私の答えは役に立ちましたか?もしそうなら、あなたはそれをアップヴォートして受け入れることができるので、他の人がその情報が役立つかどうかを容易に知ることができます。 – TheLethalCoder