Man braucht nur die Threads unterhalb des Artikels durchlesen (-> "Could be done without hooks" was sich aber dann doch anders entpuppt).
Schmeis das Subclassing heraus und ersetze deinen Hook-Callback durch diesen:
Code:
function HookCallWndProc(nCode: Integer; wParam, lParam: Longint): Longint; stdcall;
var
cwps: TCWPStruct;
lRet: THandle;
szClass: array[0..8] of char;
begin
if (nCode = HC_ACTION) then
begin
CopyMemory(@cwps, Pointer(lParam), SizeOf(CWPSTRUCT));
case cwps.message of
WM_CREATE:
begin
GetClassName(cwps.hwnd, szClass, Length(szClass) - 1);
// Window name for menu is #32768
if (lstrcmpi(szClass, '#32768') = 0) then
{*** Unterschied zu deinem Hook}
MakeWndTrans(cwps.hwnd, 50{Alphablending});
{*** der Rest ist herausgefallen}
end;
end;
end;
// Call the next hook in the chain
Result := CallNextHookEx(WH_CALLWNDPROC, nCode, wParam, lParam);
end;