|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с хуком на мышь
Когда ставлю хук на мышь, есть две очень неприятные проблемы.
1) Когда использую inputbox, мышь на пару сек. подвисает, а бывает и вообще глюканет сильно. 2) При одновременном скролинге в listbox-е, с помощью ролика мыши, и передвижении мыши, так же идут какие-то подвисания курсора. Эта фигня происходит при включенной плавной прокрутке в системе. p.s. я так понял, что inputbox блокирует дальнейшее выполнение функции, как это предотвратить. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) ListBox1: TListBox; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; function SysMsgProc(code: integer; wParam: longint; lParam : longint):longint; stdcall; var Form1: TForm1; Mouse_SysHook: HHOOK; implementation {$R *.dfm} function SysMsgProc(code: integer; wParam: longint; lParam : longint):longint; stdcall; begin Result := CallNextHookEx(Mouse_SysHook, Code, wParam, LParam); if (Code=HC_ACTION) then begin if (wParam = WM_MBUTTONDOWN) then begin InputBox('','',''); result:=-1; end; end else Result := CallNextHookEx(Mouse_SysHook, Code, wParam, LParam); end; procedure TForm1.FormCreate(Sender: TObject); begin if Mouse_SysHook <> 0 then UnhookWindowsHookEx(Mouse_SysHook); Mouse_SysHook := SetWindowsHookEx(WH_MOUSE_LL, @SysMsgProc, HInstance, 0); end; end. ------------------- Сделал обработку inputbox в отдельном потоке, но появился глюк странный, при нажатии кнопки в области моей проге. p.s. может лучше делать хук в потоке? подскажите пожалуйста.. ------------------- Вроде помогла синхронизация... Но все же, кто нибудь ответит, можно ли этот вопрос решить как-то легче? Последний раз редактировалось x-zey, 24.08.2013 в 20:22. |