Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хук (или ещё что), не использубю DLL. [D5, Win95/98]


Serd_hhc ©   (2002-03-17 10:44:00) 

Уважаемые Мастера,
Во-первых спасибо MBo, alexproger, VuDZ за помощь в предыдущем моём вопросе.

Во-вторых, я бы хотел узнать, как не используя DLL поставить хук (или ещё что-нибудь) на Появление окна, и если это нужное окно (например "Установка связи с *******"), то ловить нажатые клавиши.

Пожалуйста, дайте код, не использующий всякие там Forms... :)

Заранее спасибо тем, кто ответит на сабж.


VuDZ   (2002-03-19 11:45:00) [1]

а я и предложил без хука - всё работает отлично (почти :> )


Fellomena   (2002-03-19 10:50:00) [2]

KeySpy пишем ? - похвально, похвально ;)
Повторюсь ещё раз - глобальные хуки можно размещать тольков dll.
Можно и в Win32 обойтись без хуков для считывания нажатых клавишь, но это будет не самый элегантный вариант решения такого рода задачи :)


VuDZ   (2002-03-17 12:08:00) [3]

ну да...

// Key Attacher.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include
#include

char GetPressedKey(BYTE* bt){
for (int i = 31; i < 256; ++i)
if ((bt[i] >> 7)== 1)
return i;

return 0;
}

int main(int argc, char* argv[])
{
HWND hNote = FindWindow("Notepad", NULL);
DWORD thID = GetWindowThreadProcessId(hNote, NULL);
BOOL bAttach = AttachThreadInput(GetCurrentThreadId(), thID, TRUE);
DWORD dwErr = GetLastError();

BYTE *state = new BYTE[256];
char keys[2] = {0, 0};
do{
GetKeyboardState(state);
keys[0] = GetPressedKey(state);
if (keys[0] != 0)
printf((const char*)&keys);
Sleep(100);
} while (keys[0] != "z");

return 0;
}


в конслоле будут все нажатые клавиши, в том числе Ctrl, Alt, Del - т.е. записываться скан коды всех клавиш
способ не иделальнй - но, главное - это намёк :>


Serd_hhc   (2002-03-17 11:10:00) [4]

Я видел как на Си++ без хуков обходяться, там что-то вроде проверка клавы на нажатые клавиши (Жаль текста нет). Но как на Делфи такое делать незнаю....

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


VuDZ   (2002-03-17 10:50:00) [5]

ты не сможешь этого сделать. Код обязатель должен быть в DLL, т.к. только Dll может грузиться в адресное пространство другого процеса.

это связано с тем. что в защищёном резиме под win32 у каждого процеса свои адреса. т.е. если у тебя есть указтель
p = 0x1234567;
то в одном приложение он будет указывать на одни данные, а в другом - на другие. Почти то же самое и с dll и хуками.

Так что пиши dll - это очень просто.


Наверх

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