動態獲取當前屏幕中光標位置的顏色集合。
使用系統;
使用系統。繪圖;
使用系統。收藏;
使用系統。組件模型;
使用系統。Windows . Forms
使用系統。數據;
使用系統。繪圖。成像;
使用系統。Runtime . InteropServices
命名空間LiBo。顏色選擇器
{
公共類Form1 : System。窗口.窗體.窗體
{
//桌面工作區的大小
工作區大小;
//窗體的初始位置以及左下角和右下角的位置。
點formLoc,ptLeftBottom,ptRightBottom
私人系統。Windows . Forms.Label lblColor
私人系統。Windows . Forms.TextBox txtArgb
私人系統。Windows . Forms.Timer tmr
私人系統。Windows.Forms.ToolTip提示;
私人系統。ComponentModel.IContainer組件;
[ DllImport ( "gdi32.dll" ) ]
私有靜態外部bool BitBlt(
IntPtr hdcDest,//目標設備的句柄。
Int nXDest,//目標對象左上角的x坐標。
Int nYDest,//目標對象左上角的x坐標。
Int nWidth,//目標對象矩形的寬度。
Int nHeight,//目標對象矩形的長度
IntPtr hdcSrc,//源設備的句柄。
Int nXSrc,//源對象左上角的x坐標。
Int nYSrc,//源對象左上角的x坐標。
int dwRop //光柵的工作值
);
[ DllImport ( "gdi32.dll" ) ]
私有靜態外部IntPtr CreateDC(
字符串lpszDriver,//驅動程序名稱
字符串lpszDevice,//設備名稱
字符串lpszOutput,//沒用,可以設置位“NULL”。
IntPtr lpInitData //任意打印機數據
);
私有void Form1_DoubleClick(對象發送方,EventArgs e)
{
formLoc = this。位置;
這個。Location = ptRightBottom
這個。TopMost = true
tmr。Enabled = true
}
私有void tmr_Tick(對象發送方,EventArgs e)
{
//創建監視器的DC。
IntPtr HDL DISPLAY = CreateDC(" DISPLAY ",null,null,IntPtr。零);
//從指定設備的句柄創建新的Graphics對象。
圖形gfxDisplay =圖形。from hdc(HDL display);
//創建只有壹個像素大小的位圖對象。
Bitmap bmp =新位圖(1,1,gfx display);
//從指定的圖像對象創建新的圖形對象。
圖形gfxBmp =圖形。from image(BMP);
//獲取屏幕的句柄
IntPtr hdlScreen = gfxDisplay。get hdc();
//獲取位圖的句柄
IntPtr hdlBmp = gfxBmp。get hdc();
//將當前屏幕中鼠標指針所在的像素復制到位圖中。
BitBlt(hdlBmp,0,0,1,1,hdlScreen,MousePosition。x,鼠標位置。y,13369376);
//釋放屏幕句柄
gfxDisplayrelease hdc(HDL screen);
//釋放位圖句柄
gfxBmp。release hdc(HDL BMP);
lblColor。BackColor = bmp。GetPixel(0,0);//獲取像素的顏色
txtArgb。Text = "0x" + lblColor。BackColor.ToArgb()。ToString("x ")。ToUpper();
gfxDisplaydispose();
gfxBmp。dispose();
bmp。dispose();//釋放bmp使用的資源。
}
private void txtArgb_KeyPress(對象發送方,KeyPressEventArgs e)
{
//當按ESC鍵時,確定所選顏色的ARGB值。
//註意:只有當窗體處於活動狀態時才有效。
if (e.KeyChar == (char)Keys。逃)
{
tmr。Enabled = false
這個。Location = formLoc
這個。TopMost = false
txtArgb。select all();
}
}
私有void Form1_MouseEnter(對象發送方,EventArgs e)
{
如果(這個。location = = ptleftbottom)//表單在左下角。
{
這個。Location = ptRightBottom
}
else if(this . location = = ptrightbottom)//表單在右下角。
{
這個。Location = ptLeftBottom
}
}
}
}