Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Консольное приложение без окна консоли / 11 сообщений из 11, страница 1 из 1
02.02.2006, 12:34
    #33518573
Aoen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
можно ли организовать консольное приложение так что бы при его запуске из виндовой проги не появлялось черное окно самой консоли???
...
Рейтинг: 0 / 0
02.02.2006, 12:51
    #33518653
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
Это не консольное надо приложение, а приложение с WinMain, но без окон
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.02.2006, 17:04
    #33519736
Aoen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
В том то и фишка что приложение писано великимпрограммеромNoName и еще под досом, а переписывать не хочеться. Без ShowWindow и нулевого размера окошко - мы умеем!
...
Рейтинг: 0 / 0
02.02.2006, 17:08
    #33519759
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
Дак может просто в свернутом окне запускать ? :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
02.02.2006, 17:23
    #33519816
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
так это не консольное приложение Win32 получается, а просто прога MS-DOS ?
...
Рейтинг: 0 / 0
02.02.2006, 18:43
    #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
02.02.2006, 18:43
    #33520111
IcyCool
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
Писал я как-то подобное-найду если, выложу
...
Рейтинг: 0 / 0
02.02.2006, 22:02
    #33520420
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
Так в чем проблема ? Заменяешь main на WinMain и все. И тип приложения меняешь. Все.
...
Рейтинг: 0 / 0
03.02.2006, 07:52
    #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
03.02.2006, 10:56
    #33521199
Aoen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
Это оно!
...
Рейтинг: 0 / 0
03.02.2006, 10:58
    #33521203
Aoen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Консольное приложение без окна консоли
2 White Owl - не совсем подходит т.к. исходник проги отсутствует... :-(
Всем огромное спасибо!
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Консольное приложение без окна консоли / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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