Ответить на клавиатуру если не в фокусе? (C#, Vista)

Из кода, который вы показали, непонятно, зачем вам вообще нужен 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));
5
задан Mark Reed 26 April 2013 в 21:27
поделиться

4 ответа

Ни один из предоставленных ответов не помог мне решить мою проблему, но я сам нашел ответ. Вот оно.

Использование 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 .

5
ответ дан 18 December 2019 в 14:52
поделиться

Необходимо будет использовать SetWindowsHookEx (). Существует только два типа рычагов, которые можно реализовать на управляемом языке, WH_KEYBOARD_LL и WH_MOUSE_LL. Все другие рычаги требуют DLL, который может быть введен в другой процесс. Управляемый DLLs не может быть введен, CLR не может быть инициализирован.

Это сообщение в блоге имеет функциональный пример.

5
ответ дан 18 December 2019 в 14:52
поделиться

При использовании техники в сообщении, на которое ссылается nobugz необходимо будет удостовериться, что делегат не добирается, собрал "мусор", например, при помощи GC.KeepAlive (_proc) при установке рычага, иначе после неопределенного периода рычаг прекратит работать, когда делегат получит GCed.

2
ответ дан 18 December 2019 в 14:52
поделиться

Установите взгляд рычага CBT здесь http://www.codeproject.com/KB/DLL/keyboardhook.aspx

1
ответ дан 18 December 2019 в 14:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: