[질문] 도스창이 뜨지않고 백그라운드로 실행할려면?

psycoder의 이미지

안녕하세요.
이제 win32 api를 공부하기 시작한 초보입니다.
제가 c++은 전혀 몰라서 c로 프로그램을 하나 만들려 하는데요..
도스창이 뜨지 않으면서 실행시 백그라운드로 실행시킬려고 합니다.
근데 책을 아무리 봐도 관련 api는 지원하지 않는건지 못찾겠네요..

예제 소스나 힌트라도 부탁드립니다.

bugiii의 이미지

콘솔 모드로 만들지 마시고 WinMain 으로 시작하는 네이트브 윈도우 어플리케이션으로 작성하시면 됩니다. 어차피 키보드나 마우스 입력 필요없으면 메시지 루프도 필요없겠죠... 창을 만들지 않고 그냥 원하시는 작업 하시면 됩니다.

아 물론... 적절하게 쉬거나 동기화해서 CPU 잡아먹는 일은 없어야겠죠...

gamja의 이미지

그런 경우에는 service로 작성하시면 될것같습니다.
자세한 것은 msdn이나
jeffrey richter의 Programming Server-Side Applications for Microsoft Windows 2000 을 보시면 되겠습니다.

윈도우에서의 service는 unix 동네의 데몬과 비슷한 것이라 이해하시면 되겠군요.

bear의 이미지

autoexec.bat 에 넣으면 안될려나요?

psycoder의 이미지

bugiii wrote:
콘솔 모드로 만들지 마시고 WinMain 으로 시작하는 네이트브 윈도우 어플리케이션으로 작성하시면 됩니다. 어차피 키보드나 마우스 입력 필요없으면 메시지 루프도 필요없겠죠... 창을 만들지 않고 그냥 원하시는 작업 하시면 됩니다.

아 물론... 적절하게 쉬거나 동기화해서 CPU 잡아먹는 일은 없어야겠죠...


답변 감사합니다. :D
가르쳐주신 방법데로 다음과 같이 하나 만들어봤습니다.
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hprevInstance, LPSTR lpCmdLine, int nShowCmd)
{
	MSG Message;
	HINSTANCE g_hInst;
	
	while(GetMessage(&Message,0,0,0)) {
		TranslateMessage(&Message);
		DispatchMessage(&Message);
	}
	return Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	SYSTEMTIME st;

	switch(iMessage) {
	case WM_CREATE:
		hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
		return 0;
	case WM_TIMER:
		GetLocalTime(&st);
    
		if(st.wHour>9 && st.wHour<19 && st.wMinute/30==0) {
		.........................
        }
	return 0;

	case WM_DESTROY:
		KillTimer(hWnd,1);
		return 0;
	}
}

지금 win32api를 공부한지 얼마안되서 제대로 만들었는지 모르겠네요. :oops:
일단 이렇게 하니 도스창도 안뜨고 프로세스가 계속 실행되긴 한데 문제는 .......이게 실행 안되네요.
아마두 WndProc() 에서 메시지를 전혀 받지 못하는거 같은데요..
실력이 없어서 뭐가 문제인지 도무지 모르겠습니다.
도움 부탁드립니다.

혹은 제가 하고자 하는게 도스창이 뜨지 않고 백그라운드로 특정시간 특정 주기로 뭔가를 실행하고자 하는건데요..
위의 제 허접한 방법말구 다른 더 나은 방법 아시면 가르침 부탁드립니다.

bugiii의 이미지

윈도우가 필요없으므로 메시지루프도 필요없습니다.

그냥 메인에서 while 로 루핑하시고 Sleep 함수로 일정시간 기다렸다가 다시 깨어나서 하시고자 하는 일 하고 또 자고 하는 식으로 하시면 됩니다.

다만, 다른 이벤트에도 반응해야 한다면 쓰레드 메시지를 받는 대기 함수를 이용하시면 됩니다.

dudungsil의 이미지

WndProc이 호출되는건 WndProc이 등록되어 있기 때문이죠. Window 만들때 WNDCLASS의 lpfnWndProc에 WndProc을 등록 시키자나요. 이정보를 통해서 windows가 호출하는겁니다. 그런데 그런 과정이 전혀 없이 그냥 WinProc만 만드셨으니까 호출이 전혀 안되는겁니다.

WM_CREATE는 window를 생성할때 쓰이는거니 일단 잘못된거죠.

bug3호님 말씀대로 그냥 루프 돌리세요. 코드 보니까 1초에 한번씩 timer쓰시는건데 그냥 루프 돌리시고 Sleep (1000) 주셔서 1초씩 멈추게 해도 같은 결과를 얻을수 있겠네요.

산넘어 산

bugiii의 이미지

추가로 한말씀만 더 드리자면...

정 윈도우 메시지를 사용하겠다고 하면 안보이는 윈도우 만드시는 것도 한 방법입니다... 사이즈를 0x0 으로 하든가 아니면 안보이는 속성을 주든가 하시면 됩니다...

shint의 이미지

뜬구름 잡는 이야기를 하려 합니다.
윈도우에서는 이에 대해 다양한 방법을 지원해 주고 있습니다.

- 윈도우 등록을 하지 않은 실행
- 윈도우 최소화 또는 숨김 실행
- 윈도우 콘솔 숨김 실행
- 윈도우 서비스 등록을 통한 실행
- 트레이 아이콘 모드를 사용한 실행
- 윈도우 투명화를 사용한 실행
- 위치를 99999,99999 등으로 이동하는 방법도 있을것입니다. 다만. 왼쪽이나 상단으로는 제한이 있을것입니다.

- 윗분 말씀 처럼. 크기를 0으로 만드는 방법도 있겠지만. 다이얼로그나 윈도우 속성에 따라 최소크기에 제한이 있습니다.
- 배치 파일 및 도스 명령어로도 일부 가능합니다. start 옵션...

이건 좀 성가실지도 모르는 방법입니다만...
- 어셈블리. 플래시. 익스플로어 등에 외부 언어나 스크립트. 프로그램을 사용한 실행
- DLL. OCX 등에 실행
- Native 바이너리 스트림을 받아서 실행
- GDI.dll 을 사용하지 않는다면. 될것 같습니다.

자세한 내용은 이곳을 찾는것이 나을것 같습니다.
데브피아 www.devpia.com
코드구루 www.codeguru.com
코드프로젝트 www.codeproject.com

2004년도 글이니. 지금쯤 하실겁니다. ㅡ_ㅡ;;

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

익명 사용자의 이미지

익명 사용자의 이미지

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.