Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Вниз

Хук (или ещё что), не использубю 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.05.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
1-64644
pegas7
2002-05-08 13:23
2002.05.20
Текст фиксированной ширины с переносами


1-64646
anod
2002-05-08 11:06
2002.05.20
Множества


3-64489
Filippov Stas
2002-04-21 00:27
2002.05.20
Функции в SQL.


1-64691
Reticent
2002-05-06 13:33
2002.05.20
2 Формы


14-64789
Martyn
2002-04-08 15:34
2002.05.20
Delphi + Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский