M
						
					
					
						
					
				
				
					Viel Spaß!
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <ctime>
//process the window messages
LRESULT CALLBACK windowProc(HWND, UINT, WPARAM, LPARAM);
//extract RGB values from COLORREF
//////////////////////////////BETA CODER/////////////////////////////////////////
//DIRECTX MODULE umgehen mit Windows! Für Einsteiger! ////////////////////
////////////BEI manchen DIRECTX Programmen brauchen an noch einen Hook für die Tasten///
//timer id
unsigned int timer = 1;
//interval in ms to get the color
unsigned int interval = 1;
int dx = GetSystemMetrics(SM_CXSCREEN); 
int dy = GetSystemMetrics(SM_CYSCREEN); 
int timex =0;
//main function
int multi;
bool LoadBMPIntoDC ( HDC hDC)
{
     multi=3/2;
///////////////Daten//////////////////////////////     
    BITMAPINFO info = {0};
     info.bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
     info.bmiHeader.biWidth    = dx;
     info.bmiHeader.biHeight   = dy;
     info.bmiHeader.biPlanes   = 1;
     info.bmiHeader.biBitCount = 32; 
      int x=1, y=1, i;
     HBITMAP bitmap;
     RGBQUAD* memory;
/////////////////////////////////////////////////////     
///////////////Bild in den Speicher laden aus Clipboard//////////////     
if ( ( NULL == hDC  ) )
		return false;
///We then use the windows function LoadImage to load the bitmap into a Bitmap Handle:
OpenClipboard(NULL);
HBITMAP hBmp = (HBITMAP) GetClipboardData(CF_BITMAP);
CloseClipboard();
if(hBmp==NULL)
{
/*MessageBox(NULL,"Error GetClipboardData(CF_BITMAP)",NULL,MB_OK);
 DeleteDC(screen);
 PostQuitMessage(0);
 return 0;*/
}
if ( NULL == hBmp )
		return false;  
HDC dcmem = CreateCompatibleDC ( hDC );
if ( NULL == SelectObject ( dcmem, hBmp ) )
	{
	/*MessageBox(NULL,"Error SelectObjekt(dcmem,hBmp)",NULL,MB_OK);
	DeleteDC(screen);
    PostQuitMessage(0);
    return 0;*/
	}
	BITMAP bmp;
	if(GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp)==0)
    {
    /*MessageBox(NULL,"Error GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp)",NULL,MB_OK);
    DeleteDC(screen);
    PostQuitMessage(0);
    return 0;*/
    }
	SelectObject(hDC, hBmp);
     SetStretchBltMode(hDC,HALFTONE);
     if(StretchBlt(hDC, 
                  0, 
                  0, 
                  dx, 
                  dy, 
                  dcmem, 
                  0, 
                  0, 
                  dx,
                  dy,
                  SRCCOPY)==0)
                  	{	
    /*MessageBox(NULL,"Error StretchBlt(hDC, 0, 0, dx, dy, dcmem, 0, 0, dx+dx-dx/2,dy+dy-dy/2,SRCCOPY)",NULL,MB_OK);
    DeleteDC(screen);
    PostQuitMessage(0);
    return 0;*/
	}
    HDC UeberHdc = CreateCompatibleDC ( hDC );
    UeberHdc = hDC;
    DeleteDC ( dcmem );  // clear up the memory dc	
	return true;
}
///////////////////////////////////////////////////////////////////////////////////
bool FindPixelred1(HDC hDC)
     {
     if(!GetAsyncKeyState(0x10))
     {
     keybd_event(0x2c, 0, 0, 0);
     keybd_event(0x2c,0, KEYEVENTF_KEYUP,0); 
     int x=1, y=1, i;
     int dx = GetSystemMetrics(SM_CXSCREEN);
     int dy = GetSystemMetrics(SM_CYSCREEN);
     BITMAPINFO info = {0};
     info.bmiHeader.biSize     = sizeof(BITMAPINFOHEADER);
     info.bmiHeader.biWidth    = dx;
     info.bmiHeader.biHeight   = dy;
     info.bmiHeader.biPlanes   = 1;
     info.bmiHeader.biBitCount = 32; // 32:RGBQUAD; 24:RGBTRIPLE
     HBITMAP bitmap;
     RGBQUAD* memory;
     bitmap = CreateDIBSection(hDC, &info, DIB_RGB_COLORS, (void**)&memory, 0, 0);
     //if(!bitmap || !memory) return ReleaseDC(0, hdcDesktop);
     HDC hdcMemory  = CreateCompatibleDC(hdcMemory);
     HGDIOBJ oldbitmap = SelectObject(hdcMemory, bitmap);
     BitBlt(hdcMemory, 0, 0, dx, dy, hDC, 0, 0, SRCCOPY);
     SelectObject(hdcMemory, oldbitmap);
     DeleteDC(hdcMemory);
     //ReleaseDC(0, hdcDesktop); später
    int red,green,blue,rx,gx,bx;
     int tbytes = dx * dy;
     // biBitCount = 32;
     for (i=0; i<tbytes; i++)
     {
         RGBQUAD *p = &memory[i];
         if (RGB(p->rgbRed, p->rgbGreen, p->rgbBlue) == RGB(255,0,0))//Rot //Hier die gewünschte Farbe einstellen
         {
             y = i / dx;
             x = i % dx;
             y = dy - y - 1; // nur wenn info.bmiHeader.biHeight ist positiv
             SetCursorPos(x,y);
             break;
         }
     }
     Sleep(100);
     DeleteObject(bitmap);
     }
     return true;
     }
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow)
{
    //program and class name
    const char *progName = "COPY to CLIPBOARD find PIXEL";
    //create window class
    WNDCLASS windowClass;
    //message function
    windowClass.lpfnWndProc = windowProc;
    //enable redrawing
    windowClass.style       = CS_HREDRAW | CS_VREDRAW;
    //program instance
    windowClass.hInstance   = hInstance;
    //standard cursor
    windowClass.hCursor     = LoadCursor(NULL, IDC_ARROW);
    //standard icon
    windowClass.hIcon       = NULL;
    //gray background
    windowClass.hbrBackground = static_cast<HBRUSH>(GetStockObject(BLACK_BRUSH));
    //extra buffer
    windowClass.cbClsExtra  = 0;
    windowClass.cbWndExtra  = 0;
    //name to represent our window class
    windowClass.lpszClassName = progName;
    //we don't need menu
    windowClass.lpszMenuName  = NULL;
    //register our class to windows
    if(!RegisterClass(&windowClass))
            return 0;
    //create window
    HWND window;
    window = CreateWindowEx(WS_EX_TRANSPARENT, //allways on top of others
                            progName, //name of window class
                            progName, //text in the titlebar
                            //no resizable window without minimize option
                            WS_POPUP|WS_MINIMIZE|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
                            //default window position
                            0, 0,
                            //window width and height
                            dx, dy,
                            //no parent window
                            NULL,
                            //no menu
                            NULL,
                            hInstance,
                            //no extra parameters
                            NULL);
    //quit if we can't create a window
if(!window)
        return 0;
    //show
    ShowWindow(window, nCmdShow);
    UpdateWindow(window);
    //process messages
    MSG message;
    while(GetMessage(&message, NULL, 0, 0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return message.wParam;
}
LRESULT CALLBACK windowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        //window creation
        case WM_CREATE:
        {
            //set timer to get the pixel color
            if(!SetTimer(hwnd, timer, interval, NULL))
                return 0;
        }break;
        //timer
        case WM_TIMER:
        {
             if(GetAsyncKeyState(0x61))
             {
             KillTimer(hwnd, timer);
             PostQuitMessage(0);
             return 0;
             }
            InvalidateRect(hwnd, NULL, true);
        }break;
        //repaint
        case WM_PAINT:
        {
            //get the window device context for drawing
            PAINTSTRUCT ps;
            HDC windowDC;
            windowDC = BeginPaint(hwnd, &ps);
////////////////////////////////////////////////////////////////////////////////////
           LoadBMPIntoDC(windowDC); 
////////////////////////////////////////////////////////////////////////////////////
           FindPixelred1(windowDC);
////////////////////////////////////////////////////////////////////////////////////
          /* keybd_event(0x2c, 0, 0, 0);
           keybd_event(0x2c,0, KEYEVENTF_KEYUP,0); 
           Sleep(100);*/
           ReleaseDC ( hwnd, windowDC );             // release dc 
            DeleteDC(windowDC);
            EndPaint(hwnd, &ps);
        }break;
        case WM_DESTROY:
        {
            KillTimer(hwnd, timer);
            PostQuitMessage(0);
            return 0;
        }break;
    }
    return DefWindowProc(hwnd, message, wParam, lParam);
}
Warum::Darum::Andersrum