Отключить строку меню в Windows Mobile 6.5 - PullRequest
5 голосов
/ 29 марта 2011

Я портирую .NET-приложение с WM5 на WM6.5. Помимо нового разрешения, я заметил различное поведение пользовательского интерфейса для меню «Пуск» и строки заголовка (заголовок). Мое приложение должно работать в режиме киоска, где пользователь не может выйти из приложения и обойти нашу аутентификацию. Для этого на WM5 я прятал кнопку запуска и кнопку закрытия. Я использую следующую функцию:

SHFullScreen(hWnd, SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON); 

Скрытие кнопок тоже работает на WM6.5, но есть и другая проблема. Пользователь может нажать на строку заголовка (строка меню, строка заголовка - я не уверен, как правильно его назвать - панель в верхней части экрана) и получить доступ к диспетчеру задач Windows. Смотрите прикрепленный скриншот Application

Я обвел места, где пользователь может нажать и выйти в диспетчер задач следующим образом: Task Manager starting

Есть идеи, как отключить это взаимодействие? Устройство Motorola MC65. Под управлением Windows Mobile 6.5.

Итак, окончательный ответ является частью ответа, опубликованного ниже:

IntPtr tWnd = FindWindow("HHTaskBar", null);
EnableWindow(tWnd, false);

Мы просто находим HHTaskBar и отключаем его. У него есть некоторые недостатки, но в целом уловка.

Ответы [ 2 ]

5 голосов
/ 29 марта 2011

Вы можете скрыть всю верхнюю панель задач и развернуть вашу форму:

// the following three lines are p/invoked
IntPtr tWnd = FindWindow("HHTaskBar", null);
EnableWindow(tWnd, false);
ShowWindow(tWnd, SW_HIDE);

// maximize your form
form.Size = new Size(240, 320); // or whatever the device's screen dimensions are
form.WindowState = FormWindowState.Maximized;
0 голосов
/ 29 марта 2011

Попробуйте метод SHFullScreen с SHFS_HIDETASKBAR, который описан таким образом в MSDN:

Поместите панель задач в нижней части г-го порядка. Обратите внимание, что игра или приложение, которое требует всего Экран может использовать этот флаг. Будь уверен что Ваше приложение имеет полный размер экран перед использованием этого флага. В противном случае это будет выглядеть как функция ничего не сделала.

protected override void OnLoad(EventArgs e)
{
    ...

    SHFullScreen(this.Handle, SHFS_HIDETASKBAR | 
        SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON);

    base.OnLoad(e);
}

private const int SHFS_SHOWTASKBAR = 0x0001;
private const int SHFS_HIDETASKBAR = 0x0002;
private const int SHFS_SHOWSIPBUTTON = 0x0004;
private const int SHFS_HIDESIPBUTTON = 0x0008;
private const int SHFS_SHOWSTARTICON = 0x0010;
private const int SHFS_HIDESTARTICON = 0x0020;

[DllImport("aygshell")]
static extern bool SHFullScreen(IntPtr hwnd, int dwState);
...