창이 없는 응용프로그램 만들기
창이나 콘솔을 열지 않고 실행할 수 있는 C/C++ 애플리케이션을 어떻게 프로그래밍하시겠습니까?
WinMain 프로그램을 작성할 때 컴파일러의 window가 되는 /SUBsystem 옵션이 자동으로 표시됩니다(Visual Studio를 사용한다고 가정).다른 컴파일러의 경우에도 비슷한 옵션이 있지만 플래그 이름은 다를 수 있습니다.
그러면 컴파일러가 실행 파일을 윈도우즈 실행 파일로 표시하는 실행 파일 형식(PE 형식)의 항목을 만듭니다.
이 정보가 실행 파일에 있으면 프로그램을 시작하는 시스템 로더는 바이너리를 콘솔 프로그램이 아닌 윈도우 실행 파일로 취급하므로 실행 시 콘솔 창이 자동으로 열리지 않습니다.
그러나 작업 표시줄에서 실행 중인 모든 프로그램 및 서비스와 마찬가지로 Windows(윈도우) 프로그램이 필요 없는 경우에는 창을 만들 필요가 없지만 해당 창이 표시되지는 않습니다.창을 만들지만 표시하지 않도록 선택한 경우에도 이 문제가 발생할 수 있습니다.
이 모든 걸 달성하기 위해서는
#include <Windows.h>
int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int cmdShow)
{
/* do your stuff here. If you return from this function the program ends */
}
WinMain 자체가 필요한 이유는 하위 시스템을 Windows(윈도우)로 표시하면 링커는 프로그램이 로드되고 C Run TIME 라이브러리가 초기화된 후 호출되는 진입점 함수가 메인이 아닌 WinMain(윈메인)이라고 가정하기 때문입니다.이러한 프로그램에서 WinMain을 제공하지 않으면 링크 과정에서 해결되지 않은 심볼 오류가 발생합니다.
창에서:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// <-- Program logic here
return 0;
}
Adam Mitz가 언급한 대로 /SUBsystem linker 스위치를 사용해야 합니다.
기타 플랫폼의 경우:
int main(int argc, char**argv)
{
// <-- Program logic here
return 0;
}
콘솔이나 창이 없이 프로그램을 계속 실행해야 하는 경우 *NIX에서 유용한 디아몬이나 Windows에서 서비스를 찾을 수 있습니다.만약 당신이 평범한 win32가 필요하다면, 샘플을 위해 약간의 구글을 사용하세요.
win32로 태그가 지정된 질문이므로 서비스가 고객님께 더 적합하다고 생각합니다.
메시지도 처리합니다.
#include <windows.h>
#include <stdio.h>
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;
}
하위 시스템을 윈도우로 설정한 후 Visual Studio Express 2010에서(사용자 17224 및 Brian R이 제안한 대로) 메인을 WinMain으로 변경하는 대신(사용자 17224 및 Brian R이 제안한 대로).Bondy), 입력 기능을 main 속성, linker, advanced, entry point로 설정할 수 있습니다: 텍스트 상자에 main을 입력하기만 하면 됩니다.
Visual Studio 마법사를 사용하여 Win32 응용 프로그램을 만듭니다.그러나 창을 만들지 마십시오. 즉 창 만들기 기능을 제거합니다.또는 Win Service 애플리케이션을 만들 수도 있습니다.
MSVC 또는 Visual Studio를 사용하는 경우 새 Project Wizard(프로젝트 마법사)를 사용하고 콘솔 애플리케이션을 선택합니다.
언급URL : https://stackoverflow.com/questions/224225/create-an-application-without-a-window
'source' 카테고리의 다른 글
반환된 파일의 순서에 대해서는 Dir()가 보증을 서주나요? (0) | 2023.09.24 |
---|---|
Excel로 PDF 데이터 및 테이블 스크래핑 (0) | 2023.09.24 |
쿼리가 오라클 10g을 중단합니다. (0) | 2023.09.24 |
클랜 포맷이 내 코드를 깨뜨릴 수 있습니까? (0) | 2023.09.24 |
html을 사용하여 Action에 파라미터를 전달하려면 어떻게 해야 합니까?ASP에서 액션().NET MVC? (0) | 2023.09.24 |