Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Опять Shell   Найти похожие ветки 

 
IllusoryOrion ©   (2004-07-16 12:36) [0]

library WndMng;

uses
 Windows, Messages, SysUtils;

{$R *.RES}

type
PHookData = ^THookData;
THookData = record
 HookId: THandle;
end;

var
HookData: PHookData;
HookDataHandle: THandle;

function EnableProcessPrivilege(const Enable: Boolean; const Privilege: string): Boolean;
const
PrivAttrs: array [Boolean] of DWORD = (0, SE_PRIVILEGE_ENABLED);
var
Token: THandle;
TokenPriv: TTokenPrivileges;
ResLen: DWord;
begin
Result:=False;
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token) then
begin
 TokenPriv.PrivilegeCount:=1;
 LookupPrivilegeValue(nil, PChar(Privilege), TokenPriv.Privileges[0].Luid);
 TokenPriv.Privileges[0].Attributes := PrivAttrs[Enable];
 AdjustTokenPrivileges(Token, False, TokenPriv, SizeOf(TokenPriv), nil, ResLen);
 Result:=GetLastError = ERROR_SUCCESS;
 CloseHandle(Token);
end;
end;

function ShellHookProc(nCode, WParam, LParam: integer): integer; stdcall;
var
ShellWindow: THandle;
begin
ShellWindow:=FindWindow(nil, "Program Manager");
SendMessage(ShellWindow, RegisterWindowMessage("ORIONSHELLHOOK"), nCode, WParam);
Result:=CallNextHookEx(HookData^.HookId, nCode, WParam, LParam);
end;

procedure RegisterShellHook(Active: Boolean); stdcall;
begin
if Active then HookData^.HookId:=SetWindowsHookEx(WH_SHELL, @ShellHookProc, hInstance, 0) else UnhookWindowsHookEx(HookData^.HookId);
end;

procedure InitializeHooks;
const
HookFilename: PChar = "OSWNDS_HOOK_DATA";
begin
if Win32Platform<>VER_PLATFORM_WIN32_WINDOWS then EnableProcessPrivilege(True, "SeDebugPrivilege");
HookDataHandle:=CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(THookData), HookFilename);
HookData:=MapViewOfFile(HookDataHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(THookData));
end;

procedure DeinitializeHooks;
begin
UnmapViewOfFile(HookData);
CloseHandle(HookDataHandle);
end;

procedure DLLEntryPoint(Reason: DWord); stdcall;
begin
case Reason of
 DLL_PROCESS_ATTACH:
  begin
   InitializeHooks;
  end;
 DLL_PROCESS_DETACH:
  begin
   DeinitializeHooks;
  end;
end;
end;

exports
RegisterShellHook,
ShellHookProc;

begin
DLLProc:=@DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

Это код ДЛЛ для отлова сообщений посылаемых шеллу. Все прекрасно работает, НО! Например в TotalCommander"e если выбрать файл и нажать View(Просмотр) он (ТС) виснет намертво (и окно не отображается), хотя под Explorerom все OK. В чем проблема?


 
IllusoryOrion ©   (2004-07-16 13:59) [1]

народ! ну помогите! ничего не могу понять - лажа полная!


 
IllusoryOrion ©   (2004-07-16 15:03) [2]

up



Страницы: 1 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
1-1092231104
Jaxtor
2004-08-11 17:31
2004.08.29
Исходники компонент и отладчик


1-1092206792
atmospheric
2004-08-11 10:46
2004.08.29
Компонент для преобразования html таблицы в StringGrid?


14-1092119052
Slider007
2004-08-10 10:24
2004.08.29
Обжимка витой пары


11-1080145786
nester
2004-03-24 19:29
2004.08.29
Почему не срабатывает ItemData в ListView?


3-1091822632
Денисыч
2004-08-07 00:03
2004.08.29
Как защищать данные от просмотра ?