[delphi / win32] mousehook / menuitem probleem

Pagina: 1
Acties:

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 21:52
om binnen een app te kijken of de gebruiker nog wakker is heb een simpel objectje gemaakt dat een keyboard en mousehook maakt, in de callback een postmessage doet, en zo een event naar buiten stuurt.

Niet echt spannend allemaal en het lijkt dan ook fluitend te werken.
Behalve als ik met de muis op een TMenuItem klik. Dan lijkt de main thread ineens geen messages meer te verwerken. Als ik naar een andere app switch en weer terug (met alt-tab of muis) gaat de boel weer lopen.

Dit probleem lijkt zich nergens anders voor te doen, alleen bij een TMenuItem.

Volgens google ben ik alleen op de wereld met dit probleem ... :|

voorbeeld exe + source staat hier http://www.xs4all.nl/~bosma/HookProblems.zip

ook nog wat stukjes code:

Delphi:
1
   fMouseHook := SetWindowsHookEx(WH_MOUSE, @MouseProc, 0, GetWindowThreadProcessId(Application.Handle));


Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function MouseProc(nCode: integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
var Activity: TActivityType;
begin
 if nCode >= 0 then
 begin
  Activity := atNone;

  case wParam of
//    WM_MOUSEMOVE: Activity := atMouseMove;
   WM_LBUTTONDOWN..WM_MBUTTONDBLCLK: Activity := atMouseClick;
  end;

  if Activity <> atNone then
   PostMessage(fMessageHandle, fWM_HOOK_CALLBACK, integer(Activity), lparam);
 end;

 result := CallNextHookEx(fMouseHook, nCode, wParam, lParam);
end;


Delphi:
1
2
3
4
5
6
7
8
9
10
procedure TDetectUserActivity.MessageHandler(var Message: TMessage);
begin
 if Message.Msg = fWM_HOOK_CALLBACK then
 begin
  if assigned(fOnActivity) then
   fOnActivity(Self, TActivityType(Message.WParam));
 end
 else
  Message.result := DefWindowProc(fMessageHandle, Message.Msg, Message.wParam, Message.LParam);
end;

A software developer is someone who looks both left and right when crossing a one-way street.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 23:33

curry684

left part of the evil twins

Ik heb een vermoeden dat de CaptureMouse van het menu roet in het eten gooit?

Wat bedoel je overigens met "de main thread lijkt niets meer te doen"? Werkt de highlight van de menuitems nog wel, en de paints van het window als je er een ander window overheen dragt?

Professionele website nodig?


  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 21:52
het beetje lastig grip te krijgen op wat er precies gebeurd.
in de test app heb ik een labeltje wat met een timer geupdate wordt, dat stop iig, ook het painten van het window lijkt te stoppen. Dit is echter lastig te controleren omdat zodra ik naar een andere app schakel de boel weer gaat lopen.

A software developer is someone who looks both left and right when crossing a one-way street.