[CF.Skills]Windows Mobile如何编程实现免提功能

摘要:本文阐述了如何在Windows mobile的设备上使用托管代码在来电时触发扬声器,间接实现免提的功能
Keywords
Windows Mobile,.NET CompactFramework,Speaker,keybd_event,C#

相关文章
http://www.cnblogs.com/fox23/archive/2008/02/15/phoneincoming.html
http://www.cnblogs.com/fox23/archive/2008/03/12/phonestate1.html

前提
你的WM设备必须支持扬声器,模拟器自然不行

首先,需要导入用于发送按键消息的本地函数
    class NativeHelper
    
{
        
private const int KEYEVENTF_KEYUP = 0x0002;
        [DllImport(
"coredll.dll")]
        
private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
        
/// <summary>
        
/// 模拟按键触发扬声器
        
/// </summary>

        public static void TriggleSpeaker()
        
{
            keybd_event((
byte)Keys.F16, 000);
            Thread.Sleep(
500);
            keybd_event((
byte)Keys.F16, 0, KEYEVENTF_KEYUP, 0);
        }

        
/// <summary>
        
/// 模拟按键接电话
        
/// </summary>

        public static void AcceptCall()
        
{
            keybd_event((
byte)Keys.F3, 000);
            Thread.Sleep(
500);
            keybd_event((
byte)Keys.F3, 0, KEYEVENTF_KEYUP, 0);
        }

    }

调用的时候:
            SystemState phonestate = new SystemState(SystemProperty.PhoneIncomingCall);
            phonestate.Changed 
+= new ChangeEventHandler(phonestate_Changed);


        
void phonestate_Changed(object sender, ChangeEventArgs args)
        
{
            NativeHelper.AcceptCall();
            NativeHelper.TriggleSpeaker();
        }

论坛上也有相关问题,欢迎来做进一步的讨论:
http://forums.microsoft.com/china/ShowPost.aspx?PostID=3210021&SiteID=15
http://www.winbile.net/bbs/forums/threads/1036681.aspx

Enjoy it!

©Freesc Huang
  黄季冬<fox23>@HUST
  2008.04.27


posted on 2008-04-27 12:26  J.D Huang  阅读(3462)  评论(6编辑  收藏  举报