Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

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

 
Номолос   (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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.02 c
4-80357
FeRR
2003-12-16 12:34
2004.02.25
SendMessage + WM_KEYDOWN


1-79784
Алексей
2004-02-11 16:38
2004.02.25
Вопрос по обработчику событий EditXChange


6-80085
Cure
2003-12-04 23:11
2004.02.25
Звук по локалке


14-80207
Cobalt
2004-01-30 17:31
2004.02.25
Функция возвращения короля


3-79591
Lexer
2004-02-02 11:50
2004.02.25
Alter рекурсивной процедуры