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

Вниз

Taskbar   Найти похожие ветки 

 
Геральт   (2002-03-07 18:58) [0]

Тема: Хочется создать свой taskbar...
Внизу находится кусок кода, где создаётся hook, все бы ни чего, вот
только в результате hook убивает почему то все окна, создаваемые при
запущенной проге, они кричат об ошибке и
ломаются...

Вот кусок "рабочего" кода:
//################################################################################
HookHandle: hHook;

implementation

{$R *.DFM}
function ShellProc(Code: integer; WParam: word; LParam: Longint):
Longint; stdcall;
var
key: integer;
begin
if Code >= 0 then begin
result := 0;
case code of
HSHELL_WINDOWCREATED: form1.Memo1.Lines.Append("Создано окно:
"+inttostr(wparam));
end;
end else
CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.FormStyle := fsStayOnTop;
HookHandle := SetWindowsHookEx(WH_SHELL, @ShellProc, HInstance,
0);
end;
//####################################################################################


Как я понял, моя процедура просто убивает сообщение, не давая ему
идти дальше в систему. Следовательно у меня вопрос:

А как сделать так, чтобы сообщения были эээ read-only, то есть моя
программа их ловила и с миром отпускала? :)

Помогите пожалуйста...

Заранее благодарен...


 
cdaDmitriy ©   (2002-03-07 19:31) [1]

function MyHookProc(nCode: Integer; iWPARAM: wParam; iLPARAM: lParam): LResult; stdcall;
const AltMask = $20000000; var MyiWPARAM,Num:integer; Pass:Boolean;
begin
MyiWPARAM:=0; result:=0;
if nCode >= 0 then if rHookRec^.MainWindow <> 0 then Begin
if iLPARAM and AltMask<>0 then MyiWPARAM:=MyiWPARAM+MyAlt;
if GetKeyState(VK_CONTROL)<0 then MyiWPARAM:=MyiWPARAM+MyCtrl;
if GetKeyState(VK_SHIFT)<0 then MyiWPARAM:=MyiWPARAM+MyShift;
MyiWPARAM:=MyiWPARAM+iWPARAM; result:=0;
Num:=-1; Pass:=True; GetStartProg(MyiWPARAM,Num,Pass);
SendMessage(rHookRec^.MainWindow,MyKey,MyiWPARAM,Num);
IF (Num>-1) Then if not Pass Then result:=100;
IF (Num<=-1) and (MyiWPARAM=49235) Then Begin { Ctrl +Alt + S }
SendMessage(rHookRec^.MainWindow,MyKey1,2,Num);
end;
end else begin
result :=CallNextHookEx(rHookRec^.HookID, nCode, iwParam, ilParam);
end;


 
Raptor ©   (2002-03-07 20:57) [2]

Так.
Вопервых желательно сделать этот хук глобальным и поместить его в ДЛЛ.
Вовторых почему у тебя написано
else result :=CallNextHookEx(rHookRec^.HookID, nCode, iwParam, ilParam);
Не должно быть никаких else. Ты обязательно должен вызывать следующий хук в цепочке вне зависимости от значения параметра nCode.



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

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

Наверх




Память: 0.47 MB
Время: 0.013 c
4-26285
JAndrey
2002-02-28 07:12
2002.05.09
Где найти описание USER32.dll, Kernel32.dll ..........


3-26020
Voldemar
2002-04-14 05:42
2002.05.09
Обращение к записи по номеру


14-26274
drpass
2002-04-01 05:08
2002.05.09
Новые возможности Delphi6


1-26148
SerKom
2002-04-24 23:41
2002.05.09
сервис NT


6-26219
ATLANTIDO
2002-02-24 16:17
2002.05.09
Удаленное администрирование