Есть ли способ, чтобы захватить кнопку посыла на Windows Mobile и это набрать определенный номер?

голоса
1

У меня есть приложение Windows Mobile, используя компактную структуру (NetCF), который я хотел бы ответить на кого-то нажатии клавиши посыла и иметь телефон набрать номер, выбранный в моем приложении. Есть ли способ, используя компактную структуру ловушку кнопку посыла? Я посмотрел на несколько статей о захвате ключей, но я не нашел тот, который включает в себя ключ «Отправить».

Обновление :

Я нашел статью, описывающую SetWindowsHookEx как недокументированные API на Windows Mobile. Если это так, то я действительно не хочу, чтобы использовать его.

SetWindowsHookEx на Windows Mobile

После выполнения большего количества поиска я обнаружил, что ключ «Отправить» называется ключ «Talk» в Windows Mobile жаргон. Затем я нашел сообщение в блоге об использовании сообщения SHCMBM_OVERRIDEKEY сигнализировать ОСА, чтобы отправить мое приложение сообщение WM_HOTKEY, когда пользователь нажимает клавишу разговора.

Джейсон Фуллер Блог пост об использовании кнопки Talk

Сообщение в блоге и в документации он указывает, кажется, как именно то, что я ищу. Я не могу найти рабочий пример, и я нахожу много людей, которые не в состоянии заставить его работать. Это также выглядит как VK_TTALK не поддерживается в смартфонах. Я хотел бы услышать от кого-то, что на самом деле имеет эту работу на обоих смартфонах и PocketPC телефонов.

Задан 09/12/2008 в 22:57
источник пользователем
На других языках...                            


3 ответов

голоса
2

Я могу подтвердить, что использование SHCMBM_OVERRIDEKEY работает как на PPC и SP устройств. Я испытал это на WM5 PPC, WM5, WM6 SP PPC, WM6 SP. Я не пробовал WM6.1 или WM6.5, но пока я добрейшей из предположить, что они работают так WM6 работает.

Также вам может понадобиться поддержка DTMF во время вызова, а?

Так как я писал DLL LAP я следовал на следующей странице , которые могут оказаться полезными: вопросы реализации LAP

Эти примеры в C, так что вы должны будете переводить их в C #.

Для настройки захвата ключа «ток» для конкретного окна вам нужно сделать следующее:

SendMessage(SHFindMenuBar(window_hwnd), 
            SHCMBM_OVERRIDEKEY, 
            VK_TTALK, 
            MAKELPARAM((SHMBOF_NODEFAULT|SHMBOF_NOTIFY), (SHMBOF_NODEFAULT|SHMBOF_NOTIFY));

Вы можете включить / выключить ловушку в любое время. Чтобы включить ловушку с нее легко, а также:

SendMessage(SHFindMenuBar(window_hwnd), 
            SHCMBM_OVERRIDEKEY, 
            VK_TTALK, 
            MAKELPARAM(0, (SHMBOF_NODEFAULT|SHMBOF_NOTIFY));

Для того, чтобы определить, когда клавиша «Talk» нажимается вам нужно ловушку оконное сообщение WM_HOTKEY на оконную процедуру:

case WM_HOTKEY:
    switch(HIWORD(lParam))
    {
    case VK_TTALK:
        // make ph call
        break;
    }
    return TRUE;

Для того, чтобы сделать телефонный звонок вам нужно использовать «PhoneMakeCall» API:

#include <phone.h>

void MakePhoneCall(const wchar_t* number)
{
    PHONEMAKECALLINFO call;
    memset(&call, 0x0, sizeof(PHONEMAKECALLINFO));
    call.cbSize = sizeof(PHONEMAKECALLINFO);
    call.dwFlags = PMCF_DEFAULT;
    call.pszDestAddress = number;
    PhoneMakeCall(&call);
}

Для поддержки DTMF во время телефонного звонка вам необходимо отслеживать телефонный звонок , используя SNAPI (я считаю , что есть C # библиотеки , чтобы помочь вам там SystemProperty ).

Настройка после начала вызова:

  #include <snapi.h>
  RegistryNotifyWindow(SN_PHONEACTIVECALLCOUNT_ROOT, SN_PHONEACTIVECALLCOUNT_PATH, SN_PHONEACTIVECALLCOUNT_VALUE, window_hwnd, callback_window_msg_number /*e.g. WM_APP */, 0, NULL, &phone_call_notify_handle);

Вы будете отозваны с сообщением окна вы поставляете, когда изменяется количество вызовов. Вы должны прочитать реестр и проверить, что граф вызовов падает до нуля. Если оно вам нужно, чтобы закрыть SNAPI ручку:

RegistryCloseNotification(phone_call_notify_handle);

В то время как в вызове отправки сообщения приложению cprog с клавишей, которая была нажата пользователем:

#define WM_CPROG_SEND_VKEY_DTMF (WM_APP+3) // Sends the DTMF tone(s) through to the current call (converting from VKEY to DTMF chars)

  BOOL PhoneSendDTMF(UINT uvKey)
  {
    BOOL bRet = FALSE;
    static HWND s_hwndCProg = NULL;
    TCHAR chDTMF = MapVKeyToChar(uvKey);

    // Attempt to find the cprog window (MSCprog).
    // Try to keep this window handle cached.
    if(NULL == s_hwndCProg || !IsWindow(s_hwndCProg))
    {
      s_hwndCProg = FindWindow(TEXT("MSCprog"), NULL);
    }

    // Send WM_CPROG_SEND_VKEY_DTMF to the CProg window.
    if(NULL != s_hwndCProg)
    {
      bRet = BOOLIFY(PostMessage(s_hwndCProg,
                              WM_CPROG_SEND_VKEY_DTMF, (WPARAM)chDTMF, 0));
    }

    return bRet;
  }
Ответил 16/02/2009 в 20:57
источник пользователем

голоса
2

Вы можете поймать все ключи в Teh мирах (кроме CTRL + ALT + DEL на рабочий стол) через keyhook:

статическая ехЬегп IntPtr SetWindowsHookEx (Hooktype крюк, HOOKPROC обратного вызова, IntPtr hMod, UINT dwThreadId);

Вы можете использовать это (или один из других переопределениях) в CE через coredll.dll (вместо user32).

Однако это не в платформе .NET Compact Framework и требует P / Invoke. Лучшая радость с «свободным» ключом pressery является Form.KeyPreview = истина; и что только дает вам ключи, получить удар, когда форма сосредоточенным и иногда ничего при работе с устройствами, имеющими специальные клавиши (возможно, таких, как ваш «отправить» ключ, так как у меня была похожая ситуация с ключом «Application1» О Intermec блок некоторое время назад).

Существует, однако , одна фантастическая альтернатива, я считаю , OpenNETCF либо уже делает или будет очень скоро свернуть с keyhook (через вызов WinAPI выше) обнажая восхитительное управляемую обертку. Радость!

Если это еще не готово есть обилие статей и коды пиная вокруг , которые демонстрируют , как использовать это с помощью Google так и в худшем случае , вы должны быть в состоянии найти что - то , если вы выполняете поиск , как это . Может быть что - то вроде этого ?

Ответил 09/12/2008 в 23:10
источник пользователем

голоса
0

Есть некоторые особенности рассуждения позади не используя назначенный PhoneMakeCall ? Он доступен для смартфонов и до Windows Mobile 6 Professional.

Edit: я неправильно вопрос немного. Теперь я вижу , что вы хотите , чтобы ловушка отправляющего события. Я позволяю мой ответ остаться, хотя, для справки.

Ответил 13/02/2009 в 09:30
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more