Главная страница
    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.005 c
1-26048
Саша
2002-04-24 10:38
2002.05.09
добавить свойство к форме


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


3-25986
MagG0T
2002-04-13 16:52
2002.05.09
Автоматическое объявляние алиасов


1-26066
Akim2
2002-04-25 19:37
2002.05.09
Форма AlwaysTop


1-26125
ruslan_as
2002-04-24 10:07
2002.05.09
цикл





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