C ++控制台“屏幕捕获”问题

我有这段代码,Screen Capture,它应该可以工作,但是我不知道它说“ No Target Architecture”的问题在哪里,我认为这是关于位的事情..我正在运行Windows 7 32bit,并且我正在使用Visual Studio2012。谢谢提前stackoverflow

#include <windef.h>
#include <wingdi.h>
#include <fileapi.h>
#include <Windows.h>
#include <handleapi.h>
#include <iostream>
using namespace std;    

HWND Window;
int main()
{
    char file[] = "c:\\Users\\Mt\Desktop\\j.jpg";
    if(Capture(file) == true)
        cout << "Screen shot successful at " << file << endl;
    else
        cout << "Unknow Error " << endl;

}    

HWND Window;
BOOL Capture(char *file)
{
    HDC hdc;
    HBITMAP bitmap;
    BITMAPINFO bmpinfo;
    LPVOID pBits;
    HDC hdc2;
    DWORD dwWidth, dwHeight, dwBPP, dwNumColors;
    HGDIOBJ gdiobj;
    HANDLE hfile;
    DWORD dwBytes;      

    hdc=CreateDC("DISPLAY", NULL, NULL, NULL);
    if(hdc==NULL) {
        return FALSE;
    }
    dwWidth = GetDeviceCaps(hdc, HORZRES);
    dwHeight = GetDeviceCaps(hdc, VERTRES);
    dwBPP = GetDeviceCaps(hdc, BITSPIXEL);
    if(dwBPP<=8) {
        dwNumColors = GetDeviceCaps(hdc, NUMCOLORS);
        dwNumColors = 256;
    } else {
        dwNumColors = 0;
    }
    hdc2=CreateCompatibleDC(hdc);
    if(hdc2==NULL) {
        DeleteDC(hdc);
        return FALSE;
    }
    bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpinfo.bmiHeader.biWidth = dwWidth;
    bmpinfo.bmiHeader.biHeight = dwHeight;
    bmpinfo.bmiHeader.biPlanes = 1;
    bmpinfo.bmiHeader.biBitCount = (WORD) dwBPP;
    bmpinfo.bmiHeader.biCompression = BI_RGB;
    bmpinfo.bmiHeader.biSizeImage = 0;
    bmpinfo.bmiHeader.biXPelsPerMeter = 0;
    bmpinfo.bmiHeader.biYPelsPerMeter = 0;
    bmpinfo.bmiHeader.biClrUsed = dwNumColors;
    bmpinfo.bmiHeader.biClrImportant = dwNumColors;
    bitmap = CreateDIBSection(hdc, &bmpinfo, DIB_PAL_COLORS, &pBits, NULL, 0);
    if(bitmap==NULL) {
        DeleteDC(hdc);
        DeleteDC(hdc2);
        return FALSE;
    }
    gdiobj = SelectObject(hdc2, (HGDIOBJ)bitmap);
    if((gdiobj==NULL) || (gdiobj==(void *)GDI_ERROR)) {
        DeleteDC(hdc);
        DeleteDC(hdc2);
        return FALSE;
    }
    if (!BitBlt(hdc2, 0,0, dwWidth, dwHeight, hdc, 0,0, SRCCOPY)) {
        DeleteDC(hdc);
        DeleteDC(hdc2);
        return FALSE;
    }   
    RGBQUAD colors[256];
    if(dwNumColors!=0) {
        dwNumColors = GetDIBColorTable(hdc2, 0, dwNumColors, colors);
    }   
    BITMAPFILEHEADER bitmapfileheader;
    BITMAPINFOHEADER bitmapinfoheader;
    bitmapfileheader.bfType = 0x4D42;
    bitmapfileheader.bfSize = ((dwWidth * dwHeight * dwBPP)/8) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (dwNumColors * sizeof(RGBQUAD));
    bitmapfileheader.bfReserved1 = 0;
    bitmapfileheader.bfReserved2 = 0;
    bitmapfileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (dwNumColors * sizeof(RGBQUAD));  
    bitmapinfoheader.biSize = sizeof(BITMAPINFOHEADER);
    bitmapinfoheader.biWidth = dwWidth;
    bitmapinfoheader.biHeight = dwHeight;
    bitmapinfoheader.biPlanes = 1;
    bitmapinfoheader.biBitCount = (WORD)dwBPP;
    bitmapinfoheader.biCompression = BI_RGB;
    bitmapinfoheader.biSizeImage = 0;
    bitmapinfoheader.biXPelsPerMeter = 0;
    bitmapinfoheader.biYPelsPerMeter = 0;
    bitmapinfoheader.biClrUsed = dwNumColors;
    bitmapinfoheader.biClrImportant = 0;    
    hfile=CreateFile(file,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    if(hfile==INVALID_HANDLE_VALUE) {
        DeleteObject(bitmap);
        DeleteDC(hdc2);
        DeleteDC(hdc);
        return FALSE;
    }
    WriteFile(hfile,&bitmapfileheader,sizeof(BITMAPFILEHEADER), &dwBytes, NULL);
    WriteFile(hfile,&bitmapinfoheader,sizeof(BITMAPINFOHEADER), &dwBytes, NULL);
    if(dwNumColors!=0)
        WriteFile(hfile,colors,sizeof(RGBQUAD)*dwNumColors,&dwBytes,NULL);
    WriteFile(hfile,pBits,(dwWidth*dwHeight*dwBPP)/8,&dwBytes,NULL);
    CloseHandle(hfile);     
    DeleteObject(bitmap);
    DeleteDC(hdc2);
    DeleteDC(hdc);
    return TRUE;
}    

这就是我得到的..我不知道我做错了什么

Error   1   error C1189: #error :  "No Target Architecture" C:\Program Files\Windows Kits\8.0\Include\um\winnt.h    146 1   capture it 2
若昂

您需要在windef.h之前包含windows.h

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++控制台屏幕尺寸

来自分类Dev

屏幕上的c ++控制台输出显示

来自分类Dev

在控制台应用程序中捕获ctrl + c事件(多线程)

来自分类Dev

输出屏幕在C#控制台应用程序中突然消失?

来自分类Dev

c#控制台应用程序按空格键而不在屏幕上显示

来自分类Dev

如何每隔几秒钟获取屏幕截图C#控制台

来自分类Dev

控制台应用程序屏幕在Visual c ++ 6.0中消失

来自分类Dev

输出屏幕在C#控制台应用程序中突然消失?

来自分类Dev

特定计算机上C#控制台应用程序的奇怪问题

来自分类Dev

C#控制台文本与string.Padding()的对齐问题

来自分类Dev

C# 简单的控制台应用程序显示/逻辑问题

来自分类Dev

C ++编写控制台无延迟

来自分类Dev

C ++程序中的暂停控制台

来自分类Dev

Rails控制台“共享” CTRL + C

来自分类Dev

C#控制台如何工作?

来自分类Dev

C中的stty RAW控制台

来自分类Dev

C#.net程序的控制台

来自分类Dev

更新控制台而不会闪烁-C ++

来自分类Dev

C#:控制台输出无限(∞)

来自分类Dev

验证C ++中的控制台输入

来自分类Dev

C#控制台不断进行

来自分类Dev

c ++控制台鼠标事件

来自分类Dev

C ++-从控制台获取字节

来自分类Dev

C ++ Gotoxy脱离控制台

来自分类Dev

C#控制台输入

来自分类Dev

C#:从控制台分离

来自分类Dev

如何在内核C中的控制台/视频(受保护)模式下伪造我的OS适合屏幕?

来自分类Dev

使用C#控制台应用程序互操作C ++(DLL)时出现问题

来自分类Dev

通过C ++控制台输入TCL脚本控制窗口