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