2012-10-30 131 views
1

我有code to make a screenshot,但这里是我的程序产生:如何让屏幕截图制作控制台程序阻止屏幕截图?

screenshot with control program blocking some of the screen http://imageshack.us/a/img27/7387/71240043.png

我的程序的控制台弹出,碍事。这是一个瞬间弹出窗口,因为程序会在瞬间将屏幕截图瞬间双击。

我做了一些寻找如何将其隐藏的信息,并发现a forum with the following recommendation

变化从“控制台”的应用型向“GUI应用程序”中的目标选项(项目属性 - >选项卡“建立目标“)。

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

我试图寻找代码隐藏与控制台,发现an example

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

然而,编写代码来隐藏控制台仍然控制台弹出,并阻止分裂截图第二个出现。

我能做些什么来阻止控制台在瞬间出现?如果控制台只是最小化,只要不阻止镜头,我不会感到困扰。

回答

3

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

+0

从哪里可以从API实例中获取当前工作目录? – user1433767

+0

这与@User手头的问题没有任何关系。你可以使用谷歌,甚至[Stack Overflow自己的搜索](http://stackoverflow.com/search?q=%5Bc%2B%2B%5D+current+working+directory+API)。它会告诉你以前的问题在这里:[如何找到当前目录?](http://stackoverflow.com/q/4807629/33732) –

1

使用鲁道夫的建议下,我做了研究,并能回答具体问题:

变化int main()int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)。 (更正)只有设置是图形时才能使用。

,并处理不通往int mainargc/argv选项的问题,请使用__argc__argv,这是stdlib.h发现了一个外部变量。

http://support.microsoft.com/kb/126571

1

哈克见,但是......躲在可以延迟足够长的时间,要利用屏幕上的效果的窗口之后。在这里我使用C++ 11(#include <thread> for 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);