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?


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


>  [17] Defunct ©   (27.05.05 02:29)
> Ну и пусть себе переключается в текстовый. Код для переключения
> в графический режим все равно в нем будет.


Какой? Может он напрямую с драйвером VESA общается с особыми изысками?


Defunct   (2005-05-27 02:29:00) [62]

Просто Джо ©   (27.05.05 02:24) [14]

Ну и пусть себе переключается в текстовый. Код для переключения в графический режим все равно в нем будет.


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


>  [15] KilkennyCat ©   (27.05.05 02:27)

Да, ИИ в задаче мощный, это вам не плюшки со стола таскать (ц)
:)


KilkennyCat   (2005-05-27 02:27:00) [64]


> Не туда копаете, товарищи :)


Угу. надо OCR экрана делать.


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

Хм. А если это ДОС-приложение работает в графическом режиме, иногда переключаясь в текстовый, - то как его, простите, называть? Пример: Автокад версии 10.
Не туда копаете, товарищи :)


Defunct   (2005-05-27 02:22:00) [66]

-=GaLaN=-   (27.05.05 02:15) [10]

> Но, согласись, отсутствие данных последовательностей вовсе не означает, что это консольное приложение?
Конечно.

Наличие данных последовательностей может быть информативным только в DOS приложениях которые переключают видеорежим, не более того. В Win32 приложении такой код будет просто неработоспособен.

Т.е. вначале нужно точно знать, что приложение - DOS. Затем, если интересует в каком режиме работает именно это DOS приложение, ищем эти последовательности. (плюс может быть ложное срабатывание, например, в программе размещены данные, которые совпадают с указанными последовательностями команд).


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


> [10] -=GaLaN=-   (27.05.05 02:15)

А зачем это нужно, если не секрет?


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

Угу, или такую:
xor ah,ah


-=GaLaN=-   (2005-05-27 02:15:00) [69]

2Defunct:
Но, согласись, отсутствие данных последовательностей вовсе не означает, что это консольное приложение? Оно вполне может оказаться обычным графическим Win32 или WinNT приложением...


Defunct   (2005-05-27 02:11:00) [70]

> Нужно определить, что во-первых, это приложение, а вторых, это приложение, работающее в текстовом режиме.

Можно определить наличие переключения в графический режим (в DOS приложении). Для этого придется "прошерстить" весь exe/com файл и искать последовательность команд

такую:
mov  ax, zzyy;  // где yy больше 3, а zz = 0
int  10h

вот как будет это выглядеть в hex:
xx xx xx xx B8 YY 00 CD 10 xx xx
на месте xx, любые числа.

или такую:
mov  ah, 0  
mov  al, yy     // где yy больше 3
...
int  10h

вот как будет это выглядеть в hex:
xx xx xx xx B4 00 B0 YY xx .... xx CD 10 xx xx

ps: чаще используется первая последовательность.


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


> [7] GuAV ©   (27.05.05 01:48)
> Изначально дос-приложение запускается в текстовом
> режиме

Ну уж нет, не обязательно. Оно запускается в том режиме, какой установлен на момент запуска.


GuAV   (2005-05-27 01:48:00) [72]

-=GaLaN=-   (27.05.05 1:35) [6]
Не важно, DOS или Win32 Console.

DOS приложение, работающее в текстовом режиме не отличается никакими заголовками от DOS приложения, работающего в графическом режиме. Изначально дос-приложение запускается в текстовом режиме, но оно может перейти в графический.


-=GaLaN=-   (2005-05-27 01:35:00) [73]

Спасибо за ответы, попробую немного точнее дать задачу. Есть путь к файлу exe. Нужно определить, что во-первых, это приложение, а вторых, это приложение, работающее в текстовом режиме. Не важно, DOS или Win32 Console.
Я попробую почитать статью по вышеприведённой ссылке и разобрать в ней, но неужели нет каких-нибудь WinAPI функций? Ведь command.com и cmd.exe как-то определяют это...


KilkennyCat   (2005-05-27 01:25:00) [74]

И не стоит также забывать, что расширения еxe, com, bat - являются лишь информативными о запускаемости. Все остальное - согласно заголовкам, поэтому [3] Defunct ©   (27.05.05 01:13) - верно.


Просто Джо   (2005-05-27 01:19:00) [75]

[3] Defunct ©   (27.05.05 01:13)
> Можно - необходимые и достаточные условия:
> 1. Отсутствие MS-DOS заголовка EXE файла. (COM-формат)
> 2. Отсутствие Win32 заголовка.

Да, я неудачно выразился. Не заметил, что уточняется "EXE", увидел только ключевое слово "приложение".

> > В-третьих, приложения Win32 - это и консольные приложения,
> в том числе.
Это мое замечание к тому, что автор противопоставляет консольные и Win32-приложения. В то время как консольные - это разновидность Win32-приложений.

К автору: не стоит забывать, что в файле "екзе" может также находится 16-битное приложение, приложение для OS/2 и мало ли что еще.


Defunct   (2005-05-27 01:13:00) [76]

Просто Джо ©   (27.05.05 01:09) [2]

> Во-вторых, определить, является ли оно DOS-приложением тоже нельзя.

Можно - необходимые и достаточные условия:
1. Отсутствие MS-DOS заголовка EXE файла. (COM-формат)
2. Отсутствие Win32 заголовка.

> В-третьих, приложения Win32 - это и консольные приложения, в том числе.

Тоже можно определить по заголовку, но не помню как.


Defunct   (2005-05-27 01:09:00) [77]

http://www.rsdn.ru/article/baseserv/peloader.xml

в этой статье можно найти краткое описание заголока PE файлов, а также список литературы, который вам не помешает.


Просто Джо   (2005-05-27 01:09:00) [78]

Во-первых, оно не обязано вообще быть приложением.
Во-вторых, определить, является ли оно DOS-приложением тоже нельзя.
В-третьих, приложения Win32 - это и консольные приложения, в том числе.
Ну, а если уверен, что оно точно является Win32-приложением, тогда можно попытаться прочитать PE-заголовок файла и из него определить тип приложения, там для этого предусмотрено поле. Короче говоря, ищи по ключевым словам "структура PE-заголовка".


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

Наверх

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