Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

Является ли приложение консольным?   Найти похожие ветки 

 
Def_E   (2004-04-14 00:03) [0]

Можно ли, зная путь к программе, узнать, является ли она консольной? Если да, то как?


 
Pat ©   (2004-04-14 00:16) [1]

>Можно ли, зная путь к программе, узнать, является ли она консольной?
Смотри формат PE-файла. Есть там какой-то байтик, говорящий, куда идет вывод.
А вообще-то мне ничто не мешает в программе на VCL вызвать AllocConsole. Помнится как-то делал курсовик с помощью такого изврата :-)) (не по собственной воле)


 
Def_E   (2004-04-14 23:31) [2]

Нашел некий вариант - использование функции SHGetFileInfo. Можно хотя бы выявить ДОС программы. Но честно говоря, этого мало, а в PE заголовок руками лезть как-то не хочется, к тому же, посмотрел обисание формата (не полное) так сразу нужного блока не нашел.

Const WIN32_GUI = $4550;   //PE, Win32
     WIN16_GUI = $454E;   //NE, Win16
     WIN16_DOS = $5A4D;   //MZ, MS-DOS
var
 iRet: Integer;
 rSHFI: TSHFileInfo;
begin
 iRet := SHGetFileInfo("C:\WINDOWS\system32\cmd.exe", 0, rSHFI, SizeOf(rSHFI), SHGFI_EXETYPE);
 ShowMessage(IntToHex(iRet,4));
end;


 
Def_E   (2004-04-15 08:35) [3]

???


 
Jack128 ©   (2004-04-15 10:49) [4]

http://power.org.ru/modules.php?op=modload&name=News&file=article&sid=5&POSTNUKESID=7646320e8e35548a43a2770adab228be
>  так сразу нужного блока не нашел

[2] Заголовок PE файла (PE Header)

5Ch Word SubSystem операционная подсистема необходимая для запуска данного файла (GUI, консоль...)


 
TUser ©   (2004-04-15 10:54) [5]

Я сам не спец по этому формату. Но там вот есть такая фишка в заголовке
5Ch Word SubSystem операционная подсистема необходимая для запуска данного файла (GUI, консоль...)  
SubSystem имеет следующие значения:

0000h - а черт его знает
0001h - Native, пошли вы все к такой-то матери, никто не нужен
0002h - Windows GUI, т.е. окошечная
0003h - Windows Character (консольное приложение)
0005h - OS/2 Character
0007h - Posix Character (формат PE с юниховского передран, вот и. . .)

Тебе надо наверное ловить $3


 
TUser ©   (2004-04-15 10:55) [6]

Ооопс. С одного сайта инфу выкопали ... :)


 
Jack128 ©   (2004-04-15 11:03) [7]

Угу.. Вообще любопытное чтиво -) Оказывается в exe"шник столько барахла пихают -))


 
TUser ©   (2004-04-15 11:43) [8]

Сечас начнется дискуссия по поводу качества борландовского компилятора :)


 
Def_E   (2004-04-15 21:41) [9]

Спасибо за ссылку на описание формата. С его помощью все решил.

Function ConsoleApplication(FileName:String):Boolean;
var
 fs: TFilestream;
 lfanew:longint;
 Subsystem:Word;
begin
fs := TFilestream.Create(FileName, fmOpenread or fmShareDenyNone);

fs.Seek($3C,soFromBeginning); //Offset to PE header
fs.Read(lfanew,sizeof(lfanew)); //File address of new exe header
fs.seek(lfanew+$5C, soFromBeginning); //Offset to optional header subsystem
fs.Read(Subsystem,sizeof(Subsystem));

if Subsystem=IMAGE_SUBSYSTEM_WINDOWS_CUI then Result:=true
 else Result:=False;

fs.Free;
end;



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

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.027 c
9-1069828528
Eagle Owl
2003-11-26 09:35
2004.05.02
Конвертирование 3ds-файлов в x-файлы...


1-1081937411
FireMan_Alexey
2004-04-14 14:10
2004.05.02
Как можно расчитать смещение от начала файла до записи константы


14-1081519373
hgd
2004-04-09 18:02
2004.05.02
Что такое Application.Messagebox


9-1069178795
defeq
2003-11-18 21:06
2004.05.02
Проблемы с поверхностью, которая больше экрана


7-1079007671
Vasek
2004-03-11 15:21
2004.05.02
Регистрация типа файлов в системе и их запуск