Создать приложение без окна

Как бы вы запрограммировали приложение C 9X_c++ / C++, которое могло бы работать, не открывая 9X_window-api окно или консоль?

28
1

  • Связанная ветка: http://stackoverflow.com/questions/13051412/how-to-hide-the-console-window-in-a-win32-project-using-vis ...
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Создать приложение без окна

Когда вы пишете программу WinMain, вы автоматически 9X_c++ получаете параметр / SUBSYSTEM как окна 9X_cpp в компиляторе. (Предполагая, что вы используете 9X_c++ Visual Studio). Для любого другого компилятора 9X_windows-api может присутствовать аналогичная опция, но 9X_winapi имя флага может быть другим.

Это заставляет 9X_win32 компилятор создать запись в формате исполняемого 9X_cpp файла (PE format), которая помечает исполняемый файл 9X_window-api как исполняемый файл Windows.

Когда эта информация 9X_window-api присутствует в исполняемом файле, системный 9X_win32api загрузчик, запускающий программу, будет 9X_win32 рассматривать ваш двоичный файл как исполняемый 9X_c++ файл Windows, а не консольную программу, и, следовательно, он 9X_window-api не вызывает автоматическое открытие окон 9X_windows-api консоли при запуске.

Но программе Windows 9X_windows-sdk не нужно создавать какие-либо окна, если 9X_winapi она не хочет этого, как и все те программы 9X_win32 и службы, которые вы видите работающими 9X_windows-api на панели задач, но не видите для них соответствующих 9X_cxx окон. Это также может произойти, если вы 9X_winapi создаете окно, но не показываете его.

Все, что 9X_windows-sdk вам нужно сделать, чтобы добиться всего 9X_c++ этого, - это

#include int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int cmdShow) { /* do your stuff here. If you return from this function the program ends */ } 

Причина, по которой вам требуется 9X_win32 сам WinMain, заключается в том, что после 9X_c того, как вы пометите подсистему как Windows, компоновщик 9X_c предполагает, что ваша функция точки входа 9X_c (которая вызывается после загрузки программы 9X_c и инициализации библиотеки C Run TIme) будет 9X_win32 WinMain, а не основной . Если вы не предоставите 9X_c++ WinMain в такой программе, вы получите неразрешенную 9X_window-api ошибку символа в процессе связывания.

42
1

  • Разве это не должно быть int WINAPI WinMain ( ...

Ответ #2

Ответ на вопрос: Создать приложение без окна

В windows:

#include int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { // <-- Program logic here return 0; } 

Обязательно используйте переключатель компоновщика 9X_cxx / SUBSYSTEM, как упомянул Адам Митц.

На других платформах:

int main(int argc, char**argv) { // <-- Program logic here return 0; } 

16
2

  • @Brian - main() по умолчанию возвращает ...

Ответ #3

Ответ на вопрос: Создать приложение без окна

Если вам нужно непрерывно запускать вашу 9X_windows-sdk программу без консоли или окна, вы можете 9X_winapi найти полезные deamon on *NIX или services on Windows, этот пример .NET, если 9X_winapi вам нужен простой win32, просто немного 9X_c++ погуглите для примера.
Поскольку ваш вопрос 9X_win32 отмечен как win32, я предполагаю, что услуги 9X_winapi более актуальны для вас.

4
0

Ответ #4

Ответ на вопрос: Создать приложение без окна

Также обрабатываются сообщения:

#include #include int CALLBACK WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; DWORD curThreadId; curThreadId = GetCurrentThreadId(); // Send messages to self: PostThreadMessage(curThreadId, WM_USER, 1, 2); PostThreadMessage(curThreadId, WM_USER+1, 3, 4); PostThreadMessage(curThreadId, WM_USER+2, 5, 6); PostThreadMessage(curThreadId, WM_USER+3, 7, 8); PostThreadMessage(curThreadId, WM_QUIT, 9, 10); while (GetMessage(&msg, NULL, 0, 0)) { printf("message: %d; wParam: %d; lParam: %d\n", msg.message, msg.wParam, msg.lParam); } return (int) msg.wParam; } 

9X_winapi

2
0

Ответ #5

Ответ на вопрос: Создать приложение без окна

В Visual Studio Express 2010 после установки 9X_cxx подсистемы в Windows (как было предложено 9X_cxx пользователем 17224), в качестве альтернативы 9X_win32api изменению основного значения на WinMain 9X_windows-sdk (как было предложено пользователем 17224 9X_win32 и Брайаном Р. Бонди), можно установить функцию 9X_win32api входа в значение main в свойствах , компоновщик, расширенный, точка 9X_winapi входа: просто введите main в текстовое поле.

1
0