Форум: "Система";
Текущий архив: 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.036 c