Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Внизпочему ошибка Найти похожие ветки
← →
Leeechhhh (2005-03-06 10:03) [0]вот кусок кода из 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"
помогите исправить
← →
MU © (2005-03-06 11:27) [1]где и как объявлен HookHandle
← →
Leeechhhh (2005-03-06 18:34) [2]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.
← →
Alex_Petr © (2005-03-06 18:47) [3]У тебя HookHandle - const
← →
Leeechhhh (2005-03-06 18:51) [4]ну и чё
← →
Antonn © (2005-03-06 18:56) [5]А вот и то. Дельфи наверно выше 5 версии. В пятерке такие вещи прокатывали.
← →
Leeechhhh (2005-03-06 19:40) [6]понятно, а вторая ошибка всё равно вылазит,
кстати, куда луче подставить объявление хэндла?
← →
GuAV © (2005-03-06 19:54) [7]Leeechhhh (06.03.05 19:40) [6]
кстати, куда луче подставить объявление хэндла?
В поле структуры, которая разделяется между всеми экземплярами DLL.
← →
GuAV © (2005-03-06 19:57) [8]
> {инициализация DLL пpи загpузке ее в память}
в виртуальную память процессов текущего дестопа... угадай сколько раз это произойдёт...
← →
Leeechhhh (2005-03-06 19:58) [9]яж, нечё не шарю в опредах, я вставил хэндл в глобальную переменную, первая ошибка перестала вылазить, а вторая нет. Подскажи, а, ато млин попросил пацан очень. А с инета готовый шпион не подходит ни один
← →
GuAV © (2005-03-06 20:14) [10]Вторая ошибка из-за того что неверно описана Key_Hook
> function Key_Hook(Code: integer; wParam: word; lParam:
> Longint): Longint;
см. объявление SetWindowsHookEx
← →
Leeechhhh (2005-03-06 21:05) [11]посмотрел, там в статейке, было все wparam,lparam и code integer"ными , сделал не помогло
← →
GuAV © (2005-03-06 21:28) [12]И результат, и модель вызова stdcall ?
← →
Leeechhhh (2005-03-06 21:37) [13]всё, с ошибкой в длл разобрался. Терь приложение глючит млин, вроде всё нормально, а при запуске выдаёт ошибку инициализации приложения
← →
GuAV © (2005-03-06 22:01) [14]{инициализация DLL пpи загpузке ее в память} выполнится при загрузке этой DLL каждым из процессов.
Вынеси SetWindowsHookEx и UnhookWindowsHookEx в отдельный экспортированные процедуры.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c