Конференция "WinAPI" » Программа для блокировки [D7, WinXP]
 
  • Legolas (29.01.08 04:32) [0]
    Подскажите как можно блокировать доступ к другим окнам, сделав окно своей программы постоянно активным. Передача моему окну сообщения WM_ACTIVATE и перехват хуков HCBT_ACTIVATE для деактивации других окон не помогает. Хотел написать что-то вроде блокирующей программы.
  • Leonid Troyanovsky © (29.01.08 12:14) [1]

    > Legolas   (29.01.08 04:32)  

    > Подскажите как можно блокировать доступ к другим окнам,
    > сделав окно своей программы постоянно активным.

    Пускать ее на отдельном десктопе.

    Кста, тут кто-то спрашивал про меню Пуск,
    так тоже пусть пускает туда ж.

    --
    Regards, LVT.
  • xex32 (12.04.08 22:06) [2]
    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.
  • xex32 (12.04.08 22:12) [3]
    Пытаюсь сделать тоже самое
  • Riply © (12.04.08 22:35) [4]
    > [3] xex32   (12.04.08 22:12)
    > Пытаюсь сделать тоже самое

    Хотела было посмотреть код, но как только (в первых же строчках) натолкнулась
    на неведомые мне магические цифры "SystemParametersInfo (18+97, ...",
    сразу поняла, что мне здесь делать нечего :)
  • Игорь Шевченко © (13.04.08 00:12) [5]
    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) и Пол Дилация в одной из своих статей.
 
Конференция "WinAPI" » Программа для блокировки [D7, WinXP]
Есть новые Нет новых   [134432   +20][b:0][p:0]