|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
||||||
GetMessage - не выводится сообщение при срабатывании условия02.05.2011, 16:17. Показов 5106. Ответов 10
Метки нет (Все метки)
Здравствуйте.
Господа, помогите разобраться... Вроде бы всё прозрачно, но где-то я не допонимаю... Задача - необходимо перехватывать определённые сообщения, и после обработки параметров из этого сообщения, записывать их в файл. Код взят из одной статьи:
Компилируется без проблем, но - при нажатии левой кнопки - ни сообщение в консоль не пишется, ни сообщение не высвечивается.. почему так происходит? это нормальное поведение?
0
|
||||||
| 02.05.2011, 16:17 | |
|
Ответы с готовыми решениями:
10
Как правильно вывести пользователю сообщение об ошибке при срабатывании исключения в БД Не выводится правильный ответ при выполнении условия Сообщение выводится при перезагрузке страницы |
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
|
| 02.05.2011, 21:57 | |
|
Если тебе надо отлавливать сообщения в своём приложении, тогда:
http://www.cyberguru.ru/cbuild... ndler.html Если в чужом приложении, тогда: http://www.cyberguru.ru/progra... hooks.html
1
|
|
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
| 09.05.2011, 20:28 [ТС] | |
|
спасибо за ссылки...
начал разбираться и возникли проблемы при написании dll с перехватчиком. Код: #include <iostream> #include "stdafx.h" #include <windows.h> #include <Winuser.h> #pragma comment(lib, "user32.lib") using namespace std; extern "C" __declspec(dllexport) int MouseHookFunction(); LRESULT CALLBACK WH_HookMouse(int code, WPARAM wParam, LPARAM lParam); //======================================== ====================================== int MouseHookFunction() { HHOOK HookHandle = SetWindowsHookEx(WH_MOUSE,WH_HookMouse, 0, 0); //HookHandle = SetWindowsHookEx(WH_MOUSE, WH_HookMouse, 0, 0); ште i=5; printf ("GOOD LOAD FUNCTION \n"); return i; }; Ошибки: 1>------ Build started: Project: dll-mouse-2, Configuration: Debug Win32 ------ 1>Compiling... 1>dll-mouse-2.cpp 1>c:\users\volon\documents\visual studio 2008\projects\dll-mouse-2\dll-mouse-2\dll-mouse-2.h(53) : warning C4244: 'return' : conversion from 'double' to 'int', possible loss of data 1>Linking... 1> Creating library C:\Users\volon\Documents\Visual Studio 2008\Projects\dll-mouse-2\Debug\dll-mouse-2.lib and object C:\Users\volon\Documents\Visual Studio 2008\Projects\dll-mouse-2\Debug\dll-mouse-2.exp 1>dll-mouse-2.obj : error LNK2001: unresolved external symbol _WH_HookMouse@12 1>C:\Users\volon\Documents\Visual Studio 2008\Projects\dll-mouse-2\Debug\dll-mouse-2.dll : fatal error LNK1120: 1 unresolved externals 1>Build log was saved at "file://c:\Users\volon\Documents\Visual Studio 2008\Projects\dll-mouse-2\dll-mouse-2\Debug\BuildLog.htm" 1>dll-mouse-2 - 2 error(s), 1 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== В чём проблема?
0
|
|
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
|||||||||||
| 10.05.2011, 00:36 | |||||||||||
|
Проблема в том, что ты объявил эту функцию
Добавлено через 7 минут Это как пример
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
| 10.05.2011, 02:32 [ТС] | |
|
спасибо, помогло)))))
и уж можно совсем обнаглеть.... есть ещё несколько вопросов.... Есть основная программа, в которой подгружается ddl, в ddl установлен хук (будет установлен))) на мышь, хук в свою очередь вызывает функцию LRESULT CALLBACK. Основная задача программы - это запись координат мыши, время события и на что именно сработала (двойной щелчек, перетаскивание элемента и т.п.). Вопросы - где лучше реализовать запись в файл? На данный я момент я реализую так: в основной программе создал double массив, передал указатель на это маасив в dll, и дальше, как я думаю, нужно в функции dll записывать в файл значения. но тут у меня назрел вопрос - а как я из LRESULT CALLBACK буду получать все параметры (так как только там могу их узнать)... на правильном ли я пути, или нужно поменять дорого? З.Ы. извините, если не корректно написал сообщение, ночь всё-таки))))
0
|
|
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
||||||||||||||||
| 10.05.2011, 11:13 | ||||||||||||||||
|
Я тебе скину один свой старый код, я там отлавливаю ряд сообщений у чужого приложения,
по такому же принципу ты можешь отлавливать любые сообщения. Помни только, что хук подгружает систему, поэтому действия по анализу данных в хуке надо делать очень быстро, нельзя вставлять никакие длительные процессы. При записи данных в файл лучше сделать так: писать в свой буфер внутри программы, а по таймеру сбрасывать порцию данных.
Разбор в главном приложении
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
| 11.05.2011, 01:27 [ТС] | |
|
Спасибо за код))) Конкретно до хуков никак не дойду, пишу "примочку к нему".. вот проблема, написал:
основная программа: HMODULE hLib; if ((hLib = LoadLibrary("dll-mouse-2.dll")) != NULL) {printf ("Good load DLL \n");} else printf ("NOT Good load DLL \n"); double result[6]; result[0]=8.123456; double *ip; ip=&result[0]; double pFunction(*ip); while (true) { (FARPROC &) pFunction= GetProcAddress(hLib, MouseHookFunction"); double test=*ip; char ttt[10]; sprintf(ttt, "%f", test); printf ("string = %s \n",ttt); } DLL: int MouseHookFunction(double *ip) { *ip=123.987654; return true; }; Так вот - в этом случае переменная ttt равна 8.123456, хотя по моей логике - должна быть 123.987654. Узнал,что функция GetProcAddress может так же обращаться к переменным, но тут а) только Int значения, б) у меня ошибка вылазит: An unhandled exception of type 'System.NullReferenceException' occurred in 321.exe Additional information: В экземпляре объекта не задана ссылка на объект. Основная программа: int *ip = (int*) GetProcAddress(hLib, "_i"); int test=*ip; //вот здесь и виснет DLL: extern "C" __declspec(dllexport) int i=5; Вопрос - как можно вернуть double значения из DLL в основную программу для их дальнейшей обработки? Добавлено через 27 минут C int разобрался - нужно убрать подчёркивание из i при вызове. Но получается, что только статические переменные можно передать (((( НО вопрос про double остаётся...
0
|
|
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
|||||||||||
| 11.05.2011, 10:36 | |||||||||||
|
Ты можешь вернуть любые значения из длл в основную программу
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
| 11.05.2011, 23:29 [ТС] | |
|
что-то ругается компилятор на сточки:
GETREFDOUBLEVAL GetRefDblVal = GetProcAddress(hLib,"_GetRefDoubleValue" ); error C2440: 'initializing' : cannot convert from 'FARPROC' to 'GETDOUBLEVAL' И, честно говоря, не понял - почему нужно вызывать функции, содержащие переменные, а не сами переменные. Добавлено через 3 часа 24 минуты разобрался)) не очень понял как это работает, но нужно записывать так: GETDOUBLEVAL GetDblVal = (GETDOUBLEVAL) GetProcAddress(hLib,"GetDoubleValue");
0
|
|
|
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
|
|
| 11.05.2011, 23:45 | |
|
да, забыл, абсолютно правильно, надо же привести указатель к нашему типу
зачёт!
0
|
|
|
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 20
|
|
| 16.05.2011, 23:44 [ТС] | |
|
возникла проблема и непонимание....
1) как из LRESULT CALLBACK вернуть double значение в основную функцию MouseHookFunction? 2) как можно замерить время движения колёсика? HHOOK HookHandle; LRESULT CALLBACK WH_HookMouse(int nCode,WPARAM wParam,LPARAM lParam); //======================================== ====================================== int MouseHookFunction() { HookHandle = SetWindowsHookEx(WH_MOUSE,(HOOKPROC)WH_H ookMouse, 0, 0); return true; }; LRESULT CALLBACK WH_HookMouse(int code,WPARAM wParam,LPARAM lParam) { double xInc; double yInc; if(code < 0) {return CallNextHookEx(HookHandle,code, wParam, lParam);} int msg; switch(msg) { case WM_MOUSEWHEEL: { if (LOWORD(wParam)&MK_SHIFT) { xInc = (short)HIWORD(wParam); return xInc; } else { yInc = (short)HIWORD(wParam); return yInc; } }; break; default: return 0; } return 0; }
0
|
|
| 16.05.2011, 23:44 | |
|
Помогаю со студенческими работами здесь
11
Сброс МК при срабатывании реле. Вылет при срабатывании деструктора Не выводится сообщение при запуске в виртуальной машине Ошибка сегментации при срабатывании деструктора
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|