Форум: "Прочее";
Текущий архив: 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