locked
Desabilitar evento da tecla end call (botão vermelho) pressionada RRS feed

  • Pergunta

  • Alguem saberia como faço para desabilitar o evento de pressionar do botão vermelho?

    Já consegui desabilitar todas as teclas com as funções UnregisterFunc1 e RegisterHotKey inclusive quando a tecla end call é 'apertada', mas quando está é pressionada o evento consegue passar.

    Estou desenvolvendo uma aplicação para limitar o acesso as funcionalidades do celular deixando somente a aplicação que será iniciada junto com Windows Mobile 6.

    Estou usando um HTC Touch.

    • Editado Ruddy Paz sexta-feira, 14 de maio de 2010 18:55
    terça-feira, 4 de maio de 2010 18:38

Todas as Respostas

  • Eu tenho o mesmo problema. Como vc consegue desabilitar as teclas usando o RegisterHotKey?
    sexta-feira, 14 de maio de 2010 18:40
  • using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.WindowsCE.Forms;
    using System.Windows.Forms;

    namespace NAMESPACE
    {
        class InternalMessageWindow : MessageWindow
        {
            public const int WM_HOTKEY = 0x0312;

            NAMESPACE referedForm;

            public InternalMessageWindow(NAMESPACE referedForm)
            {
                this.referedForm = referedForm;
            }

            protected override void WndProc(ref Message msg)
            {
                switch (msg.Msg)
                {
                    case WM_HOTKEY:
                        return;
                }
            }

        }
    }

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.WindowsCE.Forms;
    using System.Diagnostics;
    using System.Threading;
    using Microsoft.WindowsMobile.Status;

    namespace NAMESPACE
    {
        public partial class NAMESPACE : Form
        {
            private InternalMessageWindow messageWindow;
            
            public NAMESPACE()
            {
                InitializeComponent();

                messageWindow = new InternalMessageWindow(this);
                Win32.DeactivateUI(messageWindow.Hwnd);

            }

        }
    }


    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Win32;
    using System.Runtime.InteropServices;

    namespace NAMESPACE
    {
        class Win32
        {
            [DllImport("coredll.dll", SetLastError = true)]
            public static extern bool RegisterHotKey(
                                            IntPtr hWnd, // handle to window
                                            int id, // hot key identifier
                                            KeyModifiers Modifiers, // key-modifier options
                                            int key //virtual-key code
                                      );
            [DllImport("coredll.dll")]
            private static extern bool UnregisterFunc1(KeyModifiers modifiers, int keyID);

            [DllImport("coredll.dll", SetLastError = true)]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

            [DllImport("coredll.dll")]
            private static extern bool EnableWindow(IntPtr HWnd, bool Enabled);

            [DllImport("coredll.dll", CharSet = CharSet.Auto)]
            private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

            [DllImport("coredll.dll", SetLastError = true)]
            public static extern bool AllKeys(bool bAllKeys);
              
            public enum NotificationEvent
            {
                None = 0,
                TimeChange = 1,
                Wakeup = 11,
                TimeZoneChange = 12,
                TZChange = TimeZoneChange
            }

            public enum KeyModifiers
            {
                None = 0,
                Alt = 1,
                Control = 2,
                Shift = 4,
                Windows = 8,
                Modkeyup = 0x2001,
            }
            
            private const int SW_HIDE = 0x00;

            private const int SW_SHOW = 0x0001;

            public const int VK_TTALK = 0x72;

            public const int VK_TEND = 0x73;

            public static void ShowTaskBar()
            {
                IntPtr hTaskBar = FindWindow("HHTaskBar", null);
                ShowWindow(hTaskBar, SW_SHOW);
            }

            public static void HideTaskBar()
            {
                IntPtr hTaskBar = FindWindow("HHTaskBar", null);
                ShowWindow(hTaskBar, SW_HIDE);
            }

            public static void DeactivateUI(IntPtr hWnd)
            {

                // deactivate the SIP button
                IntPtr hSip = FindWindow("MS_SIPBUTTON", "MS_SIPBUTTON");
                //EnableWindow(hSip, false);
                //EnableWindow(hSip, true);

                // deactivate the SIP button
                IntPtr hTaskBar = FindWindow("HHTaskBar", null);
                ShowWindow(hTaskBar, SW_HIDE);
                //ShowWindow(hTaskBar, SW_SHOW);
                EnableWindow(hTaskBar, false);
                //EnableWindow(hTaskBar, true);
                AllKeys(true);

                // deactivate the hardware keys
                for (Int32 iCounter = 193; iCounter <= 207; iCounter++)
                {
                    UnregisterFunc1(KeyModifiers.Windows, iCounter);
                    RegisterHotKey(hWnd, iCounter, KeyModifiers.Windows, iCounter);
                }

                UnregisterFunc1(KeyModifiers.None, VK_TTALK);
                RegisterHotKey(hWnd, VK_TTALK, KeyModifiers.None, VK_TTALK); //VK_TTALK

                UnregisterFunc1(KeyModifiers.None, VK_TEND); //VK_TEND
                RegisterHotKey(hWnd, VK_TEND, KeyModifiers.None, VK_TEND);

                UnregisterFunc1(KeyModifiers.None, 0x75);
                RegisterHotKey(hWnd, 0x75, KeyModifiers.None, 0x75); //VK_TVOLUMEUP

                UnregisterFunc1(KeyModifiers.None, 0x76); //VK_TVOLUMEDOWN
                RegisterHotKey(hWnd, 0x76, KeyModifiers.None, 0x76);

                UnregisterFunc1(KeyModifiers.None, VK_TPOWER); //VK_TPOWER
                RegisterHotKey(hWnd, VK_TPOWER, KeyModifiers.None, VK_TPOWER);

            }

            public static void ActivateUI(IntPtr hWnd)
            {
                // deactivate the SIP button
                IntPtr hSip = FindWindow("MS_SIPBUTTON", "MS_SIPBUTTON");
                //EnableWindow(hSip, false);
                //EnableWindow(hSip, true);

                // deactivate the SIP button
                IntPtr hTaskBar = FindWindow("HHTaskBar", null);
                //ShowWindow(hTaskBar, SW_HIDE);
                ShowWindow(hTaskBar, SW_SHOW);
                //EnableWindow(hTaskBar, false);
                EnableWindow(hTaskBar, true);
                AllKeys(false);
                // deactivate the hardware keys
                //for (Int32 iCounter = 193; iCounter <= 207; iCounter++)
                //{
                //    UnregisterFunc1(KeyModifiers.Windows, iCounter);
                //}

                UnregisterFunc1(KeyModifiers.None, VK_TTALK);
                //RegisterHotKey(hWnd, VK_TTALK, KeyModifiers.None, VK_TTALK); //VK_TTALK

                UnregisterFunc1(KeyModifiers.None, VK_TEND); //VK_TEND
                //RegisterHotKey(hWnd, VK_TEND, KeyModifiers.None, VK_TEND);

                UnregisterFunc1(KeyModifiers.None, 0x75); //VK_TVOLUMEUP

                UnregisterFunc1(KeyModifiers.None, 0x76); //VK_TVOLUMEDOWN

            }

        }
    }

    O método AllKeys(false); desabilita todas as keys mas somente na aplicação que foi chamada, ou seja, caso queira chamar outra aplicação as keys voltam a funcionar.

    Não conseguir resolver o problema do 'pressionar' tecla end call, caso descubra poste aqui =D.

    Espero ter ajudado. Abração.
    sexta-feira, 14 de maio de 2010 18:53
  • Quando eu pressiono a tecla aqui no meu, a tela escurece, mas quando eu aperto novamente ela volta pra aplicação.

    Eu vou continuar pesquisando aqui, qualquer coisa eu te dou um retorno.

    O código ajudou muito amigo, valeu mesmo!

    abraçao!

    sexta-feira, 14 de maio de 2010 19:55
  • Ruddy, estou pesquisando também essa possibilidade de desabilitar o botão vermelho, caso consiga, te aviso. Valeu pelo código.

     

    Qualquer coisa: valdir.df@gmail.com

    quinta-feira, 10 de junho de 2010 14:58
  • Acabei indo para outro projeto e não terminei a pesquisa sobre o assunto.

    Mais se você conseguir achar a solução posta mesmo cara.

    Email de contato: ruddypaz@hotmail.com

    Abraço.

    sexta-feira, 11 de junho de 2010 03:00