2010-03-15 4 views
3

Я создаю приложение для киоска, и я хочу, чтобы он всегда, несмотря ни на что, поверх других приложений Windows и панели задач Windows.Сохранение приложения Windows поверх других окон и в фокусе - всегда

Я уже блокирую команды клавиатуры Windows (alt-tab и т. Д.), Но есть ситуации, которые могут вызвать запуск приложения и кражу экрана.

Можно ли подключиться к Windows с .NET и постоянно проверять, имеет ли приложение фокус и находится сверху, а если нет, то дайте ему фокус и сделайте его сверху?

+0

Как просто убить проводника и отключить любой сервис или фоновый процесс, который может открыть окно? Если это приложение для киосков, вполне вероятно, что никто не хочет использовать компьютер для чего-то еще, пока программа работает в любом случае. – Joey

+0

Просто ради аргумента. Скажем, вы найдете способ сделать это, и есть некоторые проблемы с программным обеспечением. Как вы планируете устранять неполадки - исправить это на этом компьютере? – JohnFx

+0

Приложение kiosk имеет скрытую кнопку (которая затем запрашивает пароль) для выхода из приложения. –

ответ

0

Возможно, вы сможете это сделать, заменив оболочку вашим приложением.
Вот суперпользователя вопрос о замене оболочки с IE: https://superuser.com/questions/108265/how-do-you-replace-the-logon-shell-with-iexplore

Если вы хотите сделать это для текущего пользователя, я думаю, что путь
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

0

В этом случае вы можете запустить приложение в полный экран с вашим окном сверху. Я использую следующий фрагмент в некоторых моих приложениях opengl (от http://nehe.gamedev.net/). Именно в win32, но я думаю, что вы можете использовать PInvoke или System.Management.ManagementClass («Win32_VideoController»)

DEVMODE dmScreenSettings;        // Device Mode 
    memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); // Makes Sure Memory's Cleared 
    dmScreenSettings.dmSize=sizeof(dmScreenSettings);  // Size Of The Devmode Structure 
    dmScreenSettings.dmPelsWidth = width;    // Selected Screen Width 
    dmScreenSettings.dmPelsHeight = height;    // Selected Screen Height 
    dmScreenSettings.dmBitsPerPel = bits;     // Selected Bits Per Pixel 
    dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; 
// Try To Set Selected Mode And Get Results. NOTE: CDS_FULLSCREEN Gets Rid Of Start Bar. 
if(ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL); 

Это переключит ваше приложение на весь экран и избавиться от задач и запретить использование делать что-то другое, чем используя ваше приложение.

0

Вы можете использовать вызовы API. Недостатком является то, что вы должны продолжать проверять, потеряло ли ваше приложение фокус. Зависит именно от того, почему вы хотите это сделать, но ...

Public Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As IntPtr) As Boolean 

- это декларация API. Тогда вам просто нужна ручка окна :)

2

Я действительно работал над производственным киоском (это была Windows 2000, однако). Решение состояло в том, чтобы запустить наше приложение в качестве оболочки. Это достигается частично за счет замены Explorer.exe с приложением в значении Shell по адресу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon 

См here для более определенной информации.

Теперь у нас был секретный (err ... obfuscated) способ закрыть наше приложение. Затем мы откроем диспетчер задач (Ctrl - Shift - Esc) и выберите Файл/Новая задача, чтобы запустить Explorer.exe, чтобы открыть оболочку прямо там и там.

В стороне, когда вы работаете над такой системой, вы, естественно, очень хорошо владеете клавиатурой и все, что означает использование сочетаний клавиш в Windows, потому что у вас, вероятно, не будет удобного способа или места для размещения мышь.

+0

Обфусканный путь? Вероятно, это должно быть имя пользователя и пароль :-) –

+0

Я не хочу притворяться, что наш метод полностью защищен. Но в то же время я понимаю, что наше решение закрыть приложение и запустить Explorer для работы в киоске выходит за рамки вопроса. Но я специально указал на это, чтобы укрепить вашу точку зрения, что вы должны тщательно обдумать это и сделать лучше, чем мы. –

Смежные вопросы