È possibile installare un gancio WH_CBT
utilizzando la funzione SetWindowsHookEx
.
var
hhk: HHOOK;
function CBT_FUNC(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
ClassNameBufferSize = 1024;
var
hTemp : HWND;
i : Integer;
RetVal : Integer;
ClassNameBuffer: Array[0..ClassNameBufferSize-1] of Char;
begin
case nCode of
HCBT_ACTIVATE:
begin
hTemp := HWND(wParam);
if (Screen<>nil) and (hTemp>0) then
begin
RetVal := GetClassName(wParam, ClassNameBuffer, SizeOf(ClassNameBuffer));
//check for the class
if (RetVal>0) and SameText(ClassNameBuffer,'TForm2') then
begin
Assert(RetVal < ClassNameBufferSize, 'Class name larger than fixed buffer size');
for i := 0 to Screen.FormCount-1 do
if Screen.Forms[i].Handle=hTemp then
begin
//set the caption
Screen.Forms[i].Caption:='Hello';
Break;
end;
end;
end;
end;
end;
Result := CallNextHookEx(hhk, nCode, wParam, lParam);
end;
Procedure InitHook();
var
dwThreadID : DWORD;
begin
dwThreadID := GetCurrentThreadId;
hhk := SetWindowsHookEx(WH_CBT, @CBT_FUNC, hInstance, dwThreadID);
if hhk=0 then RaiseLastOSError;
end;
Procedure KillHook();
begin
if (hhk <> 0) then
UnhookWindowsHookEx(hhk);
end;
initialization
InitHook();
finalization
KillHook();
end.
Solo un altro esempio del perché non si dovrebbero mai utilizzare componenti di terze parti per i quali non si dispone della fonte se esiste un'opzione disponibile per ottenerlo. :-) Puoi specificare quale componente di terze parti stai utilizzando, in modo che se esiste una soluzione nota relativa a quel set di componenti, qualcuno può fornirla. –
@Ken: TeeChart. Potrei aggiornare la versione 'with source', ma è difficile giustificare un minimo di 250 dollari solo per cambiare la didascalia di un modulo: o) – norgepaul
Il problema è che qualcosa cambia (o smettono di includere TeeChart nel prossimo versione di Delphi), tutto il codice che lo utilizza non può essere spostato alla versione successiva del compilatore. Se si dispone di codice che dipende da componenti di terze parti, è necessario disporre della fonte per proteggersi in futuro. È una delle primissime cose che dovresti imparare dopo aver imparato Delphi: l'architettura aperta è ottima per le estensioni di terze parti, ma usarle senza ingannare la fonte quando le cose cambiano in futuro e non puoi risolvere da soli i problemi. –