2012-10-30 2 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

그 질문에는 실제로 아무런 관련이 없습니다. @ 사용자. 당신은 Google이나 [Stack Overflow 's own search] (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 옵션에 대한 액세스 권한을 가지고 있지의 문제를 다루는, stdlib.h에있는 외부 변수 __argc__argv을 사용합니다.

은 충분히 그 화면을 적용하려면 지연 할 수있는 창을 숨긴 후 ... 또한 http://support.microsoft.com/kb/126571

1

해키 볼 수 있지만. 여기에서 C++ 11 (#include <thread> for this_thread 및 #include <chrono> for milliseconds)을 사용하므로이 정확한 코드를 사용하여 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);