У меня есть мобильное приложение для Windows, которое выглядит так:
class Program
{
static void Main(string[] args)
{
RunHook runHook = new RunHook();
}
}
class RunHook
{
private HookKeys hook;
public RunHook()
{
hook = new HookKeys();
hook.HookEvent += EventForHook;
}
private void EventForHook(HookEventArgs e, KeyBoardInfo keyBoardInfo,
ref Boolean handled)
{
if ((keyBoardInfo.scanCode == 4) && (keyBoardInfo.vkCode == 114))
handled = true;
}
}
Он создаст крючок на клавиатуре (я знаю, что некоторые недовольны). Моя проблема в том, что мне нужен метод Main, чтобы он никогда не возвращался. Это будет работать на устройствах, принадлежащих моей компании, и мы используем это, чтобы отключить аппаратные ключи телефона.
Кажется, это должно быть просто, но я застрял на нем.
В обычном .NET я бы просто позвонил Console.Readline()
, но это не работает на Windows Mobile Compact Framework. Я также пробовал Thread.Sleep(0)
, но он тоже не работает.
Спасибо за любую обратную связь.
Thread.Sleep(0)
спит для нулевого миллисекунды.
Вероятно, вы хотите Thread.Sleep(Timeout.Infinite)
.
Вы также можете подумать о создании EventWaitHandle
:
class Program
{
static public ManualResetEvent StopMain;
static void Main(string[] args)
{
StopMain = new ManualResetEvent(false);
RunHook runHook = new RunHook();
StopMain.WaitOne(); // waits until signalled
}
}
Затем, если вы когда-либо были готовы выйти из Main(), вы могли бы позвонить (из другого потока):
Program.StopMain.Set();
не уверен, что это поможет, но с помощью собственного кода youd call
LRESULT CallNextHookEx(
HHOOK hhk,
int nCode,
WPARAM wParam,
LPARAM lParam
);
в вашем обработчике для выполнения поведения обработки по умолчанию, havent проверил это, но я думаю, что если вы не назовете следующего обработчика в цепочке, ничего не произойдет
Дополнительная информация: http://msdn.microsoft.com/en-us/library/ms644974%28VS.85%29.aspx , ссылка содержит некоторые примеры управляемых кодов, которые могут помочь
HTH
Если он будет запущен на устройствах, принадлежащих вашей компании, то почему бы не запустить небольшую оконную программу в фоновом режиме. Я имею в виду просто скрыть окно. Пусть он сидит в вашей панели задач. Нажмите на эту ссылку для получения дополнительной информации об использовании значка уведомлений в CF.