![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
почему ошибка [D7, WinXP]
Leeechhhh © (2005-03-06 10:03:00)вот кусок кода из dll клавиатурного шпиона,
HookHandle := SetWindowsHookEx(wh_Keyboard, Key_Hook,
hInstance, 0);
на этом месте почемуто постоянно при компиляции выдаёт ошибку
[Error] sendkey.dpr(58): Left side cannot be assigned to
[Error] sendkey.dpr(58): Incompatible types: 'Calling conventions differ'
помогите исправить
GuAV (2005-03-06 22:01:00) [1]{инициализация DLL пpи загpузке ее в память} выполнится при загрузке этой DLL каждым из процессов.
Вынеси SetWindowsHookEx и UnhookWindowsHookEx в отдельный экспортированные процедуры.
Leeechhhh (2005-03-06 21:37:00) [2]всё, с ошибкой в длл разобрался. Терь приложение глючит млин, вроде всё нормально, а при запуске выдаёт ошибку инициализации приложения
GuAV (2005-03-06 21:28:00) [3]И результат, и модель вызова stdcall ?
Leeechhhh (2005-03-06 21:05:00) [4]посмотрел, там в статейке, было все wparam,lparam и code integer'ными , сделал не помогло
GuAV (2005-03-06 20:14:00) [5]Вторая ошибка из-за того что неверно описана Key_Hook
> function Key_Hook(Code: integer; wParam: word; lParam:
> Longint): Longint;
см. объявление SetWindowsHookEx
Leeechhhh (2005-03-06 19:58:00) [6]яж, нечё не шарю в опредах, я вставил хэндл в глобальную переменную, первая ошибка перестала вылазить, а вторая нет. Подскажи, а, ато млин попросил пацан очень. А с инета готовый шпион не подходит ни один
GuAV (2005-03-06 19:57:00) [7]
> {инициализация DLL пpи загpузке ее в память}
в виртуальную память процессов текущего дестопа... угадай сколько раз это произойдёт...
GuAV (2005-03-06 19:54:00) [8]Leeechhhh (06.03.05 19:40) [6]
кстати, куда луче подставить объявление хэндла?
В поле структуры, которая разделяется между всеми экземплярами DLL.
Leeechhhh (2005-03-06 19:40:00) [9]понятно, а вторая ошибка всё равно вылазит,
кстати, куда луче подставить объявление хэндла?
Antonn (2005-03-06 18:56:00) [10]А вот и то. Дельфи наверно выше 5 версии. В пятерке такие вещи прокатывали.
Leeechhhh (2005-03-06 18:51:00) [11]ну и чё
Alex_Petr (2005-03-06 18:47:00) [12]У тебя HookHandle - const
Leeechhhh (2005-03-06 18:34:00) [13]library SendKey;
uses
WinTypes, WinProcs, Messages;
const
{пользовательские сообщения}
wm_NextShow_Event = wm_User + 133;
wm_PrevShow_Event = wm_User + 134;
{handle для ловушки}
HookHandle: hHook = 0;
var
SaveExitProc : Pointer;
{собственно ловушка}
function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint;
export;
var
H: HWND;
begin
{если Code>=0, то ловушка может обpаботать событие}
if Code >= 0 then
begin
{это те клавиши?}
if ((wParam = VK_ADD)or(wParam = VK_SUBTRACT)) and (lParam and $40000000 =
0)
then begin
{ищем окно по имени класса и по заголовку}
H := FindWindow('TForm1', 'XXX');
{посылаем сообщение}
if wParam = VK_ADD then
SendMessage(H, wm_NextShow_Event, 0, 0)
else
SendMessage(H, wm_PrevShow_Event, 0, 0);
end;
{если 0, то система должна дальше обpаботать это событие}
{если 1 - нет}
Result:=0;
end
else
{если Code<0, то нужно вызвать следующую ловушку}
Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;
{пpи выгpузке DLL надо снять ловушку}
procedure LocalExitProc; far;
begin
if HookHandle<>0 then
begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;
{инициализация DLL пpи загpузке ее в память}
begin
{устанавливаем ловушку}
HookHandle := SetWindowsHookEx(wh_Keyboard, Key_Hook,
hInstance, 0);
if HookHandle = 0 then
MessageBox(0, 'Unable to set hook!', 'Error', mb_Ok)
else begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;
end.
MU (2005-03-06 11:27:00) [14]где и как объявлен HookHandle