Отключение панели задач Windows Mobile, но включение камеры - PullRequest
0 голосов
/ 21 марта 2012

Я пишу приложение для Windows Mobile, которое отключает, которое скрывает и отключает панель задач Windows, тем самым предотвращая доступ пользователя к функциям Windows. Тем не менее, приложение должно иметь возможность делать фотографии, и именно здесь начинается проблема. Когда панель задач включена, другие кнопки на устройстве (Домой, Захватить фотографию, Вверх, Вниз и т. Д.) Также отключены. Мне почему-то нужно отправить сообщение, которое включает кнопку «Захватить фотографию», но все мои попытки оказались бесплодными.

Я также использовал инструмент удаленного шпиона Visual Studio 2008 для отслеживания сообщений (и получения шестнадцатеричных значений)

Вот код, который у меня есть:

</p>

<code>Imports System.Runtime.InteropServices
Imports Microsoft.WindowsCE.Forms
Imports Microsoft.WindowsMobile.Forms

Public Class BarControl
  <DllImport("coredll.dll", EntryPoint:="GetForegroundWindow", SetLastError:=True)> _
  Private Shared Function GetForegroundWindow() As IntPtr
  End Function

  <DllImport("aygshell.dll", EntryPoint:="SHFullScreen", SetLastError:=True)> _
  Private Shared Function SHFullScreen(ByVal hwndRequester As IntPtr, _
                                       ByVal dwState As Integer) As Boolean
  End Function

  <DllImport("coredll.dll", EntryPoint:="EnableWindow")> _
  Private Shared Function EnableWindow(ByVal hwnd As IntPtr, _
                                       ByVal bEnable As Boolean) As Boolean
  End Function

  <DllImport("coredll.dll", EntryPoint:="FindWindow")> _
  Private Shared Function FindWindow(ByVal lpClassName As String, _
                                     ByVal lpWindowName As String) As IntPtr
  End Function

  <DllImport("coredll.dll", _
             EntryPoint:="GetForegroundWindow", _
             SetLastError:=True)> _
  Private Shared Function SendMessage(ByVal hWnd As IntPtr, _
                                      ByVal Msg As Integer, _
                                      ByVal wParam As Integer, _
                                      ByVal lParam As Integer) As IntPtr
  End Function

  Private Const SHFS_SHOWSTARTICON As Integer = &H10
  Private Const SHFS_HIDESTARTICON As Integer = &H20
  Private Const SHFS_HIDESIPBUTTON As Integer = &H8
  Private Const SHFS_SHOWSIPBUTTON As Integer = &H4
  Private Const SHFS_SHOWTASKBAR As Integer = &H1
  Private Const SHFS_HIDETASKBAR As Integer = &H2

  'Additional variables
  Private Const WM_ENABLE As Integer = &HA
  Private Const CAMERA_INDICATOR As Integer = &H800C 'WM_APP+12
  Private Const CAMERA_ENABLED As Integer = &H1
  Private Const CAMERA_DISABLED As Integer = &H0
  Private Const WM_USER As Integer = &H400
  Private Const WM_ACTIVATE_CAMERAVIEW As Integer = WM_USER + 1
  Private Const WM_CANCELMODE As Integer = &H1F

  Private Shared Function SetTaskBarEnabled(ByVal bEnabled As Boolean) As Boolean
    Dim hwnd As IntPtr = FindWindow("HHTaskBar", Nothing)

    If Not hwnd.Equals(IntPtr.Zero) Then
      If bEnabled Then
        Return EnableWindow(hwnd, True)
      Else
        Return EnableWindow(hwnd, False)
      End If
    End If
    Return True
  End Function

  Private Shared Function SetTaskbarVisible(ByVal visible As Boolean) As Boolean
    Dim hwnd As IntPtr = FindWindow("HHTaskBar", Nothing)

    If Not hwnd.Equals(IntPtr.Zero) Then
      If visible Then
        Return SHFullScreen(hwnd, SHFS_SHOWTASKBAR)
      Else
        Return SHFullScreen(hwnd, SHFS_HIDETASKBAR)
      End If
    End If
  End Function

  Private Shared Function SetStartButtonVisible(ByVal visible As Boolean) As Boolean
    Dim hwnd As IntPtr = GetForegroundWindow()

    If Not hwnd.Equals(IntPtr.Zero) Then
      If visible Then
        Return SHFullScreen(hwnd, SHFS_SHOWSTARTICON)
      Else
        Return SHFullScreen(hwnd, SHFS_HIDESTARTICON)
      End If
    End If
  End Function

  Private Shared Function SetSIPVisible(ByVal visible As Boolean) As Boolean
    Dim hwnd As IntPtr = GetForegroundWindow()

    If Not hwnd.Equals(IntPtr.Zero) Then
      If visible Then
        Return SHFullScreen(hwnd, SHFS_HIDESIPBUTTON)
      Else
        Return SHFullScreen(hwnd, SHFS_HIDESIPBUTTON)
      End If
    End If
  End Function

  Public Shared Sub ShowTaskBar()
    SetTaskBarEnabled(True)
    SetTaskbarVisible(True)
  End Sub

  Public Shared Sub HideTaskBar()
    SetTaskbarVisible(False)
    SetTaskBarEnabled(False)
  End Sub

  Public Shared Sub ShowSIP()
    SetSIPVisible(True)
  End Sub

  Public Shared Sub HideSIP()
    SetSIPVisible(False)
  End Sub

  Public Shared Sub HideStartButton()
    SetStartButtonVisible(False)
  End Sub

  Public Shared Sub ShowStartButton()
    SetStartButtonVisible(True)
  End Sub

  Public Sub MySendMessage(ByVal target As String, _
                           ByVal message As Integer, _
                           ByVal lParam As Integer, _
                           ByVal wParam As Integer)
    Dim hwnd As IntPtr = FindWindow(target, Nothing)
    Dim msg As Microsoft.WindowsCE.Forms.Message = Microsoft.WindowsCE.Forms.Message.Create(hwnd, message, lParam, wParam)
    MessageWindow.SendMessage(msg)
  End Sub

  'Enables / Disables the camera
  Private Sub btnDisableCam_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisableCam.Click
    MySendMessage("HHTaskBar", WM_ENABLE, 0, CAMERA_INDICATOR)
    'EnableWindow(WM_ACTIVATE_CAMERAVIEW, False)
    'MySendMessage("HHTaskBar", CAMERA_INDICATOR, WM_ENABLE, CAMERA_DISABLED)
    'MySendMessage("HHTaskBar", WM_ACTIVATE_CAMERAVIEW, WM_ENABLE, CAMERA_DISABLED)
    'MySendMessage("HHTaskBar", WM_CANCELMODE, 0, 0)
  End Sub

  Private Sub btnEnableCam_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnableCam.Click
    MySendMessage("HHTaskBar", WM_ENABLE, 1, CAMERA_INDICATOR)
    'EnableWindow(WM_ACTIVATE_CAMERAVIEW, True)
    'MySendMessage("HHTaskBar", WM_CANCELMODE, 1, 0)
    'MySendMessage("HHTaskBar", CAMERA_INDICATOR, WM_ENABLE, CAMERA_ENABLED)
  End Sub

End Class
</code>

Любая помощь будет принята с благодарностью!

Заранее спасибо!

Ian

1 Ответ

0 голосов
/ 17 декабря 2014

Задумывались ли вы о повторном включении кнопок, когда вам нужно, чтобы камера функционировала должным образом?затем снова отключить кнопки после завершения функции камеры ??

ShowCameraDialog ()

  • Включить кнопки панели задач
  • Показать диалог камеры
  • Dialog Response? .. делать вещи с изображением ..
  • Снова отключить кнопки панели задач
...