Gibt es eine Möglichkeit, die Sendetaste auf Windows Mobile zu erfassen und zu haben sie wählen eine bestimmte Anzahl?

stimmen
1

Ich habe eine Windows Mobile-Anwendung mit dem Compact Framework (NETCF), Ich mag würde, jemanden reagieren, um die Sendetaste drücken und haben das Telefon die Nummer in meiner Anwendung ausgewählt wählen. Gibt es eine Möglichkeit, den kompakten Rahmen zu stoppen die Send-Taste? Ich habe in mehreren Artikeln auf die Erfassung Schlüssel sah, aber ich habe nicht eine gefunden, die den „Send“ Schlüssel enthält.

Update :

Ich fand einen Artikel beschreibt SetWindowsHookEx als undokumentierte API auf Windows Mobile. Wenn dies der Fall ist, dann wirklich will ich nicht, es zu benutzen.

SetWindowsHookEx auf Windows Mobile

Nach mehr Such tun fand ich heraus, dass die „Send“ Taste des „Talk“ -Taste in Windows Mobile-Jargon genannt wird. Ich fand dann eine Blog-Post über die SHCMBM_OVERRIDEKEY Nachricht mit dem O zu signalisieren, meine app eine WM_HOTKEY Nachricht zu senden, wenn der Benutzer die Sprechtaste drückt.

Jason Fuller Blog-Post über die Sprechtaste

Die Blog-Post und die Dokumentation verweist er auf scheinen, wie genau das, was ich suche. Ich bin nicht in der Lage ein funktionierendes Beispiel zu finden, und das finde ich eine Menge Leute nicht in der Lage, damit es funktioniert. Es sieht auch wie VK_TTALK nicht in SmartPhones unterstützt. Ich würde gerne von jemandem zu hören, der tatsächlich diese Arbeit auf beiden Smartphones und PocketPC-Telefone hat.

Veröffentlicht am 09/12/2008 um 22:57
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
2

Ich kann bestätigen, dass SHCMBM_OVERRIDEKEY mit funktioniert sowohl PPC und SP-Geräten. Ich habe es auf WM5 PPC, WM5 SP, WM6 PPC, WM6 SP getestet. Ich habe nicht WM6.1 oder WM6.5 noch versucht, aber ich Art-of davon aus, dass sie arbeiten, da WM6 funktioniert.

Auch müssen Sie DTMF während des Gesprächs auch unterstützen?

Da ich eine LAP dll Schreiben folgte ich die folgende Seite , die Sie nützlich finden können: LAP Implementierungssaspekte

Diese Beispiele sind in C, so dass Sie sie in C # übersetzen müssen.

Zur Einrichtung Einfangen des „talk“ -Taste für ein bestimmtes Fenster müssen Sie tun:

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

Sie können Ein- / Ausschalten der Falle zu jeder Zeit. So schalten Sie die Trap-off es einfach wie gut:

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

Zu erkennen, wenn die Taste ‚Talk‘ gedrückt Sie die WM_HOTKEY Fenster Meldung auf dem Fenster proc zu stoppen müssen:

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

Um ein Telefon zu machen rufen Sie müssen die „PhoneMakeCall“ API verwenden:

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

Um DTMF während eines Telefons zu unterstützen rufen Sie müssen den Telefonanruf verfolgen mit SNAPI (ich glaube , es ist ein C # -Bibliothek , um Ihnen zu helfen , da draußen SystemProperty ).

Setup-Programm nach dem Aufruf starten:

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

Sie werden mit dem Fenster Nachricht, die Sie, wenn Sie die Anrufanzahl Änderungen liefern zurückgerufen. Sie müssen die Registrierung lesen und prüfen, ob der Anruf Zählung auf Null fällt. Ist dies der Fall müssen Sie den SNAPI Griff schließen:

RegistryCloseNotification(phone_call_notify_handle);

Während in dem Aufruf eine Nachricht an die cprog Anwendung mit dem Schlüssel senden, die vom Benutzer gedrückt wurde:

#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;
  }
Beantwortet am 16/02/2009 um 20:57
quelle vom benutzer

stimmen
2

Sie können alle Tasten in teh Welten (abgesehen von STRG + ALT + ENTF auf dem Desktop) über eine Keyhook fangen:

static extern IntPtr SetWindowsHookEx (HookType hook, HookProc Rückruf, IntPtr hMod, uint dwThreadId);

Sie können diese (oder eine der anderen überschreibt) in CE über coredll.dll verwenden (anstelle von user32).

Dies ist jedoch nicht in .NET Compact Framework und erfordert ein P / Invoke. Die beste Freude mit „frei“ Schlüssel pressery ist Form.KeyPreview = true; und das gibt Ihnen nur die Tasten, die getroffen werden, wenn die Form konzentriert und manchmal nichts, wenn sie mit Geräten tun hat, die Sondertasten haben (möglicherweise wie Ihre „senden“ drücken, wie ich eine ähnliche Situation mit „Application1“ -Taste auf einem Intermec hatte Einheit eine Weile zurück).

Es gibt jedoch eine wunderbare Alternative, glaube ich OpenNETCF entweder bereits tut oder sehr bald rollen mit einem Keyhook (über die WinAPI Anruf oben) einen schönen verwalteten Wrapper aussetzt. Freude!

Wenn das noch nicht fertig gibt es eine Fülle von Artikeln und Code herum zu treten , die zeigen , wie dies über Google verwenden , um im schlimmsten Fall sollten Sie in der Lage sein , etwas zu finden , wenn Sie eine Suche wie ausführen dies . Vielleicht so etwas wie dies ?

Beantwortet am 09/12/2008 um 23:10
quelle vom benutzer

stimmen
0

Gibt es eine besondere Begründung nicht die bezeichnete Verwendung PhoneMakeCall ? Es ist verfügbar für Smartphone und bis zu Windows Mobile 6 Professional.

Edit: Ich die Frage falsch verstanden etwas. Ich sehe jetzt , dass man wollte Falle das Ereignis senden. Ich lasse meine Antwort bleiben, aber als Referenz.

Beantwortet am 13/02/2009 um 09:30
quelle vom benutzer

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