Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Определить тип приложения [D7, Win95/98, WinME, NT4, Win2k, WinXP]


Страницы:   1 2 3 4

-=GaLaN=- ©   (2005-05-27 01:03:00) 

У меня есть путь к файлу exe. Как можно определить тип приложения - консольное ли оно, DOS, Win32?


Defunct   (2005-05-27 02:59:00) [41]

-=GaLaN=-   (27.05.05 02:56) [35]

Не может быть!!
Вы видимо смотрите только по одному dos exe-шнику.

Открыл у себя первый попавшийся DOS exe-шник, третий байт равен С0h

Да и разве не видно из приведенного в [33] заголовка, 3-й и 4-й байты показывают сколько байт занимает последняя страница exe файла.


-=GaLaN=-   (2005-05-27 02:57:00) [42]

2Просто Джо:
Константы-то есть, кстати, нужная мне называется IMAGE_SUBSYSTEM_WINDOWS_CUI, однако больше в этом файле они нигде не используются...


Просто Джо   (2005-05-27 02:56:00) [43]


> Вопрос остался лишь в том, как из Win32 приложений отличить
> консольные...

См [34], константы Subsystem Values.


-=GaLaN=-   (2005-05-27 02:56:00) [44]

2Defunc:
Да, это я уже нашёл. И был прав, кстати, говоря, что если третий байт НЕ 50, то это DOS. :) Вопрос остался лишь в том, как из Win32 приложений отличить консольные...


Просто Джо   (2005-05-27 02:55:00) [45]

[32] -=GaLaN=-   (27.05.05 02:48)
Ну, тогда запускай все через WinExec.
Нужные определения ПЕ-заголовка есть в Windows.pas, в том чиле и константы, определяющие режим приложения (subsystem values): например IMAGE_SUBSYSTEM_WINDOWS_GUI. Если есть не все, что нужно, погугли, в сетке не раз встречал расширенное описание формата.


Defunct   (2005-05-27 02:51:00) [46]

> -=GaLaN=-

Если определять по вашему:
цифра 50 наверное DOS вы так долго будете определять. Вот если открыть спрвочник там четко написано.
MS-DOS заголовок exe-шника:

0000  word  Signature               "4D5A"
0002  word  Bytes on last page
0004  word  Pages in File
0006  word  Relocations
0008  word  Paragraphs in header
000A  word  Minimum memory
000C  word  Maximum memory
000E  dword SS:SP
0012  word  Checksum
0014  dword CS:IP (entrypoint)
0016  word  Relocation table address
0018  word  Overlay number
...

за MS-DOS заголовком располагается Win32 заголовок. Как отличить DOS от Win32 написал в [3]


-=GaLaN=-   (2005-05-27 02:48:00) [47]

2Просто Джо:
Ага, дали, вот цитата оттуда:
"Я не буду подробно описывать форматы заголовков – большая часть из них описана в Windows.pas". Ни ничего там практически нет для моей задачи. :(
А другое запустить через cmd.exe /k нельзя - консольное окно будет болтаться на экране, это не дело.


Просто Джо   (2005-05-27 02:44:00) [48]

Тебе ж дали ссылку на описание PE-заголовка, чего ты мучаешься?


Просто Джо   (2005-05-27 02:43:00) [49]


> Я хочу определить, что это консольное приложение, чтобы
> запустить его не просто, а, например, через cmd.exe /k или
> иной обработчик.

А разве другое нельзя запустить "через" cmd.exe /K ?


Defunct   (2005-05-27 02:41:00) [50]

-=GaLaN=-   (27.05.05 02:38) [25]

> Если дальше НЕ идёт 50, то это, наверное, DOS.

Так дело не пойдет :)
Берите открывайте справочик, смотрите что обозначает каждое поле заголовка EXE файла, потом аналогичную процедуру для PE-заголовка и ваша задача решена.


-=GaLaN=-   (2005-05-27 02:41:00) [51]

Кстати, сама винда, когда жмякаешь Enter на файле, ведь определяет, надо ли звать command.com и cmd.exe или пускать приложение так...


Просто Джо   (2005-05-27 02:40:00) [52]


>  [26] Просто Джо ©   (27.05.05 02:39)

А поутру она проснулась :)) Опоздал.


Просто Джо   (2005-05-27 02:39:00) [53]

[24] Defunct ©   (27.05.05 02:36)

В-общем, пока автор пусть поспит, а мы все возможные сигнатуры тут ему напишем :)) А он проснется - и окажется, что ему стандартный вывод нужно было перехватить :)


-=GaLaN=-   (2005-05-27 02:38:00) [54]

Народ! Немного не в ту сторону беседа ушла. :) Честно говоря, если DOS приложение будет переключаться в графический режим - это не важно. Главное - определить, что это DOS-приложение. Т.е. по сути, мне надо решить задачу от противного - определить, что это приложение, но НЕ графическое Win32\16.

У меня есть уже несколько домыслов. Определить, что это приложение легко. Файл должен начинаться с 4D 5A. Если дальше НЕ идёт 50, то это, наверное, DOS. Если идёт, то это уже Win32 приложение, но опять же - не понятно, консольное или графическое. :(
Возможно, я не прав и что-то упустил...

2Просто Джо:
Не секрет. У меня программа должна запускать приложение. Я хочу определить, что это консольное приложение, чтобы запустить его не просто, а, например, через cmd.exe /k или иной обработчик.


Defunct   (2005-05-27 02:36:00) [55]

Просто Джо ©   (27.05.05 02:33) [21]

А я в этом уверен (VESA драйвер "висит" на int 10h), просто довелось проработать с VESA.


Просто Джо   (2005-05-27 02:34:00) [56]

Я автору не зря вопрос задал: зачем это надо. Тут от задачи нужно отталкиваться, имхо.


Defunct   (2005-05-27 02:34:00) [57]

Просто Джо ©   (27.05.05 02:31) [20]

:))
нельзя же думать только о плохом.
реализовать вначале 2 последовательности, при ошибке распознавания внести маску из приложения в определении которого программа ошиблась.


Просто Джо   (2005-05-27 02:33:00) [58]


>  [19] Defunct ©   (27.05.05 02:31)
> Просто Джо ©   (27.05.05 02:30) [18]
>
> Режимы VESA включаются такой же самой последовательностью
> кода.

Я вот не уверен. Насколько помню, веза-драйвер висит на своем прерывании и допускает вызовы напрямую этого прерывания. Не помню, если честно. Да и кодв может быть столько вариантов, что все и не предусмотришь.


Просто Джо   (2005-05-27 02:31:00) [59]

Или руки у программиста воот такой кривизны и у него там
xor ah,ah
push val
pop al
int 10h


Defunct   (2005-05-27 02:31:00) [60]

Просто Джо ©   (27.05.05 02:30) [18]

Режимы VESA включаются такой же самой последовательностью кода.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо