BSOne.SFC/Tocsg.Lib/VCL/Tocsg.User32.pas

71 lines
2.2 KiB
Plaintext

{*******************************************************}
{ }
{ Tocsg.User32 }
{ }
{ Copyright (C) 2022 sunk }
{ }
{*******************************************************}
unit Tocsg.User32;
interface
uses
System.SysUtils, Winapi.Windows;
const
MSGFLT_ADD = 1;
MSGFLT_REMOVE = 2;
MSGFLT_RESET = 0;
MSGFLT_ALLOW = 1;
MSGFLT_DISALLOW = 2;
WM_COPYGLOBALDATA = $0049;
type
PChangeFilterStruct = Pointer;
TChangeWindowMessageFilter = function(dwMsg, dwFlag: DWORD): Boolean; stdcall;
TChangeWindowMessageFilterEx = function(h: hWnd; dwWndMsg: DWORD; wAction: WORD; pChangeFilterData: PChangeFilterStruct): BOOL; stdcall;
//function ChangeWindowMessageFilter(dwMsg, dwFlag: DWORD): Boolean; // Winapi.Windows.pas 여기에 생김
function ChangeWindowMessageFilterEx(h: hWnd; dwWndMsg: DWORD; wAction: WORD; pChangeFilterData: PChangeFilterStruct): BOOL;
implementation
var
_hUser32: THandle = 0;
_fnChangeWindowMessageFilter: TChangeWindowMessageFilter = nil;
_fnChangeWindowMessageFilterEx: TChangeWindowMessageFilterEx = nil;
function InitUser32Procedure: Boolean;
begin
if _hUser32 = 0 then
begin
_hUser32 := GetModuleHandle(user32);
if _hUser32 <> 0 then
begin
@_fnChangeWindowMessageFilter := GetProcAddress(_hUser32, 'ChangeWindowMessageFilter');
@_fnChangeWindowMessageFilterEx := GetProcAddress(_hUser32, 'ChangeWindowMessageFilterEx');
end;
end;
Result := _hUser32 <> 0;
end;
//function ChangeWindowMessageFilter(dwMsg, dwFlag: DWORD): Boolean;
//begin
// Result := false;
// if InitUser32Procedure and Assigned(_fnChangeWindowMessageFilter) then
// Result := _fnChangeWindowMessageFilter(dwMsg, dwFlag);
//end;
function ChangeWindowMessageFilterEx(h: hWnd; dwWndMsg: DWORD; wAction: WORD; pChangeFilterData: PChangeFilterStruct): BOOL;
begin
Result := false;
if InitUser32Procedure and Assigned(_fnChangeWindowMessageFilterEx) then
Result := _fnChangeWindowMessageFilterEx(h, dwWndMsg, wAction, pChangeFilterData);
end;
end.