windows mobile来电提示窗口修改

   private void loadIncoming()
        {
            SystemState state = new SystemState(SystemProperty.PhoneIncomingCallerNumber);
            state.Changed += new ChangeEventHandler(state_Changed);
        }
        IntPtr hwnd = new IntPtr();
        private void state_Changed(object sender, ChangeEventArgs args)
        {
            //查找到来电提示框窗口
            hwnd = FindWindow("Dialog", "电话 - 拨入");
            //如果值不为空则为来电号码
            if (args.NewValue != null)
            {
                if (hwnd != null)
                {
                    IntPtr h2 = GetWindow(hwnd, 5);
                    h2 = GetWindow(h2, 5);
                    IntPtr hChild = GetDlgItem(h2, 0x000059E2);
                    SetWindowText(hChild, "区域:中国深圳");//到时候可以做其他修改
                    hChild = GetDlgItem(h2, 0x00005A13);
                    SetWindowText(hChild, "号码" + args.NewValue.ToString());//重复显示来电号码
                    SetForegroundWindow(hwnd);

                    //如果是不想显示默认的来电提示窗口可以通过移动来电提示窗口到不可见区域
                    //MoveWindow(hwnd, 0, 470, 0, 0, false);
                }
            }
        }

        #region win API
        /// <summary>
        /// 根据窗口名字获得窗口句柄
        /// </summary>
        /// <param name="lpClassName"></param>
        /// <param name="lpWindowName"></param>
        /// <returns></returns>
        [DllImport("coredll.dll")]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        /// <summary>
        /// 移动窗口
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="X"></param>
        /// <param name="Y"></param>
        /// <param name="nWidth"></param>
        /// <param name="nHeight"></param>
        /// <param name="bRepaint"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll", SetLastError = true)]
        public static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);


        /// <summary>
        /// 获得窗口
        ///wFlag:
        ///WM_COMMAND = &H111
        ///GW_Child = 5
        ///GW_HWNDFIRST = 0
        ///GW_HWNDLAST = 1
        ///GW_HWNDNEXT = 2
        ///GW_HWNDPREV = 3
        ///GW_OWNER = 4
        /// </summary>
        /// <param name="hwnd"></param>
        /// <param name="wFlag"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern IntPtr GetWindow(IntPtr hwnd, int wFlag);

        /// <summary>
        /// 获得子窗口
        /// </summary>
        /// <param name="hWnd"></param>
        /// <param name="nIDDlgItem"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll", CharSet = CharSet.Auto)]
        public static extern IntPtr GetDlgItem(IntPtr hWnd, int nIDDlgItem);
        /// <summary>
        /// 设置最前面的窗口
        /// </summary>
        /// <param name="hWnd"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll", CharSet = CharSet.Auto)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);
        /// <summary>
        /// 设置对话框内容
        /// </summary>
        /// <param name="hDlg"></param>
        /// <param name="nIDDlgItem"></param>
        /// <param name="lpString"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll")]
        static extern bool SetDlgItemText(IntPtr hDlg, int nIDDlgItem, string lpString);
        /// <summary>
        /// 设置窗口内容
        /// </summary>
        /// <param name="hwnd"></param>
        /// <param name="lpString"></param>
        /// <returns></returns>
        [DllImport("Coredll.dll", SetLastError = true)]
        public static extern bool SetWindowText(IntPtr hwnd, String lpString);
        #endregion

 

原帖

http://bokee.shinylife.net/blog/article.asp?id=1015

posted on 2010-06-14 06:25  彭家大少爷  阅读(209)  评论(0)    收藏  举报

导航