//Steve Bussey #include #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); static char sClassName[] = "MyClass"; static HINSTANCE zhInstance = NULL; HWND HwndHideShow; HFONT hf; int i; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX WndClass; HWND hwnd; MSG Msg; zhInstance = hInstance; WndClass.cbSize = sizeof(WNDCLASSEX); WndClass.style = NULL; WndClass.lpfnWndProc = WndProc; WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hInstance = zhInstance; WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW); WndClass.lpszMenuName = NULL; WndClass.lpszClassName = sClassName; WndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&WndClass)) { MessageBox(0, "Error Registering Class!", "Error!", MB_ICONSTOP | MB_OK); return 0; } hwnd = CreateWindowEx(WS_EX_STATICEDGE, sClassName, "Printscreen Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 250, 100, NULL, NULL, zhInstance, NULL); if(hwnd == NULL) { MessageBox(0, "Error Creating Window!", "Error!", MB_ICONSTOP | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; } void find(){ WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; i = 0; hFind = FindFirstFile("bitmap*.bmp", &FindFileData); if(hFind == INVALID_HANDLE_VALUE) { MessageBox(0, "Error Invalid Path!", "Error!", MB_ICONSTOP | MB_OK); i = 0; } else{ i++; } while(FindNextFile(hFind, &FindFileData) != 0) { i++; } FindClose(hFind); } bool SaveBitmap(HDC hDC,HBITMAP hBitmap, char* szPath) { FILE* fp = NULL; fp = fopen(szPath ,"wb"); if(fp == NULL) return false; BITMAP Bm; BITMAPINFO BitInfo; ZeroMemory(&BitInfo, sizeof(BITMAPINFO)); BitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); BitInfo.bmiHeader.biBitCount = 0; if(!GetDIBits(hDC, hBitmap, 0, 0, NULL, &BitInfo, DIB_RGB_COLORS)) return (false); Bm.bmHeight = BitInfo.bmiHeader.biHeight; Bm.bmWidth = BitInfo.bmiHeader.biWidth; BITMAPFILEHEADER BmHdr; BmHdr.bfType = 0x4d42; // 'BM' WINDOWS_BITMAP_SIGNATURE BmHdr.bfSize = (((3 * Bm.bmWidth + 3) & ~3) * Bm.bmHeight) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); BmHdr.bfReserved1 = BmHdr.bfReserved2 = 0; BmHdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); BitInfo.bmiHeader.biCompression = 0; // Writing Bitmap File Header //// fwrite(&BmHdr,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&BitInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp); BYTE *pData = new BYTE[BitInfo.bmiHeader.biSizeImage + 5]; if(!GetDIBits(hDC, hBitmap, 0, Bm.bmHeight, pData, &BitInfo, DIB_RGB_COLORS)) return (false); if(pData != NULL) fwrite(pData,1,BitInfo.bmiHeader.biSizeImage,fp); fclose(fp); delete (pData); return (true); } void CreateBit (HDC hdc, int xStart, int yStart, int xFinish, int yFinish, HBITMAP hBitmap, bool bol) { BITMAP bm; HDC hdcScreen, hdcCompatible; POINT pt; char* bitmap; hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL); hdcCompatible = CreateCompatibleDC(hdcScreen); hBitmap = CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES)); if (hBitmap == 0) MessageBox(0, "Error, hBitmap", "Error!", MB_ICONSTOP | MB_OK); if (!SelectObject(hdcCompatible, hBitmap)) MessageBox(0, "Error, Select Object", "Error!", MB_ICONSTOP | MB_OK); GetObject (hBitmap, sizeof(BITMAP), &bm); if(bol) { } if(!bol) { if (!BitBlt(hdcCompatible, 0,0, bm.bmWidth, bm.bmHeight, hdcScreen, 0,0, SRCCOPY)) MessageBox(0, "Error, BitBlt1", "Error!", MB_ICONSTOP | MB_OK); wsprintf(bitmap,"%s%d%s","Bit",i,".bmp"); if(!SaveBitmap(hdcCompatible, hBitmap, bitmap)) MessageBox(0, "Error Creating bmp!", "Error!", MB_ICONSTOP | MB_OK); i++; } DeleteDC(hdcScreen); DeleteDC(hdcCompatible); } LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { HBITMAP hBitmap; HDC hdc; PAINTSTRUCT ps; switch(Message) { case WM_CREATE: find(); if (!RegisterHotKey(hwnd, 1, MOD_CONTROL, VK_F12)) MessageBox(0, "Error RegisterHotkey", "Error", MB_OK); break; case WM_HOTKEY: if(wParam == 1) { CreateBit (NULL, 0, 0, 500, 400, hBitmap, FALSE); DeleteObject(hBitmap); } break; case WM_CLOSE: if(!UnregisterHotKey(hwnd, 1)) MessageBox(0, "Error UnRegisterHotkey", "Error", MB_OK); DeleteObject(hBitmap); DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, Message, wParam, lParam); } return 0; }