Из кода, который вы показали, непонятно, зачем вам вообще нужен Tgo2
. Похоже, что следующее должно работать.
function Tgo = fcn(g,r,v,vw,rho_u,rho,a,cd,m)
Tgo = 0;
Real_tgo = [0 + 0i,0 + 0i,0 + 0i,0 + 0i];
more lines for polynomial...
rr = roots(poly);
for k = 1:4
if abs(imag(rr(k))) < 0.001
Real_tgo(k) = rr(k);
else
Real_tgo(k) = 0;
end
end
Tgo = max(real((Real_tgo));
Ни один из предоставленных ответов не помог мне решить мою проблему, но я сам нашел ответ. Вот оно.
Использование SetWindowsHookEx ()
с WH_KEYBOARD_LL
было правильным подходом. Однако другие параметры для SetWindowsHookEx ()
не интуитивны:
dwThreadId
, должен быть равен 0. hMod
, должен указывать на некоторую DLL. я использовал
User32
, который является DLL, которая всегда загружается и используется всеми
процессы с графическим интерфейсом. Я получил эту идею из поста CodeProject об этом . Таким образом, код выглядит примерно так:
instance = LoadLibrary("User32");
hhook = SetWindowsHookEx(WH_KEYBOARD_LL, hookFunction, instance, 0);
В документации не указан второй-последний параметр. В нем говорится:
Параметр hMod должен быть установлен в NULL [...], если процедура подключения находится в коде, связанном с текущим процессом.
Это не означает, что это применимо только к некоторым типам подключений , но не для WH_KEYBOARD_LL
и WH_MOUSE_LL
.
Необходимо будет использовать SetWindowsHookEx (). Существует только два типа рычагов, которые можно реализовать на управляемом языке, WH_KEYBOARD_LL и WH_MOUSE_LL. Все другие рычаги требуют DLL, который может быть введен в другой процесс. Управляемый DLLs не может быть введен, CLR не может быть инициализирован.
Это сообщение в блоге имеет функциональный пример.
При использовании техники в сообщении, на которое ссылается nobugz необходимо будет удостовериться, что делегат не добирается, собрал "мусор", например, при помощи GC.KeepAlive (_proc) при установке рычага, иначе после неопределенного периода рычаг прекратит работать, когда делегат получит GCed.
Установите взгляд рычага CBT здесь http://www.codeproject.com/KB/DLL/keyboardhook.aspx