Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Вниз

GUI & Console   Найти похожие ветки 

 
uinor   (2009-09-24 22:09) [0]

Понимаю, что наркоманство, но требуется реализовать оба режима (GUI & Console) в одной программе, при этом основным режимом является GUI, но в случае, если есть параметры командной строки, то выводим все в консоль.

Своя консоль - это легко. Требуется сделать вывод в родительскую.

Реализовал следующим образом (понимаю, что минимум Windows XP):
var
 ConsoleOutput: Boolean;
 AttachConsole: function(dwProcessId: Cardinal): Boolean; stdcall;

procedure WriteConsole(const AOutputStr: string);
begin
 if WriteLog then
   WriteLn(AOutputStr)
 else
   ... skipped ...
end;

begin
 if (ParamCount > 0) then
 begin
   // Пробуем наладить консоль
   ConsoleOutput := False;
   AttachConsole := GetProcAddress(GetModuleHandle("kernel32.dll"), "AttachConsole");
   if (@AttachConsole <> nil) then
     ConsoleOutput := AttachConsole($FFFFFFFF);

   WriteLog("Console Mode!");
 end else
 begin
   Application.Initialize;
   Application.MainFormOnTaskbar := True;
   Application.Title := "Requte";
   Application.CreateForm(TfrmMain, frmMain);
   Application.Run;
 end;
end.


Все нормально. Но есть небольшая проблема - когда мы выполняем cmd myApp.exe >myApp.log получаем i/o exception на WriteLn.

Интуитивно, я понимаю, что надо решать как-то иначе, уж слишком в лоб решение. Подскажите?


 
uinor   (2009-09-24 22:10) [1]

procedure WriteLog(const AOutputStr: string);
begin
if (ConsoleOutput) then
  WriteLn(AOutputStr)
else
  ... skipped ...
end;


Поправочка. Приношу свои извинения, код правил прямо здесь.


 
Leonid Troyanovsky ©   (2009-09-25 08:06) [2]


> uinor   (24.09.09 22:09)  

> Все нормально. Но есть небольшая проблема - когда мы выполняем
> cmd myApp.exe >myApp.log получаем i/o exception на WriteLn

Похоже на косяк by M$.

> Интуитивно, я понимаю, что надо решать как-то иначе

Правильно понимаешь.
Ничего лучше, чем написать два приложения не придумали.
И МС так делает.

В крайнем случае 3: - сервер и 2 клиента.

--
Regards, LVT.


 
uinor   (2009-09-25 08:17) [3]

@Leonid Troyanovsky
Целиком с вами согласен.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2012.01.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.004 c
2-1318329821
Евгений07
2011-10-11 14:43
2012.01.22
Indy передать файл на сервер


2-1318309519
vivaldi
2011-10-11 09:05
2012.01.22
Преобразование цвета оттенки серого в черно-белый


2-1318361574
Anonym111
2011-10-11 23:32
2012.01.22
Работа с приложением из командной строки


4-1253815783
uinor
2009-09-24 22:09
2012.01.22
GUI &amp; Console


2-1318310204
Pushok
2011-10-11 09:16
2012.01.22
Запрос SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский