Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запретить передачу фокуса окну по которому кликаешь [D7, WinXP]


Igor Zorkov ©   (2007-11-01 21:32:00) 

Блокирую среднюю кнопку мыши, а как запретить передачу фокуса окну по которому кликаешь?

library MousePrevent;

uses
Windows,
Messages,
Controls,
SysUtils;

Var
SysHook: HHook = 0;
GWWM_MBUTTONDOWN: Cardinal;
GWWM_MBUTTONUP: Cardinal;

function SysMsgProcM(Code:Integer; WParam:LongInt; LParam:LongInt): LongInt; stdcall;
var
Msg:TMessage;
Wnd: HWND;
begin
if (Code = HC_ACTION) then
begin
 Wnd:= FindWindow(nil, 'Form1');
 case TMsg(Pointer(LParam)^).Message of
   WM_MBUTTONDOWN:
   begin
     SendMessage(Wnd, GWWM_MBUTTONDOWN, 0, 0);
     TMsg(Pointer(LParam)^).Message:= WM_NULL;
   end;
   WM_MBUTTONUP:
   begin
     SendMessage(Wnd, GWWM_MBUTTONUP, 0, 0);
     TMsg(Pointer(LParam)^).Message:= WM_NULL;
   end else
     Result:= CallNextHookEx(SysHook,Code,WParam,LParam);
  end;
end;
end;

procedure RunStopPreventHookM(State: Boolean) export; stdcall;
begin
if State = true then
begin
 SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProcM, HInstance, 0);
end else
begin
 UnhookWindowsHookEx(SysHook);
 SysHook:= 0;
end;
end;

exports RunStopPreventHookM;

begin
GWWM_MBUTTONDOWN:= RegisterWindowMessage ('GWWM_MBUTTONDOWN');
GWWM_MBUTTONUP:= RegisterWindowMessage ('GWWM_MBUTTONUP');
end.

<Цитата>


Igor Zorkov   (2007-11-02 14:18:00) [1]


> Leonid Troyanovsky ©   (02.11.07 13:57) [11]


Да читал я, когда ума хватит сформулировать правильно вопрос обращюсь, а пока .....


Leonid Troyanovsky   (2007-11-02 13:57:00) [2]


> Igor Zorkov ©   (02.11.07 13:09) [8]

> Пыюсь написать компонент типа TCPMouseHook, но ума нет совсем.

Приведи вопрос в соответствие с
http://ln.com.ua/~openxs/articles/smart-questions-ru.html

Или в "Начинающим", может там кто сопли и утрет.

--
Regards, LVT.


Igor Zorkov   (2007-11-02 13:31:00) [3]


> Anatoly Podgoretsky ©   (02.11.07 13:24) [9]


Не убий!!!


Anatoly Podgoretsky   (2007-11-02 13:24:00) [4]

> Leonid Troyanovsky  (02.11.2007 12:33:07)  [7]

> Ты чего-то не договариваешь, Герасим.

Му, му


Igor Zorkov   (2007-11-02 13:09:00) [5]

Пыюсь написать компонент типа TCPMouseHook, но ума нет совсем.

library MouseHook;

uses
 Windows, Messages, Forms;

const
 MMFName: PChar = 'MMF';

type
 PGlobalDLLData = ^TGlobalDLLData;
 TGlobalDLLData = packed record
   SysHook: HWND;
   Wnd: HWND;
 end;

var
 GlobalData: PGlobalDLLData;
 MMFHandle: THandle;
 MMWM_MBUTTONDOWN: Cardinal;
 MMWM_MBUTTONUP: Cardinal;
 MMWM_MBUTTONDBLCLK: Cardinal;
 MMWM_NCMBUTTONDOWN: Cardinal;
 MMWM_NCMBUTTONUP: Cardinal;
 MMWM_NCMBUTTONDBLCLK: Cardinal;

function SysMsgProc(Code: Integer; wParam: Word; lParam: Longint): Longint; stdcall;
begin
 if Code = HC_ACTION then
 begin
   case TMsg(Pointer(lParam)^).message of
     WM_MBUTTONDBLCLK:
       SendMessage(GlobalData^.Wnd, MMWM_MBUTTONDBLCLK, 0, 0);
     WM_NCMBUTTONDOWN:
       SendMessage(GlobalData^.Wnd, MMWM_NCMBUTTONDOWN, 0, 0);
     WM_NCMBUTTONUP:
       SendMessage(GlobalData^.Wnd, MMWM_NCMBUTTONUP, 0, 0);
     WM_NCMBUTTONDBLCLK:
       SendMessage(GlobalData^.Wnd, MMWM_NCMBUTTONDBLCLK, 0, 0);
   end;
 end else
 CallNextHookEx(GlobalData^.SysHook, Code, wParam, lParam);
end;

function StartMouseHook(State: Boolean; Wnd: HWND): Boolean; export; stdcall;
begin
 Result:= False;
 if State = True then
 begin
   GlobalData^.SysHook:= SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
   GlobalData^.Wnd:= Wnd;
   if GlobalData^.SysHook <> 0 then
     Result:= True;
 end
 else
 begin
   UnhookWindowsHookEx(GlobalData^.SysHook);
   Result:= False;
 end;
end;

function StopMouseHook(): Boolean; export; stdcall;
begin
 Result:= False;
 UnhookWindowsHookEx(GlobalData^.SysHook);
 if GlobalData^.SysHook = 0 then
   Result:= True;
end;

procedure OpenGlobalData();
begin
 MMWM_MBUTTONDOWN:= RegisterWindowMessage('MMWM_MBUTTONDOWN');
 MMWM_MBUTTONUP:= RegisterWindowMessage('MMWM_MBUTTONUP');
 MMWM_MBUTTONDBLCLK:= RegisterWindowMessage('MMWM_MBUTTONDBLCLK');
 MMWM_NCMBUTTONDOWN:= RegisterWindowMessage('MMWM_NCMBUTTONDOWN');
 MMWM_NCMBUTTONUP:= RegisterWindowMessage('MMWM_NCMBUTTONUP');
 MMWM_NCMBUTTONDBLCLK:= RegisterWindowMessage('MMWM_NCMBUTTONDBLCLK');
 MMFHandle:= CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(TGlobalDLLData), MMFName);
 GlobalData:= MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(TGlobalDLLData));
 if GlobalData = nil then
   CloseHandle(MMFHandle);
end;

procedure CloseGlobalData();
begin
 UnmapViewOfFile(GlobalData);
 CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(Reason: DWord); stdcall;
begin
 case Reason of
   DLL_PROCESS_ATTACH: OpenGlobalData;
   DLL_PROCESS_DETACH: CloseGlobalData;
 end;
end;

exports StartMouseHook, StopMouseHook;

begin
 DLLEntryPoint(DLL_PROCESS_ATTACH);
end.


Leonid Troyanovsky   (2007-11-02 12:33:00) [6]


> Igor Zorkov ©   (02.11.07 11:00) [6]

> До установки хука, включаешь компьютер и появляеться окно
> с заголовком - по мне кликнули мышию.

Кто ж по нему кликнул, если компьютер только включили.
И что за программа создает это окно. Вирус, троян?

Ты чего-то не договариваешь, Герасим.

См. также
http://ln.com.ua/~openxs/articles/smart-questions-ru.html

--
Regards, LVT.


Igor Zorkov   (2007-11-02 11:00:00) [7]


>Leonid Troyanovsky ©   (01.11.07 22:01) [3]


До установки хука, включаешь компьютер и появляеться окно с заголовком - по мне кликнули мышию.

Leo
> nid Troyanovsky ©   (01.11.07 22:21) [5]


Ну вот, собственно жму я кнопку мыши а окно сволочь выходит на передний план


Leonid Troyanovsky   (2007-11-01 22:21:00) [8]


> Igor Zorkov ©   (01.11.07 22:06) [4]

> Нравиться издеваться?

Нет, мы тут просто в гестапо играем.

Да, на чем мы остановились?

--
Regards, LVT.


Igor Zorkov   (2007-11-01 22:06:00) [9]


> Leonid Troyanovsky ©   (01.11.07 22:01) [3]


Нравиться издеваться?


Leonid Troyanovsky   (2007-11-01 22:01:00) [10]


> Igor Zorkov ©   (01.11.07 21:50) [2]

> Я имел ввиду окно по которому кликаешь выходит не передний
> план

Т.е., кликнутое средней кнопкой окно выходит на первый план.
До, после или во время установки хука?

--
Regards, LVT.


Igor Zorkov   (2007-11-01 21:50:00) [11]


> Leonid Troyanovsky ©   (01.11.07 21:44) [1]


Я имел ввиду окно по которому кликаешь выходит не передний план, как сделать что бы оно там и оставалось, то есть не меняло свой Z order


Leonid Troyanovsky   (2007-11-01 21:44:00) [12]


> Igor Zorkov   (01.11.07 21:32)  

> Блокирую среднюю кнопку мыши, а как запретить передачу фокуса
> окну по которому кликаешь?

И чего, клик средней кнопки передает фокус?

--
Regards, LVT.


Наверх

Титульная страница Поиск, карта сайта Написать письмо