19-07-2024, Saat: 13:46
Şöyle bir durumu ifade etmekte fayda var.
WM_CREATE mesajı, Application seviyesinde kendi kendine üretilen bir mesaj değil de direkt Windows mesaj sırasına atılan türden bir mesaj olacaktır.
Dolayısıyla proje içerisinden yakalayamazsanız üzülmeyin, çözümü var.
Aşağıdaki örneği denemek isteyebilirsiniz.
Bir boş proje açın bir button ve bir MEMO koyun.
Button OnClick eventi içine formun bir kopyasını create eden aşağıdaki örnekteki gibi basit bir kod ekleyin.
WM_CREATE mesajı, Application seviyesinde kendi kendine üretilen bir mesaj değil de direkt Windows mesaj sırasına atılan türden bir mesaj olacaktır.
Dolayısıyla proje içerisinden yakalayamazsanız üzülmeyin, çözümü var.
Aşağıdaki örneği denemek isteyebilirsiniz.
Bir boş proje açın bir button ve bir MEMO koyun.
Button OnClick eventi içine formun bir kopyasını create eden aşağıdaki örnekteki gibi basit bir kod ekleyin.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
with TForm1.Create(self) do
try
ShowModal();
finally
free;
end;
end;
var
FHHook: HHOOK;
function CBT_HookFunc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
ClassNameBufferSize = 1024;
var
LClassName : Array[0..254] of Char;
hWindow : HWND;
begin
Result := CallNextHookEx(FHHook, nCode, wParam, lParam);
if NOT Assigned(Application.MainForm)
then // MainForm olgunlaşmamışsa (o da OnCreate aşamasında olabilir) üzerindekilere de yazamayız...
Exit;
if nCode < 0 then exit;
if nCode = HCBT_CREATEWND then
begin
hWindow := HWND(wParam);
GetClassName(hWindow, LClassName, 256);
if ( hWindow > 0 )
and ( pos('TForm', LClassName) > 0 ) // TForm ile başlayan bir sınıf create edilmişse...
then
begin
Form1.Memo1.Lines.Add( Format( 'Form oluştu: %xh (%d)', [hWindow, hWindow]) );
end;
end;
end;
Procedure InitHook();
var
dwThreadID : DWORD;
begin
dwThreadID := GetCurrentThreadId;
FHHook := SetWindowsHookEx(WH_CBT, @CBT_HookFunc, hInstance, dwThreadID);
if FHHook = 0
then
RaiseLastOSError;
end;
Procedure KillHook();
begin
if (FHHook <> 0) then
UnhookWindowsHookEx(FHHook);
end;
initialization
InitHook();
finalization
KillHook();
Saygılarımla
Muharrem ARMAN

Muharrem ARMAN


