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

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen haydarxxx »

Ertank bey yapmak istediğim okullardaki akıllı tahtalar için bir usb anahtarla tahtanın açılmasını sağlamak.usb çekildiğinde kapanmasını.Açılışta program devrede olacağından windows touch yada click durumları kitli olsun istiyorom ki öğrenci tahtayı amacı dışında kullanamasın.öğretmen usbsini taktığında tahta açılsın.öğretmen usb sini çekip gittiğinde tahta otomatik kapanmaya geçtiğinde yine program devreye girerek öğrencinin tahtayı kullanmasını engelleyecek

Yalnızca öğretmenin usb si tahtayı açabilecek.Kios tek bir pc de kullanıcıların kullanmak istediklerini sınırlayabilir.Fakat yaptığın projenin bir setup u olacak.Programı kullanacak kişiye kiosk tarifi olmayacağı için.tüm işi projem(delphi) yapsın istiyorum.
http://www.dwinlock.kassl.de/
En son haydarxxx tarafından 12 May 2018 09:42 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

Aşağıdaki kod Windows 10 ve Windows XP işletim sistemlerinde edildi ve çalışıyor.

Ünite:

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;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if not BlockInput(True) then
  begin
    ShowMessage('Kilitleme yapılamadı. Uygulama Administrator yetkisine sahip mi?');
    Exit();
  end;

  Sleep(5000);

  BlockInput(False);
end;

end.
Form:

Kod: Tümünü seç

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 299
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 40
    Top = 40
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  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 BlockInput True de falsede oluyor bunda sıkıntı yok zaten.Fakat bu yazılan kodlar form üzerinde aktif form için.form tam ekran olduğunda evet iş görür. Ama win tuşu ile formda devreden çıkartılabilir ve mause istenilen yere tıklayabilir.Ben windows da mausenin çalışmamasını istiyorum. :(
ki pc im Administratordan açık.Ekli programa bakabilirmisiniz
Dosya ekleri
dwinlock.zip
(291.85 KiB) 60 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

haydarxxx yazdı: 12 May 2018 04:00 Fakat bu yazılan kodlar form üzerinde aktif form için.
Benim denemelerimde (Windows 10 64bit ve Windows XP 32bit) tüm klavye ve fare kullanımı kilitleniyor. Buna Windows tuşu da dahil. Bir yerde yaptığınız bir yanlış olmalı.
1- Kullandığınız Delphi sürümü nedir? Eğer Delphi 7 kullanıyor iseniz daha önce dikkatinizi çekmeye çalışan @thelvaci nin bahsettiği gibi DLL fonksiyon tanımlamalarında bir hatanız olabilir.
2- Örnek verilen kodları olduğu gibi test ederek çalışıp çalışmadıklarını test edin. Çalışıyor olacaklardır.
3- Kendi denediğiniz ve sadece form üzerinde çalışıyor dediğiniz kod ile aralarındaki farkı inceleyip sorunun ne olduğunu bulmaya çalışın.

Microsoft MSDN dökümanlarında anlatıldığı üzere bu fonksiyon klavye ve fare iletişimini komple durduruyor. GetKeyState, GetKeyboardState, GetAsyncKeyState fonksiyonları cevap vermez hale geliyor. Sadece BlockInput fonksiyonunu kullanan uygulama SendInput fonsiyonunu kullanabiliyor.
https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Ayrıca Windows 2000 Professional ve üzeri işletim sistemlerinde kullanılabiliyor.

Örnek gönderdiğiniz ücretli bir bileşen. Bu bileşen ile ilgili en doğru bilgiyi kendi siteleri üzerinden alabilirsiniz.
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 »

Delphi 10.2 window10 6 4bit.Yaptığımı ekledim hocam
Dosya ekleri
block.rar
(62.55 KiB) 76 kere indirildi
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

Gönderdiğiniz kod içinde hem dinamik hem statik kullanmaya çalışmışsınız fonksiyonu. Tek bir statik tanım yeterli olacaktır.

Ünite kodunu aşağıdaki şekilde değiştirir iseniz çalışacaktır:

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;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

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

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Button1.Enabled := false;

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

    BlockInput(true);
    Sleep(15000);
  finally
    BlockInput(false);
    Button1.Enabled := true;
  end; // try..finally
end;


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

procedure TForm1.Button3Click(Sender: TObject);
 begin
 if not BlockInput(True) then
  begin
    ShowMessage('Kilitleme yapýlamadý. Uygulama Administrator yetkisine sahip mi?');
    Exit();
  end;

  Sleep(5000);

  BlockInput(False);
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 video çekip atacağım vallahi :) yok istediğim olmuyor windows da her yeri clickle yip açabiliyorum win tuşu çalışıyor :( kodu aynen kopyaladım yapıştırıdım :(((( benim dışımda deneyen başka bir arkadaş yok mu forumda
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

Administrator olarak çalıştırıyorsunuz uygulamayı değil mi?
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 »

win10 da gizli bir Administrator yoksa pc de tek hesabım var

Haydar
Yerel Hesap
Administrator

şeklinde başka oturumum yok hocam
https://drive.google.com/open?id=12dMyg ... phulY4jWJE
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

EXE dosya üzerinde sağ tuş ile tıklayıp "Run As Administrator" şeklinde çalıştırmaktan bahsediyor idim.
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 »

ok çook teşekkür ertank hocam..Şimdi oldu hocam dediğiniz gibi kitledi.Tabi şimdi şöyle bir sorun var doğrudan Run As Administrator nasıl dedirteceğiz projeye.Umarım çok olmuyorumdur :roll:

http://chapmanworld.com/2015/06/08/elev ... lications/ aynen uyguladım ama olmadı 3.satırıda projemi yazdım :( ama xml ne kadar doğru ki

gerkeli ayraları yaptıgımda

Kod: Tümünü seç

Unable create progcess:İstenen işlem için yükseltme gerekiyor
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

haydarxxx yazdı: 13 May 2018 05:31 Tabi şimdi şöyle bir sorun var doğrudan Run As Administrator nasıl dedirteceğiz projeye.
Eğer uygulamanın böyle bir yetki ile nasıl çalışacağını soruyor iseniz son Delphi sürümlerinde proje özellikleri içinde "Application" kısmında "Execution Level" ayarı mevcut. Bunu "Require Administrator" yapıp projeyi derlemelisiniz.

Eğer Administrator yetkisi ile uygulama nasıl çalışacak diye soruyorsanız uygulamanızı kullanacak kişi uygulamanız ilk açılır iken onay vermeli. Tabi eğer uygulamanın çalıştığı sistemde Administrator yetkisi için onay alınmasına gerek olmayacak şekilde Windows ayarları yapılmış ise soru sormadan direk çalışır.
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 »

Eğer uygulamanın böyle bir yetki ile nasıl çalışacağını soruyor iseniz son Delphi sürümlerinde proje özellikleri içinde "Application" kısmında "Execution Level" ayarı mevcut. Bunu "Require Administrator" yapıp projeyi derlemelisiniz.
Dememiştim hocam hatta bazı forumlarda manifest te gekek yok bu ayar yeterli deniliyor.Delphi bu sorunu çözmüş diye yazanlar var.(delphi10.2)Ayar ve hata mesajı şöyle
https://drive.google.com/open?id=1THED4 ... ciEr6yb7Eu
https://drive.google.com/open?id=1gOoad ... _dEN7RIrKx

Ayar Execution Level>>As Invoker olursa proje açılıyor ama admin sorunu devam ediyor.
Eğer Administrator yetkisi ile uygulama nasıl çalışacak diye soruyorsanız uygulamanızı kullanacak kişi uygulamanız ilk açılır iken onay vermeli. Tabi eğer uygulamanın çalıştığı sistemde Administrator yetkisi için onay alınmasına gerek olmayacak şekilde Windows ayarları yapılmış ise soru sormadan direk çalışır.
hocam laptobumda deniyorum her yetki serbest yine doğrudan kod çalışmıyor Run As Administrator demeden
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: Mause ve Klavye kitleme yada Windowsu Kitleme

Mesaj gönderen ertank »

haydarxxx yazdı: 13 May 2018 11:57 Ayar Execution Level>>As Invoker olursa proje açılıyor ama admin sorunu devam ediyor.
Ben bu ayarı "Require Administrator" yapın diye yazmıştım. Gözden kaçırmış olmalısınız. "As Invoker" adından da anlaşılacağı üzere çalıştıran kullanıcı yetkileri ile anlamına geliyor.
hocam laptobumda deniyorum her yetki serbest yine doğrudan kod çalışmıyor Run As Administrator demeden
1-EXE uygulamanız "Require Administrator" ayarı seçili olduğu halde *derlenmedi* ise çift tıklandığında normal uygulama yetkisi ile çalışacaktır. Dolayısıyla sizin uygulamayı özellikle "Run As Administrator" şeklinde çalıştırmanız gerekecektir.
2-EXE uygulamanız "Require Administrator" ayarı seçili olduğu halde derlendi ise çift tıklandığında otomatik olarak "Run As Administrator" şeklinde çalışacaktır.

Bir Windows kullanıcısının kullanıcı ayarları içinde "Administrator" yetkisine sahip olması ve aynı kullanıcının çift tıklayarak çalıştırdığı uygulamanın "Run As Administrator" olarak çalışması yanlış hatırlamıyor isem Windows Vista çıktığından beri tamamen farklı konular oldular.

Windows Vista ve sonrasında normalde her uygulama normal kullanıcı yetkisi ile çalışır. Gerekli olduğunda Administrator yetkisi ister. Bazı uygulamalar ise tüm çalışma süreleri boyunca bu yetkiye gereksinim duyarlar. Uygulamalara "Run As Administrator" yetkisi gerek duyduklarında veya uygulamasına göre ilk çalışma anında User Access Control (UAC) yapısı ile uygulamaya verilir. UAC normal koşullarda yetki vermeden önce Administrator yetkisi verilmesine dair ekranı ve çalışan diğer uygulamaları durdurup kullanıcı onayı ister. Bu UAC onayını sadece kullanıcı ayarları içinde "Administrator" yetkisi tanımlı olan kullanıcılar verebilir. Kullanıcı ayarlarında normal kullanıcı olan kullanıcılar onay veremez.

Aşağıdaki video Window 10 için bu UAC yetki mesajına gerek kalmadan otomatik olarak uygulamanın manifestosu içinde var ise direk "As Administrator" olarak çalışmasını ve kullanıcı onayı almamasını sağladığını söylüyor. Ben kendi sistemimde denemedim.
https://www.youtube.com/watch?v=kcdmKv2sgXU
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 »

Ben bu ayarı "Require Administrator" yapın diye yazmıştım. Gözden kaçırmış olmalısınız. "As Invoker" adından da anlaşılacağı üzere çalıştıran kullanıcı yetkileri ile anlamına geliyor.
Gözden kaçmadı hocam öyle denedim olmadı dedim.Execution Level>>As Invoker ayarı olursa proje çalışıyor.

Require Administrator yaptığımda proje derlenmiyor ama exe si Run As Administrator olarak çalışıyor.Yani delphi 10 için manifeste gerek yokmuş.Projeyi kodlarken Execution Level>>As Invoke de çalışması gerekir.exe Run As Administrator olsun isteniliyorsa Require Administrator yapı run deyip exe yi kullanabiliyoruz.Teşekkürler ertank hocam sabır ve yardımlarınız için.Sorun çözülmüştür......
Cevapla