写了个灰常破烂的桌面颜色抓取器

/*

	看书看的无聊,,随便写了个桌面颜色抓取器

	功能:抓取鼠标所在点的颜色,返回16进制颜色,并显示颜色

 */

#include 
#include 

int main()
{
	typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();
	PROCGETCONSOLEWINDOW GetConsoleWindow;	
	HMODULE hKernel32 = GetModuleHandle("kernel32");
	GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");	

	HDC hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL);
	HDC hdcConsole=GetDC(GetConsoleWindow());
	char s[1024];
	POINT cursorpos;
	for(;;Sleep(10)){
		GetCursorPos(&cursorpos);		
		COLORREF c= GetPixel(hdc,cursorpos.x,cursorpos.y);
		sprintf(s,"X:%d,Y:%d   R:%X G:%X B:%X RGB:%X HTML:#%02X%02X%02X           "
			,cursorpos.x,cursorpos.y, GetRValue(c),GetGValue(c),GetBValue(c),
			c, GetRValue(c),GetGValue(c),GetBValue(c));
	
		SetTextColor(hdcConsole,c);
		TextOut(hdcConsole,0,40,TEXT("Www.Ternsoft.Com"),strlen("Www.Ternsoft.Com"));
		printf("\r%s",s);
		//break;
	}
	getchar();
	return 0;


}

//再来一个桌面版的
#include <STDIO.H>
#include <windows.h>
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    static TCHAR szAppName[] = TEXT ("MyTestWindow");
    HWND         hwnd;
    MSG          msg;
    WNDCLASSEX   wndclassex = {0};
    wndclassex.cbSize        = sizeof(WNDCLASSEX);
    wndclassex.style         = CS_HREDRAW | CS_VREDRAW;
    wndclassex.lpfnWndProc   = WndProc;
    wndclassex.cbClsExtra    = 0;
    wndclassex.cbWndExtra    = 0;
    wndclassex.hInstance     = hInstance;
    wndclassex.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wndclassex.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
    wndclassex.lpszMenuName  = NULL;
    wndclassex.lpszClassName = szAppName;
    wndclassex.hIconSm       = wndclassex.hIcon;
	
    if (!RegisterClassEx (&wndclassex))
    {
        MessageBox (NULL, TEXT ("RegisterClassEx failed!"), szAppName, MB_ICONERROR);
        return 0;
    }
    hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, 
		szAppName, 
		TEXT ("Ternsoft.com 桌面取色器"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		CW_USEDEFAULT, 
		NULL, 
		NULL, 
		hInstance,
		NULL); 
	
    ShowWindow (hwnd, iCmdShow);
    UpdateWindow (hwnd);
	
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
    }
    return msg.wParam;
}
bool bGetColor=false;
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
	char strMsg[256];
	POINT ptMousePos;
	UINT nPosColor;
    switch (message)
    {
    case WM_CREATE:
        return (0);
		
    case WM_PAINT:
        hdc = BeginPaint (hwnd, &ps);
        TextOut (hdc, 0, 0, ("请在本窗口空白区按住鼠标左键,移动鼠标到需要取色的位置后释放左键"), 64);
        EndPaint (hwnd, &ps);
        return (0);
	case WM_MOUSEMOVE:
		if(bGetColor){
			hdc=GetDC(hwnd);
			GetCursorPos(&ptMousePos);
			SetTextColor(hdc,nPosColor=GetPixel(CreateDC("DISPLAY",0,0,0),ptMousePos.x,ptMousePos.y));
			TextOut(hdc,30,30,strMsg,sprintf(strMsg,"x:%d y:%d  RGB:%02X %02X %02X        ",
				ptMousePos.x,ptMousePos.y,GetRValue(nPosColor),GetGValue(nPosColor),GetBValue(nPosColor)));
			
			ReleaseDC(hwnd,hdc);
		}
		return 0;
	case WM_LBUTTONDOWN:
		bGetColor=true;
		SetCursor(LoadCursor(NULL,IDC_CROSS));
		SetCapture(hwnd);
		return 0;
	case WM_LBUTTONUP:		
		bGetColor=false;
		ReleaseCapture();
		return 0;
    case WM_DESTROY:
        PostQuitMessage (0);
        return (0);
    }
    return DefWindowProc (hwnd, message, wParam, lParam);
}

评论列表