Existuje způsob, jak zachytit klávesy pro odeslání na Windows Mobile a nechte jej vytočit určité telefonní číslo?

hlasů
1

Mám aplikaci Windows Mobile pomocí kompaktního rámce (NETCF), které bych chtěl reagovat na někoho, stisknutím tlačítka Odeslat a mají telefon vytáčet číslo vybrané v mé žádosti. Existuje způsob, jak pomocí kompaktního rámce do pasti klíč poslat? Díval jsem se na několik článků o zachycení klíče, ale nenašel jsem ten, který obsahuje tlačítko „Odeslat“.

aktualizace :

jsem našel článek, který popisuje SetWindowsHookEx jako nezdokumentované API na Windows Mobile. Pokud je to ten případ, pak jsem opravdu nechci, aby ji používat.

SetWindowsHookEx na Windows Mobile

Poté, co dělá více hledání jsem zjistil, že tlačítko „Odeslat“ se nazývá „Talk“ klíčem Windows Mobile žargon. Pak jsem našel blogu o použití SHCMBM_OVERRIDEKEY zprávu signál OS poslat moje app je WM_HOTKEY zprávu, když uživatel stiskne tlačítko vyzvednutí.

Jason Fuller Blog příspěvek o použití tlačítka Talk

Blog příspěvek a dokumentace odkazuje na jevit jako přesně to, co jsem hledal. Jsem schopen najít pracovní příklad, a najdu spoustu lidí, kteří nejsou schopni zajistit, aby fungovala. To také vypadá, VK_TTALK není podporována v chytrých telefonech. Rád bych slyšet od někoho, kdo má vlastně tuto práci na obou smartphony a PocketPC telefony.

Položena 09/12/2008 v 22:57
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

Můžete chytit všechny klíče v teh světů (kromě CTRL + ALT + DEL na ploše) přes keyhook:

statický extern IntPtr SetWindowsHookEx (HookType hák, HookProc zpětné volání, IntPtr hMod, uint dwThreadId);

Můžete použít tento (nebo jeden z dalších ovládáním) ve střední Evropě přes coredll.dll (namísto User32).

To však není v .NET Compact Framework a vyžaduje P / Invoke. Nejlepší radost s „free“ klíčový pressery je Form.KeyPreview = true; a který vám jen dává klíče, který mohl zasáhnout, když je forma soustředěný a někdy nic, když jednání s přístroji, které mají speciální klávesy (případně jako vaše klávesy „Send“, jak jsem měl podobnou situaci s tlačítkem „Application1“ na Intermec jednotka chvíli zpět).

Existuje však jedna fantastická alternativu, věřím OpenNETCF buď již má nebo bude mít velmi brzy vrátit s keyhook (přes WinAPI hovoru výše) odhalil nádherné spravovaná obálka. Radost!

Pokud to není připraven ještě existuje spousta článků a kód kopal, které ukazují, jak používat to přes Google, takže v nejhorším případě byste měli být schopni najít něco, pokud budete provádět vyhledávání, jako je tento . Možná, že něco jako tohle ?

Odpovězeno 09/12/2008 v 23:10
zdroj uživatelem

hlasů
0

Je tam nějaký konkrétní Důvodem nepoužíváte určený PhoneMakeCall ? Je k dispozici pro Smartphone a až na Windows Mobile 6 Professional.

Edit: jsem špatně přečetl otázku trochu. Teď vidím, že jste chtěli past Odeslat událost. Nechám moje odpověď zůstat, i když pro referenci.

Odpovězeno 13/02/2009 v 09:30
zdroj uživatelem

hlasů
2

Mohu potvrdit, že používání SHCMBM_OVERRIDEKEY pracuje na obou PPC a SP zařízení. Testoval jsem to na WM5 PPC, WM5 SP, WM6 PPC, WM6 SP. Nezkoušel jsem WM6.1 nebo WM6.5, ale zatím jsem tak trochu-of předpokládají, že oni pracují od WM6 funguje.

Také možná budete muset podporovat DTMF během hovoru, stejně?

Protože jsem psal LAP dll jsem sledoval na následující stránku, která může hodit: LAP otázky týkající se provádění

Tyto příklady jsou v jazyce C, takže budete muset převést do C #.

Pro nastavení zachycení tlačítka „talk“ pro konkrétního okna je potřeba udělat:

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

Můžete zapnout / vypnout pasti kdykoliv. Otočit past mimo něj snadné, stejně:

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

Chcete-li zjistit, kdy je stisknuto tlačítko na ‚mluvit‘ je třeba do pasti WM_HOTKEY okno zprávy na okenní proc:

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

Chcete-li uskutečnit telefonní hovor budete muset použít „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);
}

Pro podporu DTMF během telefonního hovoru budete muset sledovat telefonního hovoru pomocí SNAPI (věřím, že je C # knihovny, aby vám pomohl ven SystemProperty ).

Instalační program po spuštění hovoru:

  #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);

Budete zavolal s oknem zprávy, které jí poskytnete při počtu hovorů změny. Musíte přečíst registru a zkontrolujte, zda je počet volání klesne na nulu. Pokud tomu tak je budete muset zavřít SNAPI rukojeť:

RegistryCloseNotification(phone_call_notify_handle);

Zatímco ve výzvě poslat zprávu na žádost o cprog s klíčem, který byl pod tlakem ze strany uživatele:

#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;
  }
Odpovězeno 16/02/2009 v 20:57
zdroj uživatelem

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