Главная страница
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.059 c
1-1081963930
TCrash
2004-04-14 21:32
2004.05.02
Котмпонент по типу TEdit


14-1081253852
Andryk
2004-04-06 16:17
2004.05.02
Есть вопросец ! Есть ли какая-нибудь приблуда (программа),


7-1078652833
kamerad
2004-03-07 12:47
2004.05.02
Подскажите о мониторе!


14-1081772853
Инкогнито
2004-04-12 16:27
2004.05.02
А вы верите в чудеса? :)


7-1078889162
Graf
2004-03-10 06:26
2004.05.02
Программная перезагрузка/выключение