Главная страница
    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.45 MB
Время: 0.006 c
1-26094
Reticent
2002-04-26 15:49
2002.05.09
record !?


1-26065
VS2001
2002-04-18 18:15
2002.05.09
Как высчитать интервал прошедшего времени в минутах


6-26221
m0biUs
2002-02-25 00:47
2002.05.09
Авторизация на FTP сервере


14-26228
-=CrazyFish=-
2002-04-01 10:53
2002.05.09
color


14-26252
vopros
2002-04-02 11:08
2002.05.09
Как думать и работать при температуре >38 гр тела





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