Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Вниз

Блокировка клавиш   Найти похожие ветки 

 
Номолос   (2003-12-06 12:07) [0]

Хочу, если моё окошко активно, блокировать "флажок", Ctrl+Alt+Del, Alt+Tab и пр. Вобщем, чтобы меня выключить было нельзя, пока OK не нажмёшь. Я делаю перехватчик на WM_KEYDOWN. Клавиши, вроде, вижу самый первый. Но потом-то масдай их тож засекает. Никак нельзя сделать чё-нибудь, вроде, буфер клавиш очистить, как в ДОСе?


 
opoloXAI   (2003-12-07 12:03) [1]

Я делал это так:

procedure TBlokForm.LockComputer;
var h,hTaskBar: THandle;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0);
h:=FindWindow("Shell_TrayWnd", nil);
h:=FindWindowEx(h, HWND(0),"Button", nil);
ShowWindow(h, SW_hide);
// SysTray
H:=FindWindow("Shell_TrayWnd", Nil);
H:=FindWindowEx(H, 0, "TrayNotifyWnd", Nil);
ShowWindow(H, SW_HIDE);
// Кнопка Пуск
H:=FindWindow("Shell_TrayWnd", Nil);
H:=FindWindowEx(H, 0, Nil, Nil);
ShowWindow(H, SW_HIDE);
// Taskbar
hTaskbar := FindWindow("Shell_TrayWnd", Nil);
ShowWindow(hTaskBar, SW_HIDE);
end;

procedure TBlokForm.UnLockComputer;
var h,hTaskBar: THandle;
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0);
// SysTray
H:=FindWindow("Shell_TrayWnd", Nil);
H:=FindWindowEx(H, 0, "TrayNotifyWnd", Nil);
ShowWindow(H, SW_SHOW);
// Кнопка Пуск
H:=FindWindow("Shell_TrayWnd", Nil);
H:=FindWindowEx(H, 0, Nil, Nil);
ShowWindow(H, SW_SHOW);
// Taskbar
hTaskbar := FindWindow("Shell_TrayWnd", Nil);
ShowWindow(hTaskBar, SW_SHOW);
end;

показываю на весь экран *.jpg и жду события (я, в частности, ожидал событий по Com-порту).


 
Delphi5.01   (2003-12-07 13:41) [2]

Как отключить показ кнопки программы в TaskBar и по Alt-Tab и в Ctrl-Alt-Del
Внеся изменения (выделенные цветом) в свой проект вы получите приложение, которое не видно в TaskBar и на него нельзя переключиться по Alt-Tab

program Project1;

uses Forms,
Windows,
Unit1 in "Unit1.pas" {Form1};

{$R *.RES}

var ExtendedStyle : integer;

begin
Application.Initialize;
ExtendedStyle:=GetWindowLong(application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle or WS_EX_TOOLWINDOW {AND NOT WS_EX_APPWINDOW});
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Если включить синий коментарий, то получите очень интересное приложение. Оно не видно в TaskBar и на него нельзя переключиться по Alt-Tab, но когда приложение минимизируется оно остается на рабочем столе в виде свернутого заголовка (прямо как в старом добром Windows 3.11)

Только сpазу пpедупpеждаю пpо гpабли, на котоpые я наступал:
Будь готов к тому, что если пpи попытке закpытия пpиложения в OnCloseQuery или OnClose выводится вопpос о подтвеpждении, то могут быть пpоблемы с автоматическим завеpшением пpогpаммы пpи shutdown - под Win95 пpосто зависает, под WinNT не завеpшается.
Очевидно, что сообщение выводится, но его не видно (пpичем SW_RESTORE не сpабатывает).
Решение - ловить WM_QueryEndSession и после всяких завеpшающих действий и вызова CallTerminateProcs выдавать Halt.

А вот как отрубить показ файла в Ctrl-Alt-Del

function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external "KERNEL32.DLL";

implementation

procedure TForm1.Button1Click(Sender: TObject);
begin
//Hide if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//Show if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 0);
end;

Jelau udachi



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.026 c
1-79862
WG
2004-02-10 17:11
2004.02.25
Автоматическая отправка письма через Outlook


3-79541
Максим
2004-02-03 12:04
2004.02.25
IBDatabase


3-79628
Enigma
2004-02-01 14:41
2004.02.25
DBGrid


7-80304
Номолос
2003-12-06 12:07
2004.02.25
Блокировка клавиш


3-79664
Alex__
2004-01-30 21:21
2004.02.25
Функция Table.Translate





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский