Форум: "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