Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› VCL to winapi
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 15 марта 2008 13:10
· Личное сообщение · #1

Возникла задача- сделать интерфейс к программе на winapi. Кое-что сделал, дальше застрял.
Пробовал также использовать программу APIx - Visual WinAPI. Но там мало компонентов(и это проект, кажется, заброшен). Вот думаю, реально ли сделать сначала на делфи - разместить все компоненты и т.п., а затем как-то перехватить вызовы api и переделать все на чистый winapi. Если это как-то возможно, буду рад советам и рекомендациям.




Ранг: 58.1 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 15 марта 2008 14:12
· Личное сообщение · #2

Зачем перехватывать? есть сырци в самой дельфе... но проще просто почитать МСДН...



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 15 марта 2008 14:14
· Личное сообщение · #3

Что именно не получаецо сделать на апи?

-----
xchg dword [eax], eax





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 15 марта 2008 14:24
· Личное сообщение · #4

v0id2k
менюшки как например в...автокаде..ну типа Ttoolbat и т.п..



Ранг: 36.8 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 марта 2008 14:32
· Личное сообщение · #5

Привет...

Я дико извиняюсь, а KOL Вас не устроит?




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 15 марта 2008 15:04
· Личное сообщение · #6

NeoTall
KOL? ну и чем он лучше api? можно там интерфест создать?



Ранг: 158.7 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 15 марта 2008 15:26
· Личное сообщение · #7

Mavlyudov
www.kolnmck.ru/start.shtml

-----
Я ещё не волшебник, я только учусь...




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 15 марта 2008 15:48
· Личное сообщение · #8

не, фтопку кол. Глючный он.
Автокадовские менюшки йа не видел.
Можешь сделать меню через ресурсы, ибо через апи тоже можно, но наеб##сo с ними))

-----
xchg dword [eax], eax




Ранг: 38.0 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 15 марта 2008 16:32
· Личное сообщение · #9

v0id2k имхо предложил самый путный вариант с ресурсами)



Ранг: 36.8 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 марта 2008 17:39 · Поправил: NeoTall
· Личное сообщение · #10

Mavlyudov пишет:
KOL? ну и чем он лучше api?

Сравнивать объектную модель для Delphi и WinAPI по-моему глупо, все равно все основано на API, и VCL, и KOL. Я лишь предложил, простой вариант создания компактных приложений на Дельфи... Нет, если Вас прикалывает программить на чистом API, пожалуйста... Но вы упомянули APIx, а значит, тоже не хотите особо заморачиваться...

Mavlyudov пишет:
можно там интерфест создать?

Если Вы имеете ввиду интерфейс, то почему же нет... Все очень доступно и просто. Устанавливаете MCK (Mirror Classes Kit), и получаете нормальную среду для визуальной разработки в Дельфи. Можете просто "чистый" KOL использовать...

v0id2k пишет:
не, фтопку кол. Глючный он.

Не подскажите, а какой последней версией Вы пользовались? И в чем глюки проявлялись?

v0id2k пишет:
Автокадовские менюшки йа не видел.
Можешь сделать меню через ресурсы, ибо через апи тоже можно, но наеб##сo с ними))

Я конечно давно автокадом не пользовался и не знаю, что такое "Автокадовские менюшки". Но, это что, такой новый контрол винды, что Вы его в ресурс закидываете? Как я понимаю, все равно же придется ручную отрисовку делать...или нет?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 15 марта 2008 17:51
· Личное сообщение · #11

v0id2k пишет:
не, фтопку кол. Глючный он.

он не глючный, т.к. постоянно вылизывается...
Просто к нему привыкать надо...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 15 марта 2008 18:09
· Личное сообщение · #12

любое меню хоть немного красивее стандартного делается через owner drawn.

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 15 марта 2008 21:09
· Личное сообщение · #13

v0id2k пишет:
Можешь сделать меню через ресурсы,

Не подскажешь как. Или дай что-нибудь почитать про иеню через ресурсы



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 15 марта 2008 23:41
· Личное сообщение · #14

Держи, написал чето.

956e_15.03.2008_CRACKLAB.rU.tgz - menu_api.zip

-----
xchg dword [eax], eax




Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 16 марта 2008 01:21
· Личное сообщение · #15

Mavlyudov пишет:
Или дай что-нибудь почитать про иеню через ресурсы


Win32 API. Эффективная разработка приложений

www.knigka.info/2007/07/19/win32_api_jeffektivnaja_razrabotka_prilozhenijj__primery.html

Так кроме книги есть и примеры, хотя там не на Дельфи а на С++, нo это сути win32 кодинга не меняет.




Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 17 марта 2008 00:30
· Личное сообщение · #16

v0id2k
Спасибо. посмотрел. Открывал файл ресурсов. А там вроде только меню без тулбаров.

Может быть можно как-то перехватывать api-функции из проги на vcl, а потом сваять приложение на чистом апи?



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 17 марта 2008 00:40
· Личное сообщение · #17

а kerberos в этом не поможет?



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 17 марта 2008 14:42
· Личное сообщение · #18

Mavlyudov пишет:
Может быть можно как-то перехватывать api-функции из проги на vcl, а потом сваять приложение на чистом апи?


Дыг в чем проблема, отладчиком думою пользовацо умеешь)))

-----
xchg dword [eax], eax





Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 17 марта 2008 20:23
· Личное сообщение · #19

Mavlyudov пишет:
Может быть можно как-то перехватывать api-функции из проги на vcl, а потом сваять приложение на чистом апи?

...это типа удаление гланд через задницу?
Зачем такой изврат?Войд тебе просто привёл маленький пример скрипта ресурсов.Тебе надо взять какую-нибудь документацию,например,справку по rc.exe(компилятору ресурсов) из пакета masm32 и смотреть,как создавать подобный скрипт самому,чтобы там были всевозможные элементы управления.

-----
the Power of Reversing team




Ранг: 24.1 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 17 марта 2008 21:31
· Личное сообщение · #20

Изврат сплошной. Сначала делать интерфейс на дельфе, а потом разрисовывать все компоненты до апи - заколупаешься, классы разгребать и обработчики событий переписывать, и всякие констрэйнты и прочие навороты реализовать самому придется, а т.к. не будешь это инлайном везде в код впихивать - то будешь свою библиотечку писать, в итоге придешь к слабому подобию KOL.

Если уже делать - то сразу на апи (ну или использовать дельфу+VCL для быстрого построения макета-прототипа интерфейса).



Ранг: 36.8 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 17 марта 2008 22:13
· Личное сообщение · #21

2 Mavlyudov
Приведите если не сложно, что за "Автокадовские менюшки" такие? Если можно скрин...очень уж интересно из-за чего столько разговоров...



Ранг: 10.2 (новичок)
Активность: 0=0
Статус: Участник

Создано: 18 марта 2008 13:30
· Личное сообщение · #22

Я вобще не понимаю в чем проблема. А кто мешает вынести апишный код в DLL и сделать приложение на дельфе использующее её? Или наоборот, DLL в которой реализовать GUI на дельфе (ну просто DLL с формами), а её использовать из приложения? Или вобще всё сделать на дельфе? Модуль windows.pas никто не отменял.



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 марта 2008 21:02
· Личное сообщение · #23

Возможно попробовать стоит: www.lenininc.com/

У меня есть LENIN INC WIN32API Library v1.0 (build 11.05.04)
2,30 в rar (best)

Если нужно, то можно обсудить по ICQ куда залить




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 26 марта 2008 09:49
· Личное сообщение · #24

ребята, а вам не кажется, что это всё жестокое п0рн0....
ИМХО ведь если прога навороченная, то проще интерфейс на VCL (даже можно сказать что она этого достойна), а на API следует писать если прога невеличка.......

вообщем имхо на API стоит писать патчики,лоадеры и прочие вещички



Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 26 марта 2008 10:03
· Личное сообщение · #25

Mavlyudov
Поиши книгу Ганеева, по WinAPI, он какраз рассказывает про GUI. Если не найдешь, могу залить куда-нить...



Ранг: 5.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 28 марта 2008 13:04
· Личное сообщение · #26

Советую KOL + MCK kolnmck.ru
Нету SysUtils, всё на asm и API переведено
и для взлома ДелпхиДекомпилер обломится
И темболее если в API разбератся то легче KOL подправить.
ну если KOL ненравится то почемубы не WinAsm, внём ресурсы очень просто добавить.



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 29 марта 2008 18:22 · Поправил: Stack
· Личное сообщение · #27

Mavlyudov пишет:
Пробовал также использовать программу APIx - Visual WinAPI. Но там мало компонентов

Ну так напиши такую же прогу только с поддержкой плугинов. Хочешь компонент - раз плугин сочинил и все. И еще если гонка за размером то сразу на masm или fasm пиши а то совершенно пустой проект в delphi 2005 весит 17 кб.

Вот думаю, реально ли сделать сначала на делфи - разместить все компоненты и т.п., а затем как-то перехватить вызовы api
Проще уже будет самому компоненты разрисовывать.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 158.7 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 29 марта 2008 19:11 · Поправил: Assass1n
· Личное сообщение · #28

Stack пишет:
Ну так напиши такую же прогу только с поддержкой плугинов

Если бы он мог написать, то тогда бы не задавал этого вопроса.
Boss пишет:
ну если KOL ненравится то почемубы не WinAsm

Не надо путать разные языки программирования. Задача была перевести Delphi проект на винапи, а не написать тоже самое на масме.
Boss пишет:
и для взлома ДелпхиДекомпилер обломится

Дельфийские декомпили обламываются на всех проектах где не присувствует модуль Forms.

Минимальный размер программы написанной на Delphi, которую я видел, составлял всего 1,3 кб.

-----
Я ещё не волшебник, я только учусь...




Ранг: 5.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 30 марта 2008 05:20
· Личное сообщение · #29

Цитата из книги
В результате обоих проделанных усовершенствований - замены системных модулей, и перевода большей части кода на ассемблер, размер минимального KOL-проекта с одной визуальной формой остановился на цифре 13,5 Килобайт,
--> KOLBook <-- http://kolmck.net/docs/KOLBook.rar



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 30 марта 2008 11:53
· Личное сообщение · #30

Assass1n пишет:
Минимальный размер программы написанной на Delphi, которую я видел, составлял всего 1,3 кб

размер уменшается за счет изменения sysinit и system

Минимальное приложение в Delphi

Автор: XProger
Для всех давно уже не секрет что использование VCL значительно увеличивает размер исполняемого файла созданного в Delphi. Но далеко не многие знают как избавиться от этих благ с целью уменьшения размера исполняемого файла. И даже не все те кто знают как это сделать, смогут написать программу размером в 524 байта! Собственно, такая программка и является целью данной статьи

Итак, приступим!
Инструменты: Delphi (проверялось на 7 версии), Restorator, migeel's Realigner, fakecom.com и UPX.

Что и для чего нужно по порядку:
Delphi – будет средой для написания нашего “монстра”! (собственно ничего кроме DCC32.EXE нам от неё не нужно
Restorator – компилятор Delphi имеет хорошую привычку – писать в секцию “RCData” ресурса EXE файла debug информацию обо всех используемых модулях в программе. А вот при помощи этой утилиты мы сможем избавиться от этой секции!
migeel's Realigner – утилитка, позволяющая уменьшить размер EXE файла, путем удаления таблицы релокаций, которая (в случае программ на Delphi) является абсолютно неиспользуемым балластом и может быть совершенно безболезненно удалена. Но иногда аналогичная программа StripReloc даёт лучшие результаты.
fakecom.com – а вот этот “маньяк” размером в 60 байт, переконвертирует наш EXE в com файл! Зачем? Да за тем что у com файлов не имеется Win32/PE секции заголовка, как и самого заголовка вообще
UPX – программа сжимающая исполняемые файлы. В нашем случае это будет полученный при помощи fakecom.com COM файл.

Но даже если использовать все эти утилиты размер EXE не уменьшится ниже чем 3 кб. В чём же может быть проблема? Ответ на данный вопрос очевиден – в самой Delphi

Теперь нужно найти эту проблему. Многие сваливают всё на компилятор, и это связанно с не знанием самой структуры Delphi. Для того чтобы скомпилировать dpr файл, компилятору необходимы всего 2 модуля: System, SysInit. Именно в них лежат основные процедуры для работы со строками, файлами, динамическими массивами, памятью и т.п. Т.е. всё что облегчает жизнь обычному Delphi программисту, но ведь Вы не обычный программист?! Вы в некоторй степени - “извращенец”, раз вам интересна данная статья! В противном случае попрошу завершить чтение, дабы не травмировать Вашу психику ;)

Итак, имеем системные библиотеки со всякими вкусностями, от которых мы готовы отказаться ради программы в несколько сотен байт. Ну что ж, топор нам в руки:

"System.pas"
unit System;
interface

procedure _InitExe;
procedure _HandleFinally;
procedure _halt0;
procedure ExitProcess(Code: LongWord); stdcall; external 'kernel32.dll';


type
TGUID = record
D1 : LongWord;
D2 : Word;
D3 : Word;
D4 : array [0..7] of Byte;
end;

implementation

procedure _InitExe;
asm
end;

procedure _HandleFinally;
asm
end;

procedure _halt0;
begin
ExitProcess(0);
end;

end.
"SysInit.pas"
unit SysInit;
interface

implementation

end.
Вот оно! Свершилось, мы сознательно отказались от всех благ Delphi!
Но теперь нужно заставить Delphi компилятор брать именно наши системные заголовки. Для этого их необходимо скомпилировать в dcu библиотеки.
Создаём папку, в неё кидаем наши pas заголовки и DCC32.EXE который можно взять тут “C:\Program Files\Borland\Delphi7\Bin”.
В папку также кидаем все утилиты которые нам понадобятся (UPX, Realigner, fakecom.com) и создаём Project1.dpr с вот таким кодом:
program Project1;
begin
end.
Теперь в этой папке необходимо создать файл make.bat следующего содержания:
dcc32 -q system sysinit -m -y -z -$D-
dcc32 project1.dpr
Данный BAT файл поможет скомпилировать программу. Ну чего же мы ждём? Запускай!
В результате появится наш долгожданный EXE’шник!
Смотрим на его размер… 3 584 байт!!! Это уже хорошо, но в начале статьи я обещал программу в 524 байта!

При помощи программы Restorator 2004 удалим не нужный нам ресурс со страшными именем “RCData”.
Смотрим на размер EXE… 3 072 байт!
Следующие наши действия советую автоматизировать путём создания файлика make_min.bat:
realign Project1.exe
copy /B fakecom.com+Project1.exe Project1.com
upx --best Project1.com
Первая строка “покоцает” таблицу ровнения EXE файла, вторая преобразует его в COM, а третья сожмёт.
Итак! 3…2…1…ЖМИ!!!
Не пройдёт и секунды как в папке появится Project1.com размер которого ровно 524 байта!!! (В различных версиях Delphi результат может меняться)
Программа конечно же ничего не делает, но даже это рассеивает сомнения многих программистов по поводу громоздкости программ написанных на Delphi ;)

Под конец хотел бы рассказать, что Вас ждёт при написании подобных программ:
НЕТ менеджера памяти, процедур для работы со строками и динамическими массивами, вследствии чего работа с оными будет производиться с использованием процедур и функций Win API, но это же Вас не остановит? ;)

Удачи!

P.S.
Есть более "суровый" метод, который позволит добиться размера в 478 БАЙТ (!!!) но для этого, необходимо использовать Delphi 3 компилятор и Microsoft линковщик. Пример такой "минимальной" программы, находится здесь

Пример ещё одной программы (884 байта) к статье с утилитами: Delphi_min.zip
Многим смогут помочь, модули (system.pas, windows.pas и opengl.pas) немного переписанные ещё одним "извращенцем" - ShTiRLiC (http://progsoft.tk)

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74



. 1 . 2 . >>
 eXeL@B —› Программирование —› VCL to winapi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати