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

Вниз

Определить консольную программу не запуская ее   Найти похожие ветки 

 
robt5   (2013-06-16 14:35) [0]

как? по импортам ?
нужно отделить чисто консольные, от ГУИно-консольных :)


 
wl ©   (2013-06-16 14:39) [1]

скорее всего в заголовке можно найти что нибудь. попробуй скомпилировать какой нить Hwllo World с опцией /CONSOLE (надеюсь не напутал с опцией для компилятора от MS)  и без нее, и сравнить


 
robt5   (2013-06-16 14:46) [2]

не врятли заголовок поможет, наверно надо искать в импорте какойнить CreateWindow... или без чего не может быть ГУИ...


 
Юрий Зотов ©   (2013-06-16 15:04) [3]

User32.dll в секции импорта ?


 
Дмитрий СС   (2013-06-16 15:11) [4]

Гарантии 100% не будет.


 
wl ©   (2013-06-16 15:16) [5]

почему не будет? потому что из консоли можно вызвать MessageBox?
сама винда однозначно различает консольные и оконные приложения, так что способ все равно есть


 
MBo ©   (2013-06-16 15:19) [6]

>не врятли заголовок поможет
А что ж не глянул даже?
поле subsystem в PE-заголовке


 
Дмитрий СС   (2013-06-16 15:38) [7]


> винда однозначно различает консольные и оконные приложения

Как же интересно?

Вот это какой приложение?


program Project1;
uses
 Windows;

function AttachConsole(ProcessID: DWord): BOOL; stdcall; external kernel32 name "AttachConsole";
const
 ATTACH_PARENT_PROCESS = DWord(-1);

begin
 if not AttachConsole(ATTACH_PARENT_PROCESS) then
   AllocConsole;
 Writeln(ParamStr(0));
 readln;
end.


А вот это?


program Project1;

uses
 Windows,
 Vcl.Forms,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

function AttachConsole(ProcessID: DWord): BOOL; stdcall; external kernel32 name "AttachConsole";
const
 ATTACH_PARENT_PROCESS = DWord(-1);

begin
 if not AttachConsole(ATTACH_PARENT_PROCESS) then
   AllocConsole;
 Writeln(ParamStr(0));

 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.


 
Дмитрий СС   (2013-06-16 15:41) [8]

Если ты про то, что некоторые приложения после запуска "освобождают" консоль, а иные ее удерживают до конца своей работы - то это определяется только "на ходу". По началу цикла обработки сообщений windows главного (а может и не только) потока.


 
Dimka Maslov ©   (2013-06-16 17:13) [9]

Dependency Walker делает это, значит можно.


 
Юрий Зотов ©   (2013-06-16 17:20) [10]

> Дмитрий СС   (16.06.13 15:38) [7]
> Вот это какой приложение?

В терминологии ТС, первое - чисто консольное, второе - ГУИно-консольное.


 
antonn ©   (2013-06-16 17:34) [11]


> А вот это?

гуевое это приложение, гуевое...
=)


 
Дмитрий СС   (2013-06-16 20:07) [12]

А если поставлю зависимость от параметров? Какое это тогда приложение?


 
robt5   (2013-06-16 20:17) [13]


> поле subsystem в PE-заголовке

в принципе да, пишет что типа консольное для чисто консольных :)


 
robt5   (2013-06-16 21:26) [14]

хотя это всего лишь флаг для винды для автоматического создания консоли
такчто тоже не 100%


 
DVM ©   (2013-06-16 21:59) [15]

Да никак не отличить. GUI приложение может импортировать функции создания консоли и никогда ее не показать, а может и показать. Аналогично консольное приложение может содержать скрытые окна, например для сокетов на сообщениях и т.д. Вариантов миллион.


 
palva ©   (2013-06-20 21:30) [16]

GUI приложение может выглядеть как консольное, но оно не является консольным. У консольного должны быть in out err, которые при запуске доступны операционной системе. Она использует их при отработке символов командной строки < > << >> |
Например, настоящее консольное приложение может выступать как CGI программа, похожее на консольное - не может.


 
Rouse_ ©   (2013-06-20 22:06) [17]

Консольное приложение определяется флагом в заголовке PE файла.
Если данного флага нет - приложение не консольное, точка.


 
[ВладОшин] ©   (2013-06-21 10:19) [18]


> Если данного флага нет - приложение не консольное, точка.

Необходимость есть.
А достаточности, наверное, и быть не может.


 
Дмитрий СС   (2013-06-21 12:25) [19]

Типичное программистское мышление:)


 
han_malign   (2013-06-21 14:44) [20]


> Вот это какой приложение?
...
>   if not AttachConsole(ATTACH_PARENT_PROCESS) then
>     AllocConsole;

- это порнографическое приложение, т.к. будучи прицеплено к родительскому консольному окну - оно умеет туда только срать(т.к. ничто не мешает запустить в контексте одной консоли десяток таких приложений)...

Единственный более менее приемлимый вариант реализации двойного интерфейса - это честная консоль с самоперезапуском CreateProcess(..., DETACHED_PROCESS, ...) и ветвлением по (GetConsoleWindow() = 0)...


 
Leonid Troyanovsky ©   (2013-06-22 16:12) [21]


> han_malign   (21.06.13 14:44) [20]

> Единственный более менее приемлимый вариант реализации двойного

Это два приложения - одно консольное, второе гуевое.

2TS: See SHGetFileInfo with SHGFI_EXETYPE

--
Regards, LVT.



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

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

Наверх





Память: 0.49 MB
Время: 0.003 c
15-1372019403
Юрий
2013-06-24 00:30
2013.12.15
С днем рождения ! 24 июня 2013 понедельник


15-1371760203
Юрий
2013-06-21 00:30
2013.12.15
С днем рождения ! 21 июня 2013 пятница


2-1362008436
Вова
2013-02-28 03:40
2013.12.15
SDI Application в VCL Application


15-1370955205
картман
2013-06-11 16:53
2013.12.15
моноблок


15-1372105803
Юрий
2013-06-25 00:30
2013.12.15
С днем рождения ! 25 июня 2013 вторник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский