powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Консольное приложение без окна консоли
11 сообщений из 11, страница 1 из 1
Консольное приложение без окна консоли
    #33518573
Aoen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно ли организовать консольное приложение так что бы при его запуске из виндовой проги не появлялось черное окно самой консоли???
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33518653
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не консольное надо приложение, а приложение с WinMain, но без окон
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33519736
Aoen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и фишка что приложение писано великимпрограммеромNoName и еще под досом, а переписывать не хочеться. Без ShowWindow и нулевого размера окошко - мы умеем!
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33519759
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак может просто в свернутом окне запускать ? :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33519816
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так это не консольное приложение Win32 получается, а просто прога MS-DOS ?
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33520110
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то, давно, когда переносили кучу разных досовых программок под винды. Написал вот такой маленький запускальщик:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
HWND hwnd, hRichEdit, hButton;
HANDLE hThread;
HFONT hFont;
DWORD ThreadId;
char LogFileName[MAX_PATH];
BOOLEAN bSilentMode, bBatchMode;

// procedure doing actual work
DWORD DoWork(void);

DWORD WINAPI ThreadWrapper(void *pArg) {
	DWORD dExitCode;
	dExitCode = DoWork();
	SendMessage(hButton, WM_SETTEXT, (WPARAM)NULL, (LPARAM)"Done");
	if (bBatchMode) SendMessage(hwnd, WM_CLOSE,  0 ,  0 );
	ExitThread(dExitCode);
}

// Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch(msg) {
		case WM_COMMAND:
			if ((HANDLE)lParam==hButton) {
				PostQuitMessage( 0 );
			}
			break;

		case WM_SIZE:
			if ((wParam==SIZE_MAXIMIZED) || (wParam==SIZE_RESTORED)) {
				MoveWindow(hRichEdit,  1 ,  1 , LOWORD(lParam)- 2 , HIWORD(lParam)- 40 , TRUE);
				MoveWindow(hButton, LOWORD(lParam) -  105 , HIWORD(lParam) -  32 ,  100 ,  30 , TRUE);
			}
			break;

        case WM_CLOSE:
			DestroyWindow(hwnd);
			break;

        case WM_DESTROY:
			PostQuitMessage( 0 );
			break;

        default:
			return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return  0 ;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
	HINSTANCE hRE_Lib;
    MSG Msg;
	char sBuf[ 1024 ], *s;
    RECT rect;
	int i;

	bSilentMode=FALSE;
	bBatchMode=FALSE;
	LogFileName[ 0 ]= 0 ;

	for (s=lpCmdLine; *s; s++) {
		while(*s== 32 ) s++;
		if ((*s=='-') || (*s=='/')) {
			s++;
			switch(*s) {
			case 'q': s++;
				if ((*s== 32 ) || (*s== 0 )) {
					bSilentMode=TRUE;
				} else goto ShowHelp;
				break;
			case 'b': s++;
				if ((*s== 32 ) || (*s== 0 )) {
					bBatchMode=TRUE;
				} else goto ShowHelp;
				break;
			case 'o': while(*(++s)== 32 );
				i= 0 ;
				while(*s> 32 ) {
					LogFileName[i] = *s;
					s++; i++;
				}
				LogFileName[i] =  0 ;
				break;
			default:
			ShowHelp:
				MessageBox(NULL, "Usage: Program [flags]\n\n"
								"flags:\n"
								"\t-q\t\tsilent mode, no windows or mesasges\n"
								"\t-b\t\tbatch mode, close window on completion\n"
								"\t-o <file>\t\tlog output messages to file\n"
					, "Usage", MB_ICONEXCLAMATION | MB_OK);
				return  0 ;
			}
		}
	}

	if (bSilentMode) return (DoWork());

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         =  0 ;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    =  0 ;
    wc.cbWndExtra    =  0 ;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PROJECTICON));
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PROJECTICON));

	if(!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
		return  0 ;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_DLGMODALFRAME,
        g_szClassName,
        "Franchisee Report System: Sending",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,  600 ,  400 ,
        NULL, NULL, hInstance, NULL);
	
    if(hwnd == NULL) {
        MessageBox(NULL, "Window Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return  0 ;
    }


	// Crate and set default font
	hFont = CreateFont(- 11 ,  0 ,  0 ,  0 ,  0 ,
		FALSE, FALSE, FALSE, DEFAULT_CHARSET,
		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY,
		DEFAULT_PITCH,
		(LPCTSTR)"Arial");
	if (hFont==NULL) {
        MessageBox(NULL, "Font Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return  0 ;
    }

	if (SearchPath(NULL, "RICHED32.DLL", NULL, sizeof(sBuf), sBuf, &s)> 0 ) {
		hRE_Lib = LoadLibrary("RICHED32");
	} else if(SearchPath(NULL, "RICHED21.DLL", NULL, sizeof(sBuf), sBuf, &s)> 0 ) {
		hRE_Lib = LoadLibrary("RICHED21");
	} else {
		hRE_Lib = NULL;
	}
	if (hRE_Lib == NULL) {
        MessageBox(NULL, "Can not find RichEdit library!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return  0 ;
	}

	hRichEdit = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		"RICHEDIT", "",
		WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL |
			ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_WANTRETURN,
		 1 , 1 , 50 , 100 ,
		hwnd, NULL,
		(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
		NULL);
	
    if(hRichEdit == NULL) {
        MessageBox(NULL, "Rich Edit Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return  0 ;
    }
	SendMessage(hRichEdit, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);

	// create Abort/Done button
	hButton = CreateWindow("BUTTON", "Abort", 
		WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_CENTER | BS_VCENTER,
		 0 ,  0 ,  10 ,  10 , hwnd, NULL, hInstance, NULL);
    if(hButton == NULL) {
        MessageBox(NULL, "Button Creation Failed!", "Error!",
            MB_ICONEXCLAMATION | MB_OK);
        return  0 ;
    }
	SendMessage(hButton, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);



	// move objects (text window and button) acording to window size		
    GetClientRect(hwnd, &rect);
	MoveWindow(hRichEdit, rect.left +  1 , rect.top +  1 , 
				rect.right - rect.left -  2 , rect.bottom - rect.top -  40 , TRUE);
	MoveWindow(hButton, rect.right -  105 , rect.bottom -  32 ,  100 ,  30 , TRUE);


	// Show prepeared window
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);


	// create actual process thread
	hThread = CreateThread(NULL,  0 , ThreadWrapper, NULL,  0 , &ThreadId);


    // Main Message Loop
    while(GetMessage(&Msg, NULL,  0 ,  0 ) >  0 )
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }
    return Msg.wParam;
}

void Log(DWORD LogOptions, char *Format, ...) {
	va_list ap;
	char LogBuf[ 1024 ];
	CHARFORMAT chf;
	FILE *fpLog;

	va_start(ap, Format);
	vsprintf(LogBuf, Format, ap);
	va_end(ap);

	if (LogFileName[ 0 ]) {
		char TimeBuf[ 32 ];
		struct tm *TimeNow;
		time_t SecNow = time( 0 );
		TimeNow = localtime(&SecNow);
		fpLog = fopen(LogFileName, "a");
		if(fpLog == NULL) fpLog=stdout;
		strftime(TimeBuf, sizeof(TimeBuf), "%d %b %H:%M:%S ", TimeNow);
		fprintf(fpLog, TimeBuf);
		fprintf(fpLog, LogBuf);
		if(LogBuf[strlen(LogBuf)- 1 ] != '\n') fprintf(fpLog, "\n");
		fclose(fpLog);
	}

	if (!bSilentMode) {
		if (LogOptions) {
			chf.cbSize = sizeof(CHARFORMAT);
			chf.dwMask = ~ 0 ;
			SendMessage(hRichEdit, EM_GETCHARFORMAT, (WPARAM)SCF_DEFAULT, (LPARAM) &chf);
			chf.dwMask =  0 ;
			if (LogOptions & LOG_BOLD) {
				chf.dwMask |= CFM_BOLD;
				chf.dwEffects |= CFE_BOLD;
			}
			if (LogOptions & LOG_ITALIC) {
				chf.dwMask |= CFM_ITALIC;
				chf.dwEffects |= CFE_ITALIC;
			}
			if (LogOptions & LOG_RED) {
				chf.dwMask |= CFM_COLOR;
				chf.dwEffects &= ~CFE_AUTOCOLOR;
				chf.crTextColor = RGB( 255 ,  0 ,  0 );
			}
			if (LogOptions & LOG_GREEN) {
				chf.dwMask |= CFM_COLOR;
				chf.dwEffects &= ~CFE_AUTOCOLOR;
				chf.crTextColor = RGB( 0 ,  255 ,  0 );
			}
			if (LogOptions & LOG_SIZE) {
				chf.dwMask |= CFM_SIZE;
				chf.yHeight = (LogOptions&LOG_SIZE);
			}
			SendMessage(hRichEdit, EM_SETCHARFORMAT, (WPARAM)SCF_SELECTION, (LPARAM) &chf);

		}
		SendMessage(hRichEdit, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)LogBuf);
	}
}
Берешь свою досовую или Win32 консольную программу, переименовываешь в ней main() в DoWork(), переделываешь обработку параметров и заменяешь все printf() на Log() (это можно при помощи #define сделать). Получаешь нормальное виндовое приложение с окошком для сообщений и логфайлом.
А если нужно запускать без окна - ключик -q есть :)
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33520111
IcyCool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писал я как-то подобное-найду если, выложу
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33520420
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в чем проблема ? Заменяешь main на WinMain и все. И тип приложения меняешь. Все.
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33520745
IcyCool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел. Делал как-то окошко что-б резултат выполнения консольной проги выходил в окно (как при компиляции VC), из него выбрал главное (только запуск без чтения результатов), но и здесь может быть много лишьнено-давно делал сейчас возиться не хочется.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
DWORD Execute(CString commandStr )
{


//	DWORD exitCode;
	HANDLE hOutputReadTmp,hOutputRead,hOutputWrite;
    HANDLE hErrorWrite;

    SECURITY_ATTRIBUTES sa;

	HANDLE hChildProcess = NULL;
   

    // Set up the security attributes struct.
    sa.nLength= sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;


    if (!CreatePipe(&hOutputReadTmp,&hOutputWrite,&sa, 0 ))
        return - 1 ;

      if (!DuplicateHandle(GetCurrentProcess(),hOutputWrite,
                           GetCurrentProcess(),&hErrorWrite, 0 ,
                           TRUE,DUPLICATE_SAME_ACCESS))
         return - 1 ;


      if (!DuplicateHandle(GetCurrentProcess(),hOutputReadTmp,
                           GetCurrentProcess(),
                           &hOutputRead, // Address of new handle.
                            0 ,FALSE, // Make it uninheritable.
                           DUPLICATE_SAME_ACCESS))
         return - 1 ;

      if (!CloseHandle(hOutputReadTmp)) 
		  return - 1 ;

      PROCESS_INFORMATION pi;
      STARTUPINFO si;

      ZeroMemory(&si,sizeof(STARTUPINFO));
      si.cb = sizeof(STARTUPINFO);
      si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
      si.hStdOutput = hOutputWrite;
      si.hStdError  = hErrorWrite;
	  si.wShowWindow = SW_HIDE;


     
      if (!CreateProcess(NULL,commandStr.LockBuffer(),NULL,NULL,TRUE,
                         CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi))
	           return - 1 ;


	  return  0 ;//exitCode;
}
Просто даеш путь к файлу и поехал
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33521199
Aoen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это оно!
...
Рейтинг: 0 / 0
Консольное приложение без окна консоли
    #33521203
Aoen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 White Owl - не совсем подходит т.к. исходник проги отсутствует... :-(
Всем огромное спасибо!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Консольное приложение без окна консоли
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]