Mause ve Klavye kitleme yada Windowsu Kitleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Mause ve Klavye kitleme yada Windowsu Kitleme
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
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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.
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.
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
Hocam kiosk u nasıl aratmalıyım webde.Aradım ama netbir şey bulamaadım ve pek anlamadım da
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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.
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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;
Kod: Tümünü seç
if LibHandle 0 then
Kod: Tümünü seç
[dcc32 Error] Unit1.pas(40): E2066 Missing operator or semicolon
win7 için ondan mı tüm win lere nasıl uygulanır bu çalışırsa
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
Şu şekilde denedim
kod hata vermedi ama bir işede yaramıyor )
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;
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
http://www.dwinlock.kassl.de/ asıl proje bu trial içinde delphi kodlarıda var ama buradanda yardımcı olmak isteyenlare açığım
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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) 120 kere indirildi
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
Ö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.
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.
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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.
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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;
- Dosya ekleri
-
- block.rar
- (57.33 KiB) 121 kere indirildi
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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.
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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
Re: Mause ve Klavye kitleme yada Windowsu Kitleme
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.
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.