Главная страница
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.037 c
6-1087963813
Furyous
2004-06-23 08:10
2004.08.29
Проблема с разрывом socket соединения


9-1084353434
Proger
2004-05-12 13:17
2004.08.29
Маски


1-1092296452
V l a d i m i r
2004-08-12 11:40
2004.08.29
Как определить конец документа?


11-1079703101
Михаил
2004-03-19 16:31
2004.08.29
Перенаправление параметров вывода.


1-1092231104
Jaxtor
2004-08-11 17:31
2004.08.29
Исходники компонент и отладчик