я имею код, чтобы сделать скриншот, но вот что производит моя программа:
Консоль моей программы выскакивает и мешает. Это всплывающее окно с долей секунды, поскольку программа снимает экран с доли секунды, когда вы дважды щелкаете по ней.
Я сделал некоторые поиски информации о том, как скрыть это, и нашел форум со следующей рекомендацией:
измените тип приложения с «консоли» на «приложение с графическим интерфейсом» в параметрах цели (свойства проекта -> вкладка «цели создания»).
Но установка его в приложение с графическим интерфейсом не избавила от доли секунды.
Я попытался найти код, чтобы скрыть консоль, и нашел пример:
HWND hWnd = GetConsoleWindow();
ShowWindow( hWnd, SW_HIDE );
Однако при написании кода, скрывающего консоль, консоль по-прежнему всплывает и блокирует снимок экрана в доли секунды, в которой она появляется.
Что я могу сделать, чтобы консоль не появлялась в эту долю секунды? Я не беспокоюсь, если консоль просто свернута, пока она не блокирует выстрел.
Я не думаю, что достаточно просто переключить тип, так как вам нужно изменить форму точки входа main
в WinMain
тоже. Посмотрите на этот пример того, как сделать приложение без окон ( http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/82f506c4-ac1f-48c1-a5dc-51bfe99cf850 ), Я бы предложил создать новый проект Win32, а затем скопировать имеющийся у вас код.
Хак, но … после того, как вы спрятали окно, вы можете задержать его на достаточно долгое время, чтобы оно появилось на экране. Здесь я использую 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);
Используя предложение Рудольфа, я провел исследование и могу ответить на вопрос конкретно:
+ Изменить 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