我有code to make a screenshot,但这是我的程序产生的内容:
我的程序控制台弹出并阻碍。这是一个瞬间弹出窗口,因为程序会在瞬间双击屏幕截图。
我做了一些搜索有关如何隐藏它的信息,并找到了a forum with the following recommendation:
在目标选项中将应用程序类型从“控制台”更改为“GUI应用程序”(项目属性 - >选项卡“构建目标”)。
但是将它设置为GUI应用程序并没有摆脱分秒控制台。
我尝试使用隐藏控制台的代码,并找到了an example:
HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );
但是,编写隐藏控制台的代码仍会弹出控制台,并在显示的瞬间阻止屏幕截图。
如何阻止控制台出现在瞬间出现?如果控制台只是最小化,我不会感到困扰,只要它不会阻挡镜头。
答案 0 :(得分:3)
我不认为只是切换类型就足够了,因为您还需要将入口点格式main
更改为WinMain
。看看这个如何构建无窗口应用程序(http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/82f506c4-ac1f-48c1-a5dc-51bfe99cf850)的示例,我建议创建一个新的Win32项目,然后复制你拥有的代码。
答案 1 :(得分:1)
使用鲁道夫的建议,我做了研究,可以专门回答这个问题:
将int main()
更改为int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
。 (更正)这仅在设置为图形时才有效。
要解决无法访问int main
的{{1}} / argc
选项的问题,请使用argv
和__argc
,这是一个__argv
中找到的外部变量。
答案 2 :(得分:1)
Hacky,但是......隐藏窗口之后你可以延迟足够长的时间让它在屏幕上生效。在这里,我使用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);