-
Подскажите как можно блокировать доступ к другим окнам, сделав окно своей программы постоянно активным. Передача моему окну сообщения WM_ACTIVATE и перехват хуков HCBT_ACTIVATE для деактивации других окон не помогает. Хотел написать что-то вроде блокирующей программы.
-
> Legolas (29.01.08 04:32)
> Подскажите как можно блокировать доступ к другим окнам, > сделав окно своей программы постоянно активным.
Пускать ее на отдельном десктопе.
Кста, тут кто-то спрашивал про меню Пуск, так тоже пусть пускает туда ж.
-- Regards, LVT.
-
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Registry;
type
TForm1 = class(TForm) Shape1: TShape; Label1: TLabel; Shape2: TShape; Timer1: TTimer; Shape3: TShape; Label2: TLabel; Edit1: TEdit; Button1: TButton; Label3: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Edit1Change(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private { Private declarations }
public
{ Public declarations } end;
var Form1: TForm1; ExtendedStyle : integer; reg: TRegistry; Disable:Boolean; i,y:integer; z:integer;
implementation
{$R *.dfm}
procedure TurnSysKeysBackOn; var OldVal : LongInt; begin SystemParametersInfo (18+97, Word (True), @OldVal, 0) end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Shape2.Left:=Shape2.Left-i; Shape2.top:=Shape2.top-y; if Shape2.Left<=Form1.Left then i:=i*(-1); if Shape2.top<=Form1.top then y:=y*(-1);
if Shape2.left+Shape2.width>=Form1.width then i:=i*(-1); if Shape2.top+Shape2.Height>=Form1.height then y:=y*(-1); end;
procedure TForm1.FormCreate(Sender: TObject);
begin
reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey('Software', True); reg.OpenKey('Microsoft', True); reg.OpenKey('Windows', True); reg.OpenKey('CurrentVersion', True); reg.OpenKey('Policies', True); reg.OpenKey('System', True); reg.WriteString('DisableTaskMgr', '1'); reg.CloseKey;
EnableWindow(FindWindow('Shell_TrayWnd', nil), FALSE);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, 0, 0);
ShowWindow(Application.Handle, SW_HIDE) ; SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ; ShowWindow(Application.Handle, SW_SHOW) ;
z:=0; i:=1; y:=1; end;
procedure TForm1.Shape2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Shape3.Visible:=true; Label2.Visible:=true; Edit1.Visible:=true; Edit1.SetFocus; end;
procedure TForm1.Edit1Change(Sender: TObject); begin if Edit1.text='everest' then begin EnableWindow(FindWindow('Shell_TrayWnd', nil), TRUE); reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey('Software', True); reg.OpenKey('Microsoft', True); reg.OpenKey('Windows', True); reg.OpenKey('CurrentVersion', True); reg.OpenKey('Policies', True); reg.OpenKey('System', True); reg.WriteString('DisableTaskMgr', ''); reg.CloseKey; Form1.Close; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin EnableWindow(FindWindow('Shell_TrayWnd', nil), TRUE); Close; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin Label3.Caption:=IntToStr(key); if key=vk_menu then end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin
if (Edit1.Visible=true)and (Edit1.Text='everest') then begin CanClose:=True; end else CanClose:=False;
end;
end.
-
Пытаюсь сделать тоже самое
-
> [3] xex32 (12.04.08 22:12) > Пытаюсь сделать тоже самое
Хотела было посмотреть код, но как только (в первых же строчках) натолкнулась на неведомые мне магические цифры "SystemParametersInfo (18+97, ...", сразу поняла, что мне здесь делать нечего :)
-
Riply © (12.04.08 22:35) [4] > но как только (в первых же строчках) натолкнулась > на неведомые мне магические цифры "SystemParametersInfo > (18+97, ...",
Это всего лишь SPI_GETDESKWALLPARER - зачем такой вид (18+97) - ну наверное круто. Или экземпляр ошибся, хотел поставить комбинацию для секретной константы SPI_SETSCREENSAVERRUNNING (она просто 97), но даже в этом случае этот код будет действовать для Win95 и Win98, об чем честно предупреждает Microsoft ( http://support.microsoft.com/kb/226359) и Пол Дилация в одной из своих статей.
|