none
win10 屏幕缩放后如何保存屏幕快照 RRS feed

答案

  • >>效果一样,msdn翻了下貌似要做dpi处理,可这样意味着为一块功能需要修改整个系统代码这个代价实在有点得不偿失;请问有没有别的方式得到screenshot而不受dpi管控

    DPI对应用程序的意识应通过应用程序清单进行设置,以便在采取任何依赖于系统DPI的任何操作之前确定。 或者,您可以使用SetProcessDpiAwareness设置DPI感知。

    详细内容可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 贾延辉 2017年4月21日 8:23
    2017年4月6日 8:54

全部回复

  • 这是调用HDC hdcScreen = ::CreateDC(_T("DISPLAY"), NULL, NULL, NULL);贴出的效果

    请问如何能做到和printscreen一致的效果?

    2017年3月15日 10:19
  • 是想要实现屏幕截图吗?

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2017年3月15日 13:24
    版主
  • 是的,未设缩放情况下是ok的,但高分屏设置缩放后获取桌面就出现问题了。
    2017年3月16日 1:19
  • 呼叫版主,这个问题如何解决?
    2017年3月16日 5:31
  • Hi 贾延辉,

    感谢在MSDN论坛发帖。

    >>未设缩放情况下是ok的,但高分屏设置缩放后获取桌面就出现问题了。

    如果你是想获取整个屏幕的截图,我建议你使用以下方法。

    HDC hdc = GetDC(NULL);
    HDC hDest = CreateCompatibleDC(hdc); 
    int height = GetSystemMetrics(SM_CYVIRTUALSCREEN);
    int width = GetSystemMetrics(SM_CXVIRTUALSCREEN);
    HBITMAP hbDesktop = CreateCompatibleBitmap( hdc, width, height);
    SelectObject(hDest, hbDesktop);
    BitBlt(hDest, 0,0, width, height, hdc, 0, 0, SRCCOPY);
    ReleaseDC(NULL, hdc);
    DeleteDC(hDest);

    这里有几篇例子,你可以参考一下。

    http://www.codeguru.com/cpp/article.php/c18347/C-Programming-Easy-Screen-Capture-Using-MFCATL.htm

    https://www.codeproject.com/kb/cpp/screen_capture__win32_.aspx

    希望可以帮助到你。

    Best Regards,

    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年3月20日 8:31
  • 效果一样,msdn翻了下貌似要做dpi处理,可这样意味着为一块功能需要修改整个系统代码这个代价实在有点得不偿失;请问有没有别的方式得到screenshot而不受dpi管控

    	Gdiplus::Bitmap *bitmap = NULL;
    	int dW = 0,dH = 0;
    	HDC hdcScreen = ::CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
    	GetShowSize(hdcScreen,dW,dH);
    	bitmap = new Gdiplus::Bitmap(dW,dH);
    	Gdiplus::Graphics gSave(bitmap);
    	HDC hSave = gSave.GetHDC();
    	::BitBlt(hSave,0,0,dW,dH,hdcScreen,0,0,SRCCOPY|CAPTUREBLT);
    	gSave.ReleaseHDC(hSave);
    	::DeleteDC(hdcScreen);

    2017年3月20日 9:09
  • >>效果一样,msdn翻了下貌似要做dpi处理,可这样意味着为一块功能需要修改整个系统代码这个代价实在有点得不偿失;请问有没有别的方式得到screenshot而不受dpi管控

    DPI对应用程序的意识应通过应用程序清单进行设置,以便在采取任何依赖于系统DPI的任何操作之前确定。 或者,您可以使用SetProcessDpiAwareness设置DPI感知。

    详细内容可以参考以下文档。

    https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx

    希望对你有所帮助。

    Best Regards,
    Sera Yu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 贾延辉 2017年4月21日 8:23
    2017年4月6日 8:54