Создать приложение без окна
Как бы вы запрограммировали приложение C 9X_c++ / C++, которое могло бы работать, не открывая 9X_window-api окно или консоль?
- Связанная ветка: http://stackoverflow.com/questions/13051412/how-to-hide-the-console-window-in-a-win32-project-using-vis ...
Ответ #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 ошибку символа в процессе связывания.
- Разве это не должно быть 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; }
- @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
Ответ на вопрос: Создать приложение без окна
Также обрабатываются сообщения:
#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
Ответ #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 в текстовое поле.
-
13
-
6
-
7
-
3
-
8
-
14
-
8
-
9
-
6
-
5
-
8
-
3
-
1
-
6
-
6
-
5
-
14
-
3
-
11
-
8
-
6
-
11
-
4
-
10
-
6
-
14
-
3
-
7
-
6
-
2
-
5
-
8
-
5
-
1
-
7
-
5
-
5
-
6
-
4
-
4
-
5
-
7
-
1
-
2
-
7
-
9
-
3
-
2
-
10
-
7