Сейчас на форуме: ut2004, vsv1 (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Как найти нужный хендл в Delphi программе?
Посл.ответ Сообщение

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

Создано: 04 сентября 2006 01:18
· Личное сообщение · #1

Есть программа delphi.
У нее туулбар, на нем панель, у нее естькомбобокс.
Задача - из встроенного вами кода найти ее хедл.

Функция...
PUSH nlDDlgItem ;идентификатор объекта, чей ID нам нужен
PUSH hDlg ;засылаем хендл (ID) диалога (окна), на котором расположен объект
CALL [USER32!GetDlgItem]

В EAX возвращается хендл. Но!
Как найти аналогичные хендлы окна, на котором он расположен?

Если как я заметил Wnd ID тоже меняется...
То как найти ID нужного нам объекта? (комбобокса)




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 сентября 2006 03:04
· Личное сообщение · #2

Я когда то тоже пытался найти объект на панели. Результат - можно найти всё что угодно вплоть до панелей, но всё что на них ХЗ как, у меня ничего не вышло. Надо колупать в DeDe, искать что то типа TCombobox.Create или TObject.Create(TCombobox) и там брать хэндл. или ставить хук на АПИ создания комбобокса и смотреть где она вызывается для нужного нам...

-----
Yann Tiersen best and do not fuck




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 04 сентября 2006 03:41
· Личное сообщение · #3

Всё что находится на панелях ищется и находится при помощи EnumWindows.
Есть ещё вариант FindWindowEx, он хоть и проще, но несколько ограничен.
Если нужно то позже могу кинуть код, только он на АСМе.

-----
Я медленно снимаю с неё UPX... *FF_User*





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 сентября 2006 20:56
· Личное сообщение · #4

AlexZ у меня так не нашлось, все эти вспособы я знаю.

-----
Yann Tiersen best and do not fuck




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

Создано: 04 сентября 2006 23:09
· Личное сообщение · #5

Нашлось вроде так:
Но длинновато правда...

004520E8 . 68 40214500 PUSH find.00452140 ; ЪTitle = "Предварительный просмотр"
004520ED . 6A 00 PUSH 0 ; іClass = 0
004520EF . E8 9442FBFF CALL <JMP.&user32.FindWindowA> ; АFindWindowA
004520F4 . 6A 00 PUSH 0 ; ЪTitle = NULL
004520F6 . 68 5C214500 PUSH find.0045215C ; іClass = "TPanel"
004520FB . 6A 00 PUSH 0 ; іhAfterWnd = NULL
004520FD . 50 PUSH EAX ; іhParent
004520FE . E8 8D42FBFF CALL <JMP.&user32.FindWindowExA> ; АFindWindowExA
00452103 . 6A 00 PUSH 0 ; ЪTitle = NULL
00452105 . 68 64214500 PUSH find.00452164 ; іClass = "TToolbar"
0045210A . 6A 00 PUSH 0 ; іhAfterWnd = NULL
0045210C . 50 PUSH EAX ; іhParent
0045210D . E8 7E42FBFF CALL <JMP.&user32.FindWindowExA> ; АFindWindowExA
00452112 . 6A 00 PUSH 0 ; ЪTitle = NULL
00452114 . 68 5C214500 PUSH find.0045215C ; іClass = "TPanel"
00452119 . 6A 00 PUSH 0 ; іhAfterWnd = NULL
0045211B . 50 PUSH EAX ; іhParent
0045211C . E8 6F42FBFF CALL <JMP.&user32.FindWindowExA> ; АFindWindowExA
00452121 . 6A 00 PUSH 0 ; ЪTitle = NULL
00452123 . 68 70214500 PUSH find.00452170 ; іClass = "TComboBox"
00452128 . 6A 00 PUSH 0 ; іhAfterWnd = NULL
0045212A . 50 PUSH EAX ; іhParent
0045212B . E8 6042FBFF CALL <JMP.&user32.FindWindowExA> ; АFindWindowExA

В EAX если не 0 значит хендл нужной комбы...

Только не найду куда этот код всунуть в программу нужную...
Достаточного размера в ней нет...
Создаю дополнительную секцею в конец файла, добавляю в нее все это...
OK
Однако теперь ляляфа куда же ее запихать. Можно как то состояние регистров запомнить, а потом когда моя процедура отработает, вернуть обратно? Или как в таких случаях что делается?
Вообще попробовал сунуть в форм он активейт. но оно потом ругнулось на непревилигерованные привелегии.



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

Создано: 05 сентября 2006 02:48
· Личное сообщение · #6

Спасибо, сделал.



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

Создано: 05 сентября 2006 05:06
· Личное сообщение · #7

AlexZ А можешь код кинуть pls, мне там для другой задачи может подойти...



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

Создано: 05 сентября 2006 05:23 · Поправил: acid spirit
· Личное сообщение · #8

Просто у меня ситуация сейчас несколько похожая...

Есть TForm
на ней TPageControl
на ней TTabSheet
на ней TCheckBox

Я могу получить хендл вплоть до TTabSheet по FindWindowExA
Но checkbox эта функция почему то не находит, ни по капшену ни без него.



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 05 сентября 2006 08:02
· Личное сообщение · #9

EnumChildWindows + MSDN
http://exelab.ru/f/action=vthread&forum=5&topic=5730#29

P. S. см. аттач

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com




Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 05 сентября 2006 14:18
· Личное сообщение · #10

acid spirit, вот такой код есть. Выкладывал на форуме раньше, кому-то помогал текст из MEMO забрать, которая (МЕМО) на панели лежала.

4ce3_05.09.2006_CRACKLAB.rU.tgz - _temp.asm

-----
Я медленно снимаю с неё UPX... *FF_User*



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


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