Как мне не допустить, чтобы моя консольная программа создания скриншотов блокировала скриншот?

я имею код, чтобы сделать скриншот, но вот что производит моя программа:

снимок экрана с управляющей программой, блокирующей часть экрана http://imageshack.us/a/img27/7387/71240043.png

Консоль моей программы выскакивает и мешает. Это всплывающее окно с долей секунды, поскольку программа снимает экран с доли секунды, когда вы дважды щелкаете по ней.

Я сделал некоторые поиски информации о том, как скрыть это, и нашел форум со следующей рекомендацией:

измените тип приложения с «консоли» на «приложение с графическим интерфейсом» в параметрах цели (свойства проекта -> вкладка «цели создания»).

Но установка его в приложение с графическим интерфейсом не избавила от доли секунды.

Я попытался найти код, чтобы скрыть консоль, и нашел пример:

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

Однако при написании кода, скрывающего консоль, консоль по-прежнему всплывает и блокирует снимок экрана в доли секунды, в которой она появляется.

Что я могу сделать, чтобы консоль не появлялась в эту долю секунды? Я не беспокоюсь, если консоль просто свернута, пока она не блокирует выстрел.

1

Решение

Я не думаю, что достаточно просто переключить тип, так как вам нужно изменить форму точки входа main в WinMain тоже. Посмотрите на этот пример того, как сделать приложение без окон ( http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/82f506c4-ac1f-48c1-a5dc-51bfe99cf850 ), Я бы предложил создать новый проект Win32, а затем скопировать имеющийся у вас код.

3

Другие решения

Хак, но … после того, как вы спрятали окно, вы можете задержать его на достаточно долгое время, чтобы оно появилось на экране. Здесь я использую C ++ 11 (#include <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);
1

Используя предложение Рудольфа, я провел исследование и могу ответить на вопрос конкретно:

+ Изменить int main() в int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd), (Исправление) Это будет работать, только если настройки графические.

И решить проблему отсутствия доступа к int main«s argc/argv варианты, использовать __argc а также __argv, которая является внешней переменной, найденной в stdlib.h,

Смотрите также http://support.microsoft.com/kb/126571

1
По вопросам рекламы [email protected]