Главная страница
    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.46 MB
Время: 0.043 c
1-79809
Zheks
2004-02-11 12:02
2004.02.25
Canvas, Shape, стирание того, что нарисовал


1-79943
афвуд
2004-02-09 16:00
2004.02.25
Уникальный ключ.


3-79575
werq
2004-01-29 13:10
2004.02.25
Мастаки, какой есть бесплатный компонент по сохранению в DBF?


7-80310
hooky-mars
2003-12-04 21:59
2004.02.25
ESC принтера


1-80007
Den_K2004
2004-02-13 10:25
2004.02.25
Как подсунуть свои картинки в TWebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский