![]() |
eXeL@B —› Вопросы новичков —› Как найти нужный хендл в Delphi программе? |
Посл.ответ | Сообщение |
|
Создано: 04 сентября 2006 01:18 · Личное сообщение · #1 Есть программа delphi. У нее туулбар, на нем панель, у нее естькомбобокс. Задача - из встроенного вами кода найти ее хедл. Функция... PUSH nlDDlgItem ;идентификатор объекта, чей ID нам нужен PUSH hDlg ;засылаем хендл (ID) диалога (окна), на котором расположен объект CALL [USER32!GetDlgItem] В EAX возвращается хендл. Но! Как найти аналогичные хендлы окна, на котором он расположен? Если как я заметил Wnd ID тоже меняется... То как найти ID нужного нам объекта? (комбобокса) ![]() |
|
Создано: 04 сентября 2006 03:04 · Личное сообщение · #2 Я когда то тоже пытался найти объект на панели. Результат - можно найти всё что угодно вплоть до панелей, но всё что на них ХЗ как, у меня ничего не вышло. Надо колупать в DeDe, искать что то типа TCombobox.Create или TObject.Create(TCombobox) и там брать хэндл. или ставить хук на АПИ создания комбобокса и смотреть где она вызывается для нужного нам... ----- Yann Tiersen best and do not fuck ![]() |
|
Создано: 04 сентября 2006 03:41 · Личное сообщение · #3 |
|
Создано: 04 сентября 2006 20:56 · Личное сообщение · #4 |
|
Создано: 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 Однако теперь ляляфа куда же ее запихать. Можно как то состояние регистров запомнить, а потом когда моя процедура отработает, вернуть обратно? Или как в таких случаях что делается? Вообще попробовал сунуть в форм он активейт. но оно потом ругнулось на непревилигерованные привелегии. ![]() ![]() |
|
Создано: 05 сентября 2006 02:48 · Личное сообщение · #6 |
|
Создано: 05 сентября 2006 05:06 · Личное сообщение · #7 |
|
Создано: 05 сентября 2006 05:23 · Поправил: acid spirit · Личное сообщение · #8 |
|
Создано: 05 сентября 2006 08:02 · Личное сообщение · #9 EnumChildWindows + MSDN http://exelab.ru/f/action=vthread&forum=5&topic=5730#29 P. S. см. аттач ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 05 сентября 2006 14:18 · Личное сообщение · #10 acid spirit, вот такой код есть. Выкладывал на форуме раньше, кому-то помогал текст из MEMO забрать, которая (МЕМО) на панели лежала. ![]() ----- Я медленно снимаю с неё UPX... *FF_User* ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Как найти нужный хендл в Delphi программе? |