Главная страница
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.042 c
14-1092300019
SSSSS
2004-08-12 12:40
2004.08.29
Люди! Где взять лицензионную 5-ю Дельфу?


1-1092302653
GrayFace
2004-08-12 13:24
2004.08.29
Сравнение двух procedure of object


14-1091886853
able
2004-08-07 17:54
2004.08.29
НАШЕствие


1-1092137241
Pavelkq
2004-08-10 15:27
2004.08.29
Сравнение двух TStringList-ов


6-1088318929
SergP
2004-06-27 10:48
2004.08.29
TServerSocket. Как узнать порт?