Главная страница
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.024 c
4-1078152750
v][x
2004-03-01 17:52
2004.05.02
Job Object или CreateProcess


4-1078799786
X9
2004-03-09 05:36
2004.05.02
Интеграция в оболочку


7-1078415756
Роман
2004-03-04 18:55
2004.05.02
Com-порт операции с DCB.


14-1081622468
Brahman
2004-04-10 22:41
2004.05.02
В это вечер..


7-1078994779
Vemer
2004-03-11 11:46
2004.05.02
Получиние толщины ScrollBar...