1

我有制作屏幕截图的代码,但这是我的程序产生的:

带有控制程序的屏幕截图阻止了某些屏幕 http://imageshack.us/a/img27/7387/71240043.png

我的程序控制台弹出并挡住了路。这是一个瞬间弹出窗口,因为程序会在您双击它的瞬间拍摄屏幕截图。

我搜索了一些有关如何隐藏它的信息,并找到了一个具有以下建议的论坛

在目标选项(项目属性 -> 选项卡“构建目标”)中将应用程序类型从“控制台”更改为“GUI 应用程序”。

但是将其设置为 GUI 应用程序并没有摆脱瞬间控制台。

我尝试寻找隐藏控制台的代码,并找到了一个示例

HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );

但是,编写代码来隐藏控制台仍然会弹出控制台并在它出现的瞬间阻止屏幕截图。

我能做些什么来阻止控制台在那一瞬间出现?如果控制台只是被最小化,我不介意,只要它不会阻挡镜头。

4

3 回答 3

3

我认为仅仅切换类型是不够的,因为您还需要将入口点表单更改mainWinMain。看看这个如何制作无窗口应用程序的例子(http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/82f506c4-ac1f-48c1-a5dc-51bfe99cf850),我建议制作一个新的Win32 项目,然后复制您拥有的代码。

于 2012-10-30T16:24:55.643 回答
1

哈克,但是...隐藏窗口后,您可以延迟足够长的时间以使其在屏幕上生效。在这里,我使用 C++11(#include <thread>对于 this_thread 和#include <chrono>毫秒),所以你需要使用 VS2012 来使用这个确切的代码来延迟。

HWND console = GetConsoleWindow();
if (!console)
    ; // handle error
BOOL was_visible = ShowWindow(console, SW_HIDE);

// delay for a fraction of a second...
std::this_thread::sleep_for(std::chrono::milliseconds(100));

// ... take screen shot

if (was_visible)
    ShowWindow(console, SW_SHOW);
于 2012-10-30T18:11:06.263 回答
1

根据鲁道夫的建议,我做了研究,可以具体回答这个问题:

更改int main()int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)。(更正)这仅在设置为图形时才有效。

为了解决无法访问int main's argc/argv选项的问题,请使用__argcand __argv,它是stdlib.h.

另请参阅http://support.microsoft.com/kb/126571

于 2012-10-30T17:17:44.720 回答