Сейчас на форуме: r0lka, yashechka (+4 невидимых)

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

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

Создано: 17 октября 2005 11:49
· Личное сообщение · #1

Нужно найти Хендл дочернего окна TPanel. При этом мы вставляем код в саму прогу, поэтому может есть способ не искать окно родительское - дочернее (как если бы мы работали из вне), а просто получить его. Ведь сама программа как то получает его. Прога написана на Дельфи.




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

Создано: 17 октября 2005 15:34
· Личное сообщение · #2

мне как-то помогла в аналогичной ситуации
HWND ChildWindowFromPoint(
    HWND hWndParent,	// handle to parent window
    POINT Point 	// structure with point coordinates
   );

подробнее - см. MSDN.



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

Создано: 18 октября 2005 04:40
· Личное сообщение · #3

Тогда вопрос такой, как получить хендл родительского окна, лучше б конечно привести код на асме. Т.е.
1. Родительское окно самой программы
2. Дочернее окно с классом 'TPanel'
3. Хендл 'TPanel' в EAX




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

Создано: 18 октября 2005 09:18
· Личное сообщение · #4

Ну например можно так, classname и windowname определяе любым шпионом:
HWND FindWindow(

    LPCTSTR lpClassName,	// pointer to class name
    LPCTSTR lpWindowName 	// pointer to window name
   );

а кода на асме наверное не будет.
Мне у Касперски фраза понравилась, точно не помню, приблизительно так "Готовые решения развращают хакера и он теряет стимул к развитию"



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

Создано: 19 октября 2005 04:12
· Личное сообщение · #5

Нет все конечно хорошо, но все таки:

Подскажите как сама программа получает все эти хендлы окон или каждый раз вызывается FindWindow?

Да и потом, когда окно уже созданно, его хендл должен находиться в области памяти самой программы (ну эт по-моему), да и смещение д.б. наверное одним и тем же. Вот по этому поводу я и думаю что можно найти как то хендл окна находясь в самой программе не через FindWindow.

ChildWindowFromPoint() находит клиентское окно по относительным координатам в указанной точке. И если мы меняем размеры главного окошка, соответсвенно меняется и относительные координаты клиентского окна.

Для нахождения клиентского окна я использовал FindWindowEx.




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

Создано: 19 октября 2005 14:49 · Поправил: intty
· Личное сообщение · #6

теперь понятно.
действительно, то что я предлагал выше, не совсем то.

крякеру очень полезно знать хотя-бы основы WinAPI. Без этого придется туго.
Сама программа получает хендлы любого окна, в том числе и главного, одинаково.
Для создания формы, кнопки, панельки, чего угодно, дельфи компилятор использует функцию
HWND CreateWindowEx(
    DWORD dwExStyle,	// extended window style
    LPCTSTR lpClassName,	// pointer to registered class name
    LPCTSTR lpWindowName,	// pointer to window name
    DWORD dwStyle,	// window style
    int x,	// horizontal position of window
    int y,	// vertical position of window
    int nWidth,	// window width
    int nHeight,	// window height
    HWND hWndParent,	// handle to parent or owner window
    HMENU hMenu,	// handle to menu, or child-window identifier
    HINSTANCE hInstance,	// handle to application instance
    LPVOID lpParam 	// pointer to window-creation data
   );

после ее вызова в eax будет находиться хэндл созданного окна, либо NULL, если окно по каким-то причинам не было создано.
обрати внимание на второй и третий параметр.
если lpClassName будет TForm1(а по другому главное окно обычно редко обзывают), то это как раз создание главного окна и соответственно в eax после колла будет лежать его хэндл.



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

Создано: 19 октября 2005 20:04 · Поправил: DDA
· Личное сообщение · #7

а так не подойдёт ?
ShowMessage(inttostr(Panel1.Handle));




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

Создано: 19 октября 2005 22:41
· Личное сообщение · #8

ну я так понимаю человек оперирует готовый экзешник без сорцов.
Не так ли?



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

Создано: 20 октября 2005 04:02
· Личное сообщение · #9

intty Все верно, есть готовый exe, а как это на Дельфи сделать я знаю.

Вот еще вопросик какие функции могут использоваться кроме SetWindowsLong для изменения размеров окна?




Ранг: 299.6 (наставник)
Активность: 0.30
Статус: Участник
Armadillo Killer

Создано: 20 октября 2005 04:12
· Личное сообщение · #10

scanner
Взможно CreateWindowEx или SetWindowWord


 eXeL@B —› Крэки, обсуждения —› Как найти хендл окна в самой проге?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати