Форум: "Основная";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
ВнизЯвляется ли приложение консольным? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c