Estou subclasseando o Explorer para interceptar algumas msgs da systray.
Código na dll:
Instalação da hook:
begin
HHook_Message := SetWindowsHookEx(WH_GetMessage, @LL_Messsage_Proc, HInstance, 0); // instala a hook
HTray := FindWindow('Shell_TrayWnd', nil); // pega o handle da bandeja
PostMessage(HTray, WM_USer+167, 157, 134); // envia a msg p/ subclassear
end;
Código na callback:
function LL_Messsage_Proc(nCode:Integer; WP:WParam; LP:lParam):Integer; stdcall;
var Msg:TMsg;
begin
CopyMemory(@Msg, Pointer(LP), SizeOf(TMsg));
if (Msg.message = (WM_User+167)) and
(Msg.wParam = 157) and
(Msg.lParam = 134) then
begin
HTray := FindWindow('Shell_TrayWnd', nil);
HProc := SetWindowLong(HTray, GWL_WndProc, DWord(@_Window_Proc_Lock)); // subclassea o Explorer
Exit;
end;
Result := CallNextHookEx(HHook_Message, nCode, WP, LP); // passa a msg p/ outras hooks
end;
Código da WindowProc:
function _Window_Proc_Lock(h:Thandle; iMsg:UInt; WP:WParam; LP:LParam):Integer; stdcall;
begin
Result := CallWindowProc(Pointer(HProc), HTray, iMsg, WP, LP);
end;
Ou seja, simplesmente chamo a WindowProc original dele e mesmo assim recebo intermitentemente o famoso erro: O Windows Explorer encontrou um erro e precisa ser fechado.
Será que de tempos em tempos ele modifica sua WindowProc ?
Pergunta
ipc
Srs
Estou subclasseando o Explorer para interceptar algumas msgs da systray.
Código na dll:
Instalação da hook:
Código na callback: Código da WindowProc:Ou seja, simplesmente chamo a WindowProc original dele e mesmo assim recebo intermitentemente o famoso erro: O Windows Explorer encontrou um erro e precisa ser fechado.
Será que de tempos em tempos ele modifica sua WindowProc ?
E se modificar, como se pode saber disso ?
E se não modificar, o que está errado ?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.