2012-10-30 170 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);