home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 1995 May / pcw-0595.bin / demos / databeck / wsounds / setup.dir / wswsrc.exe / WSWHOOK.PAS < prev    next >
Pascal/Delphi Source File  |  1992-12-02  |  5KB  |  169 lines

  1. {************************************************************************}
  2. {                                                                        }
  3. { CAPTAIN Hook-Additions as message hooks | Thorsten Petrowski - TPW 1.5 }
  4. { Copyright (c) 1992 Abacus | Copyright (c) 1992 Data Becker GmbH        }
  5. {                                                                        }
  6. {************************************************************************}
  7.  
  8.  
  9. { Last change: 11-2-92 : 
  10.   Adapting to Windows 3.1 Hook functions (HookEx etc.) }
  11.  
  12. LIBRARY WswHook;
  13.  
  14. { Load application to permanent location }
  15. {$C FIXED PERMANENT PRELOAD}
  16.  
  17. USES
  18.   Strings,WinTypes, WinProcs,WObjects,Stdwnds,MMSystem,Win31;
  19.  
  20. TYPE
  21.  Proc = PROCEDURE;
  22.  PCallWndProc = ^TCallWndProc;
  23.  TCallWndProc = RECORD
  24.   LParamHI : Word;
  25.   LParamLo : Word;
  26.   WParam   : Word;
  27.   Msg      : Word;
  28.   Wnd      : HWnd;
  29. END;
  30.  
  31. Var Last : Word;
  32.     F: Text;
  33.     Message,WEParam,LPLo,LPHi :Integer;
  34.     Sounds : Array [0..13,0..200] of char;
  35.     Hooki : HHook;
  36.  
  37. CONST
  38.   SaveMsgFunc   : TFarProc = NIL ;
  39.  
  40. CONST SIZE_RESTORED = 0;
  41.       SIZE_MINIMIZED= 1;
  42.       SIZE_MAXIMIZED= 2;
  43.       SIZE_MAXSHOW  = 3;
  44.       SIZE_MAXHIDE  = 4;
  45.       SIZE_SEIZED   = 5;
  46.  
  47. PROCEDURE ReadINIProfiles;
  48. EXPORT;
  49. Var z: Integer;
  50. Begin
  51. z := GetProfileString ('WSW_Extended_Sounds','WindowActive','SYSTEMDEFAULT',@Sounds[0,0],199);
  52. z := GetProfileString ('WSW_Extended_Sounds','WindowClose','SYSTEMDEFAULT',@Sounds[1,0],199);
  53. z := GetProfileString ('WSW_Extended_Sounds','Iconify','SYSTEMDEFAULT',@Sounds[2,0],199);
  54. z := GetProfileString ('WSW_Extended_Sounds','IconOpen','SYSTEMDEFAULT',@Sounds[3,0],199);
  55. z := GetProfileString ('WSW_Extended_Sounds','MenuOpen','SYSTEMDEFAULT',@Sounds[4,0],199);
  56. End;
  57.  
  58. FUNCTION WriteINIProfiles : BOOL;
  59. EXPORT;
  60. Var error : BOOL;
  61. Begin
  62.  error := FALSE;
  63.  
  64.  { Make entries }
  65.  if (WriteProfileString ('WSW_Extended_Sounds','WindowActive',Sounds[0])) = FALSE Then error := TRUE;
  66.  if (WriteProfileString ('WSW_Extended_Sounds','WindowClose',Sounds[1])) = FALSE Then error := TRUE;   
  67.  if (WriteProfileString ('WSW_Extended_Sounds','Iconify',Sounds[2])) = FALSE Then error := TRUE;
  68.  if (WriteProfileString ('WSW_Extended_Sounds','IconOpen',Sounds[3])) = FALSE Then Error := TRUE;
  69.  if (WriteProfileString ('WSW_Extended_Sounds','MenuOpen',Sounds[4])) = FALSE Then Error := TRUE;
  70.  WriteProfileString (NIL,NIL,NIL);  { Flush INI buffer }
  71.  SendMessage (HWND_BROADCAST,WM_WININICHANGE,0,0); { Indicate change to WIN.INI }
  72.  WriteIniProfiles := error;
  73. End;
  74.  
  75. { Assign an event to another sound }
  76.  
  77. PROCEDURE ChangeEvent (Idx: Integer; Value: PChar);
  78. EXPORT;
  79. Begin
  80.  StrCopy (sounds[idx],Value);
  81. End;
  82.  
  83. FUNCTION WndHook(Code: Integer; WParam: Word; LParam: LongInt): LongInt;
  84.   EXPORT;
  85. VAR
  86.   CallDefHookProc: Boolean;
  87.   Result: LongInt;
  88. BEGIN
  89.  
  90.   CallDefHookProc := False;
  91.   Result := 0;
  92.   CASE Code OF
  93.     hc_Action:
  94.       BEGIN
  95.        Message := PCallWndProc(LParam)^.Msg;
  96.        WEParam  := PCallWndProc(LParam)^.WParam;
  97.        LPLo    := PCallWndProc(LParam)^.LParamLo;
  98.        LPHi    := PCallWndProc(LParam)^.LParamHi;
  99.  
  100.       IF (Message = wm_Close) then
  101.        Begin
  102.           last := wm_Close;
  103.           SndPlaySound (Sounds[0],SND_ASYNC);
  104.        End;
  105.  
  106.       IF (Message = wm_QueryOpen) then
  107.        Begin
  108.           last := wm_QueryOpen;                                
  109.           SndPlaySound (Sounds[2],SND_ASYNC);
  110.        End;
  111.  
  112.      IF ( (Message = wm_Size) and (WEPAram=SIZEICONIC) ) then
  113.       Begin
  114.        SndPlaySound (Sounds[1],SND_ASYNC);
  115.       End;
  116.  
  117.     IF (Message = wm_InitDialog) then
  118.       Begin
  119.        SndPlaySound (Sounds[3],SND_ASYNC);
  120.       End;
  121.  
  122.     IF (Message = wm_HScroll) or (Message = wm_VScroll) then
  123.       Begin
  124.        SndPlaySound (Sounds[4],SND_ASYNC);
  125.       End;
  126.  
  127.     IF (Message = wm_MOVE) then
  128.       Begin
  129.        SndPlaySound (Sounds[5],SND_ASYNC);
  130.       End;
  131.      End;
  132.  
  133.     hc_NoRemove:
  134.       BEGIN
  135.       END;
  136.   ELSE
  137.     CallDefHookProc := True;
  138.   END;
  139.  
  140.   IF (Code < 0) OR (CallDefHookProc) THEN
  141.    Begin
  142.   {  WndHook := CallNextHookEx (Code,WParam,LParam,Hooki);}
  143.    End;
  144. END;
  145.  
  146. PROCEDURE HookInstall(Install: Boolean); EXPORT;
  147. BEGIN
  148.   IF Install THEN
  149.     Begin
  150.      Hooki := SetWindowsHookEx (WH_CALLWNDPROC,WndHook,Hinstance,0);
  151.     End
  152.   ELSE BEGIN
  153.     UnHookWindowsHookEx (Hooki);
  154.     SaveMsgFunc    := NIL;
  155.   END;
  156. END;
  157.  
  158. EXPORTS
  159.   ReadINIProfiles;
  160. EXPORTS
  161.   HookInstall;
  162. EXPORTS
  163.   WriteINIProfiles;
  164. EXPORTS
  165.   ChangeEvent;
  166.  
  167. BEGIN
  168. END.
  169.