Главная страница
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.047 c
3-1090002748
Mister
2004-07-16 22:32
2004.08.29
1 или 2 млн. записей


14-1092138667
Sergey13
2004-08-10 15:51
2004.08.29
Книга Туркменбаши - смешно, ели б не так грустно


8-1086276830
Borealis
2004-06-03 19:33
2004.08.29
RIFF CDXA


1-1092669964
sergch
2004-08-16 19:26
2004.08.29
Как записать с помошью FileWrite текст из переменной?


1-1092464595
Андрей007
2004-08-14 10:23
2004.08.29
Помогите, пожалуйста, перевести кусок код с Си на Pascal.