Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

Хук (или ещё что), не использубю DLL.   Найти похожие ветки 

 
Serd_hhc   (2002-03-17 10:44) [0]

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

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

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

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


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

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

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

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


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

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

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


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

ну да...

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

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

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 - т.е. записываться скан коды всех клавиш
способ не иделальнй - но, главное - это намёк :>


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2002.05.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.016 c
14-64796
Григорий Ситнин
2002-04-07 03:34
2002.05.20
Нужен програмист...


14-64824
Malder
2002-04-10 21:36
2002.05.20
Модераторам...


3-64540
maxim2
2002-04-24 10:00
2002.05.20
Как программно удалить все записи из таблицы


3-64502
vopros
2002-04-22 13:37
2002.05.20
Где найти компонент DBTree?Бесплатный.


1-64695
Explorer
2002-05-06 10:47
2002.05.20
Как PReport передать свою переменную?