Главная страница
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.022 c
7-26284
ray_wagner
2002-02-05 15:57
2002.05.09
Эмуляция активной деятельности компа :-)


3-26013
Mike S
2002-04-16 11:34
2002.05.09
Импорт в IB6


3-25984
AlanB
2002-04-15 13:58
2002.05.09
Проблема с запросом Update Nash_Doc set data IS NULL where data =


4-26288
AlexMey
2002-03-05 12:07
2002.05.09
Не подскажите с чего начать изучение Win API на Delphi?


1-26078
Невидимка
2002-04-26 13:03
2002.05.09
Вывод диалога и сохранение файла...