[ hwfanatic @ 01.07.2004. 19:46 ] @
Kako da nateram prozorče da obrađuje poruke i kada nema fokus? Napravih neki hook za tastaturu koji je ceo odrađen u dinamičkoj biblioteci (moralo je tako), i kad god korisnik pritisne nešto on šalje poruku na određen hendl. Ovo radi kewl dokle god je prozor aplikacije aktivan. E, ali meni treba sve vreme da se zna ko šta čeprka po tastaturi...
[ byTer @ 02.07.2004. 13:37 ] @
Nije li nesto sa default monitor propertijem glavne forme?
[ hwfanatic @ 02.07.2004. 14:08 ] @
Citat:
Specifies the monitor on which the form appears.

Delphi syntax:

type TDefaultMonitor = (dmDesktop, dmPrimary, dmMainForm, dmActiveForm);
property DefaultMonitor: TDefaultMonitor;

Description

Use DefaultMonitor to associate a form with a particular monitor in a multi-monitor application.

Nešto mi je tu sumnjivo...
[ bancika @ 03.07.2004. 00:22 ] @
potrazi komponente GpSysHook, imas hook za misa, tastaturu i API
radi OK
[ Night @ 04.07.2004. 00:24 ] @
Nije problem u fokusu od programa, nego u djeljenim varijablama. Imao sam s time problema kad sam radio hook, ispada da hook radi samo na programu koji je postavio hook. To se moze rijesiti mjenjanjem vrijednosti jednog sectiona u samom hooku (vidjeti iczelionove tutoriale), sto se ne moze napraviti u samom delphiju koliko znam, ali moze sa npr. LordPE, ili nekim drugim alatom koji moze prckati po PE headerima. Druga opcija je da hook napravi memorijsku datoteku u koju sprema handle forme kojoj ce se poruka slati kad hook 'okine'.
[ hwfanatic @ 04.07.2004. 11:43 ] @
Pa, dobro, evo kako izgleda taj hook, pa mi ti reci da li treba da pravim deljenu memoriju... Moje mišljenje je da nema potrebe, jer ja taj handle prosledim odma na početku.
Code:

library kbHook;

uses
  FastShareMem,
  Main in 'Main.pas';

{$R *.res}

end.

Code:

unit Main;

interface

uses
  FastShareMem, Windows, Messages;

function InstallHook(HWND: THandle): Boolean; stdcall;
function KeyboardProc(Code, wParam, lParam: Integer): Integer;
function UninstallHook: Boolean; stdcall;

var
  HookHandle: HHOOK;
  WndHandle: THandle;

exports
  InstallHook,
  UninstallHook;

implementation

function InstallHook(HWND: THandle): Boolean; stdcall;
begin
  Result := FALSE;
  if (HookHandle = 0) and (HWND <> INVALID_HANDLE_VALUE)
    then begin
      HookHandle := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, 0);
      WndHandle := HWND;
    Result := TRUE;
  end;
end;

function KeyboardProc(Code, wParam, lParam: Integer): Integer;
begin
  Result := CallNextHookEx(HookHandle, Code, wParam, lParam);
  if Code >= HC_ACTION
    then begin
      SendMessage(WndHandle, 18000, 0, 0);
// Ovo je samo za probu.
    end;
end;

function UninstallHook: Boolean; stdcall;
begin
  Result := UnhookWindowsHookEx(HookHandle);
  HookHandle := 0;
end;

end.