Mause ve Klavye kitleme yada Windowsu Kitleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Arama bölümlerinde ve web de aradım önceden belirteyim bulamadım.Hookmause yada hookkeybort uygulaması var ama sadece form ekranında çalışıyor ben windows sisteminde mause ve klavyeyi kitlemek ve açmak istiyorum.Bu konuda yardımlarınızı bekliyorum arkadaşlar
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

Merhaba,

Daha önce de belirttiğim gibi bu tür işlemleri Windows'un kendisi üzerinden "kiosk" ayarlarını inceleyerek yapmalısınız.

Klavye hook işlemini direk kendi uygulamanızdan yapamazsınız. Böyle yapar iseniz sadece kendi uygulamanızdaki işlemler için "hook" yapmış olursunuz. İşletim sistemi genelinde "hook" işlemi için harici bir DLL dosyası kullanmanız gerekli ki bu da birçok anti-virüs tarafından tehlikeli veya direk virüs olarak nitelendirilmektedir.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Hocam kiosk u nasıl aratmalıyım webde.Aradım ama netbir şey bulamaadım ve pek anlamadım da :(
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen thelvaci »

Kullanmanız gereken API BlockInput API'si. Ancak bu API'yi kullanırken dikkatli olun, ne de olsa klavye ve mouse girdileribloklanıyor. Tekrar unblock etmenin bir yolunu bulmalısınız, aksi durumda makinayı restart etmeniz gerekir. ;-)
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

Title: How to block keyboard and mouse input

// Import BlockInput function form user32.dll:


function BlockInput(fBlockInput: Boolean): DWORD; stdcall; external 'user32.DLL';

{block input}

procedure TForm1.Button1Click(Sender: TObject);
begin
  BlockInput(True);
end;

{Unblock input }

procedure TForm1.Button2Click(Sender: TObject);
begin
  BlockInput(False);
end;

Kod: Tümünü seç

{
Notes:
Requires Windows 98/2000 or later.
You can unblock input by pressing CTRL+ALT+DEL
If you don't want the user to unblock
by pressing CTRL+ALT+DEL, additionally write:
SystemParametersInfo(97,Word(True),@OldValue,0);
and to undo it:
SystemParametersInfo(97,Word(False),@OldValue,0);
(Var OldValue : Longbool)

If you want to unblock your input after pressing button1
the simple way to do it is use timer
(just set it for few sec and tell it to unblock input
after counting down)



}

{***********************************************************}

{Function from

function FunctionDetect(LibName, FuncName: string; var LibPointer: Pointer): Boolean;
var 
  LibHandle: THandle;
begin
  Result     := False;
  LibPointer := nil;
  if LoadLibrary(PChar(LibName)) = 0 then Exit;
  LibHandle := GetModuleHandle(PChar(LibName));
  if LibHandle  0 then
  begin
    LibPointer := GetProcAddress(LibHandle, PChar(FuncName));
    if LibPointer  nil then Result := True;
  end;
end;

// On Button Click Even

procedure TForm1.Button1Click(Sender: TObject);
var 
  xBlockInput: function (Block: BOOL): BOOL; stdcall;
  begin
    if FunctionDetect('USER32.DLL', 'BlockInput', @xBlockInput) then
    begin
      xBlockInput(True);  // Disable Keyboard & mouse
      Sleep(10000);         // Wait for 10 Seconds
      xBlockInput(False); // Enable  Keyboard & mouse
    end;
  end;
How to block keyboard and mouse input bir kod buldum ama button1 ve button2 üzerinden çalıştıramadım nasıl kullanabilirim bu kodu uses kısmına bir şey ekleniyor mu.

Kod: Tümünü seç

  if LibHandle  0 then

Kod: Tümünü seç

[dcc32 Error] Unit1.pas(40): E2066 Missing operator or semicolon
satırında bu hatatyı verdi birde burada neden 2 tana button1 click olayı var
win7 için ondan mı tüm win lere nasıl uygulanır bu çalışırsa
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Şu şekilde denedim

Kod: Tümünü seç

var
  Form1: TForm1;
  function BlockInput(fBlockInput: Boolean): DWORD; stdcall;
  external 'user32.dll'



implementation

{$R *.dfm}
 function FunctionDetect(LibName, FuncName: string; var LibPointer: Pointer): Boolean;
var
  LibHandle: THandle;
begin
  Result     := False;
  LibPointer := nil;
  if LoadLibrary(PChar(LibName)) = 0 then Exit;
  LibHandle := GetModuleHandle(PChar(LibName));
  if LibHandle=0 then
  begin
    LibPointer := GetProcAddress(LibHandle, PChar(FuncName));
    if LibPointer=nil then
    Result := True;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 BlockInput(True);
end;




procedure TForm1.Button2Click(Sender: TObject);
begin
BlockInput(False);
end;
kod hata vermedi ama bir işede yaramıyor :))
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

http://www.dwinlock.kassl.de/ asıl proje bu trial içinde delphi kodlarıda var ama buradanda yardımcı olmak isteyenlare açığım
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Bu dosya trial mi free mi ben anlamadım bunu kullanabilirmiyiz projemizde kullanabilirsek nasıl.Buna projeye alternatif free bir link bilen var mı.Yada elinde kaynak kodu olan
Dosya ekleri
dwinlock.zip
(291.85 KiB) 119 kere indirildi
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen thelvaci »

Öncelikle bir sakin olun ve size verilen yanıtları okumaya çalışın. Ard arda mesaj yazmanız yardım alma hızınızı arttırmaz. Hangi Delphi sürümünü kullanıyorsunuz bilmiyorum ama; BlockInput için yaptığınız tanımlama yanlış. Eğer Windows.pas dosyası içinde tanımlaması yapılmamış ise kullandığınız Delphi sürümünde; aşağıdaki gibi bir tanım üzerinden ilerleyebilirsiniz:

function BlockInput(fBlockIt: BOOL): BOOL; stdcall; external 'user32.dll';

BOOL veri türünün neye eşitlendiğini de kontrol edin. Etmek istemiyorsanız, bu durumda fonksiyon tanımını:

function BlockInput(fBlockIt: LongBool): LongBool; stdcall; external 'user32.dll'

haline çevirin.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

hocam function BlockInput(fBlockIt: LongBool): LongBool; stdcall; external 'user32.dll' düzenledim delphi 10.3 kullanıyorum.Sonuç olmadı.Yani konu başlığıma daha ulaşmış değili.Ard arda attığım mesajlar kimisi kodlar için cevap kimiside öneri sormak içindi.Konu güncel diye yazdım hepsi bu.Yazılımda o kadar iyi değilim.İlginiz için teşekkürler.Kusura bakmayın
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen thelvaci »

Olmayan nedir anlayamadım. BlockInput(true); biçimindeki yapacağınız çağrı mouse ve klavyeyi kilitler. Sonra BlockInput(false); çağrımı ile herşey eski haline geri döner. Siz nasıl kullanıyorsunuz da olmuyor ? Yazdığınız kodu görebilirsek eğer daha fazla yardımcı olabiliriz sanırım.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 //function BlockInput(fBlockIt: BOOL): BOOL; stdcall; external 'user32.dll';

 function BlockInput(fBlockIt: LongBool): LongBool; stdcall; external 'user32.dll'
implementation
{$R *.dfm}
 function FunctionDetect(LibName, FuncName: string; var LibPointer: Pointer): Boolean;
var
  LibHandle: THandle;
begin
  Result     := False;
  LibPointer := nil;
  if LoadLibrary(PChar(LibName)) = 0 then Exit;
  LibHandle := GetModuleHandle(PChar(LibName));
  if LibHandle=0 then
  begin
    LibPointer := GetProcAddress(LibHandle, PChar(FuncName));
    if LibPointer=nil then
    Result := True;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   BlockInput(True);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
BlockInput(False);
end;
windows içinde, form içinde BlockInput yapmıyor.
Dosya ekleri
block.rar
(57.33 KiB) 121 kere indirildi
thelvaci
Kıdemli Üye
Mesajlar: 770
Kayıt: 11 Tem 2010 07:17
Konum: Istanbul
İletişim:

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen thelvaci »

Sizin için zaten tanımlı olan API'yi kullanmak yerine kendim yükleme yoluna gittim ve şimdi göndereceğim örneğin çalıştığını da teyid ettim.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TBlockInput = function (fBlockIt: BOOL): BOOL; stdcall;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  BlockInputFunc  : TBlockInput;
  AHandle         : THandle;
begin
  AHandle := LoadLibrary('user32.dll');

  if AHandle <> 0 then
  begin
    @BlockInputFunc := GetProcAddress(AHandle, 'BlockInput');

    if Assigned(@BlockInputFunc) then
    begin
      Button1.Enabled := false;

      try
        Memo1.Lines.Add('Şu anda klavye ve mouse kullanılamaz durumda olmalı.');
        Memo1.SetFocus;

        BlockInputFunc(true);
        Sleep(5000);
      finally
        BlockInputFunc(false);
        Button1.Enabled := true;
      end; // try..finally
    end; // if Assigned(@BlockInputFunc) then

    FreeLibrary(AHandle);
  end; // if AHandle <> 0 then
end;

end.
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Hocam ben mausenin windowsda çalışmamasını istiyorum form üzerinde değil.Yani windows menülerine tıklanamasın windows u kitlesin winlock şeklinde projemin ana formu tüm ekranı kaplıyor try icona geçtiğinde window bileşenleri açılacak form show halinde iken win tuşu yada mause klavye masa üstü ikonlarada mause çalışmayacak.dwinlock dosyası eklemiştim inceleme şansınız olursa onun gibi.İlk mesajımda açıklamıştım bunu
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

Bir sorunun birçok çözümü olabilir. Benim önerim halen kiosk ayarlarını detaylı şekilde araştırmanız ve incelemeniz yönünde. Google içinde basit bir arama sonucundan aşağıdaki bağlantılara ulaşmak mümkün.
http://www.cozumpark.com/blogs/windows_ ... -mode.aspx
https://www.sordum.net/18407/windowsta- ... iosk-modu/

Bu işlemi youtube üzerinde yaparsanız yabancı dil bilmeden işlemin nasıl yapıldığını izleyerek görmeniz mümkün olabilir. Hatta Türkçe videolara denk gelmekte mümkün oluyor.
https://www.youtube.com/watch?v=jOxEPalTaHw
https://www.youtube.com/watch?v=PpLYSD6eFss
https://www.youtube.com/watch?v=o2SqetFs_YE
https://www.youtube.com/watch?v=3G2hWri_Izk
https://www.youtube.com/watch?v=ja7R50a3gdA

Yukarıdaki örneklerden bazıları "sistem sadece Edge Browser çalıştırsın" şeklinde örnekler. Siz bu örneklerden yola çıkarak sistem sadece sizin uygulamanızı çalıştırsın şekline çevirebilirsiniz.

Programınızın klavye ve fare kontrolünü bloke etmesi için size önerilen BlockInput() WinAPI fonksiyonunu kullanmalısınız. Ancak bu fonksiyonu kullansanız dahi kullanıcı CTRL+ALT+DEL tuşlarına bastığı ya da uygulamanız bir sebepten kendisini kapattığı anda yeniden klavye ve fare kullanabilir hale gelecektir.
Kaynak: https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Uygulamanızın davranışını değiştirerek kiosk ayarlarını kullanmanız kanımca en iyi sonucu elde etmenizi sağlayacaktır. Örneğin;
Full ekran, tek çalışan uygulama, CTRL+ALT+DEL tuşları kiosk ayarlarından bloke edilmiş, ALT+F4 tuşu uygulamanızdan bloke edilmiş şekilde, üzerinde hiç bir etkileşimli bileşen olmayan uygulamanız doğru USB takılana kadar bekleyip doğru USB takıldığında kendisini system tray içine saklayarak diğer kısımlarının kullanılmasına izin verebilir.
Cevapla