[C++ Builder XE] Kontrola Myszki i Klawiatury

Odpowiedz Nowy wątek
2014-07-16 18:06
0

Witam

Chciałbym sprawdzić w programie czy ktoś pisze na klawiaturze, rusza myszką.

Czego użyć do badania stanu klawiatury, myszki

Pozdrawiam

Pozostało 580 znaków

2014-07-17 11:59
0

znaczy chcesz żeby przy ruszeniu klawiatury/myszy piskało coś, wyświetlało się czy o co chodzi?

Pozostało 580 znaków

2014-07-17 12:06
0

Jeśli chodzi Ci o sprawdzenie czy coś się dzieje na kompie, ale nie ma znaczenia co to sprawdzasz "Idle state".
Do sprawdzenia myszki możesz skorzystać z WinAPI np. Sprawdzając pozycję co kilka milisekund.

Zawsze też możesz skorzystać z hooka globalnego, ale bardzo dużo programów wirusowych zacznie wykrywać wtedy Twój program jako wirus.

Powiedz co chcesz zrobić, a nie pytasz jak zrobić to co myśisz, że powinno się zrobić.

Jak chodzi Ci keyloggera to masz to: http://msdn.microsoft.com/en-[...]op/ms644960%28v=vs.85%29.aspx
Jak chcesz sprawdzać to TYLKO w swoim programie to sprawdzasz zdarzenia w stylu: OnMouseMove, OnKeyDown itp..


░█░█░█░█░█░█░█░█░█░█░█░

Pozostało 580 znaków

2014-07-17 19:08
0

Chce zrobić sobie program który będzie sprawdzał czy naciśnięto jakikolwiek klawisz, czy poruszano myszką.
Jeśli nikt nie ruszał myszki ani klawiatury to po 5 minutach komputer zostanie zablokowany. LockWorkStation();

Program będzie działał albo jako proces albo w tray-u.

Pozostało 580 znaków

2014-07-17 21:17
0

czyli program ma z dużą częstotliwością próbkowania sprawdzać czy podejmujesz jakąkolwiek akcję myszą bądź klawiaturą i w zależności od tego podejmować dane działanie lub nie.

ja to widzę tak: kilkadziesiąt razy na sekundę sprawdza wciśnięcie/ruszenie/klik, a przy każdym sprawdzeniu zwiększa licznik o 1. jeśli zarejestruje zdarzenie myszy albo klawiatury to liczy od nowa, a jeśli nie to dochodzi do określonej wartości i wykonuje dalszą część programu polegającą na wysłaniu systemowi polecenia zablokowania stacji.

ale żeby było to mądre, musi mieć wiedzę czy stacja jest już zablokowana, na wypadek gdybyś zablokował ją ręcznie, albo gdyby tenże program już ją zablokował. i musi sam od nowa zacząć śledzić Twoje poczynania myszo-klawiaturowe gdy odblokujesz stację, czyli cały program będzie w nieskończonej pętli, żebyś nie musiał go od nowa uruchamiać.

Pozostało 580 znaków

2014-07-21 14:00
0

No coś takiego jak opisałeś.

Pozostało 580 znaków

2014-07-21 20:08
0

W timerze wywołuj funkcję GetLastInputInfo http://msdn.microsoft.com/en-[...]op/ms646302%28v=vs.85%29.aspx

EDIT:

Nie mam BCB ale w Delphi taki przykładowy programik może wyglądać tak (myślę że nie powinno być problemów z przetłumaczeniem na BCB):

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure WMWTSSessionChange(var Msg: TMessage); message WM_WTSSESSION_CHANGE;
    function GetSecondsIdle: DWORD;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

const
  NOTIFY_FOR_THIS_SESSION = 0;
  NOTIFY_FOR_ALL_SESSIONS = 1;
  WTS_SESSION_LOCK = 7;
  WTS_SESSION_UNLOCK = 8;

  function WTSRegisterSessionNotification(hWnd: HWND; dwFlags: DWORD): BOOL; stdcall external 'Wtsapi32.dll';
  function WTSUnRegisterSessionNotification(hWnd: HWND): BOOL; stdcall external 'Wtsapi32.dll';

implementation

{$R *.dfm}

//obsluga komunikatu WM_WTSSESSION_CHANGE
procedure TForm1.WMWTSSessionChange(var Msg: TMessage);
begin
  case Msg.WParam of
    WTS_SESSION_LOCK: Timer1.Enabled:= False;
    WTS_SESSION_UNLOCK: Timer1.Enabled:= True;
  end;
end;

//zwraca czas bezczynnosci w sekundach
function TForm1.GetSecondsIdle: DWORD;
var
  liInfo: TLastInputInfo;
begin
  liInfo.cbSize:= SizeOf(TLastInputInfo);
  GetLastInputInfo(liInfo);
  Result:= (GetTickCount - liInfo.dwTime) div 1000;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetSecondsIdle >= 300 then
  begin
    Timer1.Enabled:= False;
    LockWorkStation;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WTSRegisterSessionNotification(Handle, NOTIFY_FOR_THIS_SESSION);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WTSUnRegisterSessionNotification(Handle);
end;

end.

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 2x, ostatnio: kAzek, 2014-07-21 22:42

Pozostało 580 znaków

2014-07-27 16:49
0

W C++ jestem noga.

W Delphi beznadzieja.

Jak mogę skorzystać z WinApi w C++ builder.

Jakiś prosty przykład np wyświetlanie komunikatu.

Pozostało 580 znaków

2014-07-27 21:49
0

Hej znalazłem tak kod

 void __fastcall TForm3::WndProc(Messages::TMessage &Message)
{
   if(Message.Msg==WM_MOUSEMOVE)
   {
     ShowMessage("Myszka");
   }
   TWinControl::WndProc(Message);
}

Niestety działa tylko wtedy gdy najadę myszką na okno programu.
Jak przerobić ten kod aby działał na całym pulpicie a nie tylko na oknie.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0