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

Вниз

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

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

Наверх





Память: 0.44 MB
Время: 0.006 c
1-26059
rank
2002-04-25 02:07
2002.05.09
Как удалить строку из середины Stringgrid а?


14-26248
LazorenkoX
2002-04-01 21:58
2002.05.09
Win 2K


4-26298
Blacki
2002-03-06 23:14
2002.05.09
проблема с WindowProc


14-26225
SPeller
2002-04-01 11:31
2002.05.09
С праздником, дорогие товарищи !!!


1-26168
apih
2002-04-25 12:20
2002.05.09
MediaPlayer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский