Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Опять 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.092 c
14-1091886853
able
2004-08-07 17:54
2004.08.29
НАШЕствие


3-1091771457
Shtukos
2004-08-06 09:50
2004.08.29
Как побороть ошибку при исполнении запроса?


3-1091776227
Piero
2004-08-06 11:10
2004.08.29
Как добавить столбец в таблицу


3-1091785883
ГАГН
2004-08-06 13:51
2004.08.29
Удаление данных


14-1091915615
ikivio
2004-08-08 01:53
2004.08.29
Просто борьба с одиночеством.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский