Program egzaminacyjny - zabezpieczenie przed ściąganiem

0

Witam
Piszę program do przeprowadzania egzaminów na komputerze w formie testowej. W większości jest już napisany, mam edytor bazy pytań, generator losowych egzaminów z pytań dostępnych w bazie. Problem mam z programem do samego przeprowadzenia egzaminu, mianowicie, nie wiem jak zablokować dostęp do przeglądarek internetowych, czy innych dokumentów dostępnych na komputerze, żeby zapobiec ściąganiu podczas egzaminowania. Miałem pomysł żeby zrobić okno aplikacji na całym ekranie, ale tu jest problem z całą masą skrótów klawiaturowych, które mogą spowodować zminimalizowanie okna, zmianę okna, czy pokazanie paska zadań. W jaki sposób mogę zabezpieczyć ten program? A może mogę jakoś kontrolować próbę zmiany okna i powiedzmy najpierw wyświetlić ostrzeżenie, a po zaakceptowaniu po prostu zakończyć egzamin tej osoby oceną niedostateczną?

Pozdrawiam
Karol

0

Może to trochę nieprzemyślane ale gdyby deaktywować skrót Ctrl + Alt + Del i program podczas uruchamiania zabijałby proces explorer (a podczas zamykania oczywiście go odpalał) tylko nie wiem czy da się to zrobić na prawach użytkownika ale gdyby się dało to użytkownik właściwie nie miały jak uruchomić żadnego programu ani przeglądać kompa.

0

rozumiem, że alternatywne klawiatury tak jak na egzaminach na prawo jazdy odpadają?

0

Aplikacja na pełnym ekranie to dobry pomysł. Skróty klawiszowe możesz zablokować chocby takim
modułem, który wrzuciłem tutaj: http://www.speedyshare.com/files/26074695/lockhook.rar zaś
w google znajdziesz informację jak zablokowac przez Rejestr systemowy manager zadań, bo jeśli
założysz, że przed uruchomieniem programu egzaminator sprawdzi na każdym środowisku czy w
tle nie są otwarte żadne programy takie jak przeglądarki, to pozwoli rozpocząć odpowiadającemu
rozwiązywać egzamin. Jeżeli nie - to przy starcie programu można zawsze przeszukać wszystkie
okna programów funkcją EnumWindows i zamykać je lub ubijać procesy jeżeli wystepuje nazwa
klas okna przeglądarek www, jak IEFrame dla starego IE albo OperaWindowClass dla Opery, itp.

0

wystarczy, że odpalisz swój program jako powłokę i wyłączysz ctrl+alt+delete. co do pierwszego to HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Winlogon i dodaj tu wartość o nazwie shell i wartości ścieżka_do_twojego_exe\nazwa_programu_exe
dodatkowo do dpra wstaw ten kod

var
  hndEvent: THandle;
  VerInfo: TOSVersioninfo;
begin
  Application.Initialize;
  Application.Title := 'xxx';

  VerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(VerInfo);
  if VerInfo.dwMajorVersion >= 6 then
    hndEvent := OpenEvent(EVENT_MODIFY_STATE, False, 'ShellDesktopSwitchEvent')
  else
    hndEvent := OpenEvent(EVENT_MODIFY_STATE, False, 'msgina: ShellReadyEvent');
  if hndEvent > 0 then
  begin
    SetEvent(hndEvent);
    CloseHandle(hndEvent);
  end;
//tu reszta tego co tam masz
end;

Jedyny skrót jaki będzie działał na takim koncie to ctrl+alt+del a to się da łatwo zablokować z poziomu programu - poszukaj w guglu

0

ja bym proponowal dodac w programie okienko z upomnieniem, jesli ktos bedzie probowal uzyc jednego z tych skrotow. ot, zeby im sie odechcialo kombinowac ;]

P.S. a co gdy wsuniemy pendrive? czy okienko "autoodtwarzania" nie wyswietli sie nad programem? nie jestem pewien wiec dmucham na zimne.
to samo z cd z autorunem. wydaje mi sie tez, ze dodanie pilnowania uruchomionych procesow jest dobrym pomyslem.

0

Ja też uważam, że pomysł Cimaka, jest bardzo dobry.
Program mógłby na początku poinformować, że jeśli wykryje wejście w przeglądarkę, to egzamin od razu się kończy i nie ma przeproś.
Nic nie działa na wyobraźnię tak jak ten komunikat i każdemu odechce się kombinować.

0

Brak uprawnień administratora, raczej dyskwalifikuje kombinacje z explorerem. Klawiatura ma być standardowa, jednym z założeń programu jest to, żeby działał na jakimkolwiek komputerze, bez przygotowywania go do działania programu. Aplikacja na pełnym ekranie jest chyba najbardziej sensowna, jednak nigdy czegoś takiego nie robiłem i nie wiem jak zakryć cały ekran wraz z paskiem zadań. Z tego co się zorientowałem pomysł z powłoką odpada, bo wymaga restartu komputera w celu uruchomienia programu zamiast explorera, to też odpada. Jak pisałem wyżej, aplikacja ma po prostu działać po uruchomieniu. Nie mogę polegać na tym, że wszyscy się przestraszą komunikatu, bo niech ktoś przez przypadek coś przyciśnie i się okaże, że to tylko groźba? albo jakiś zrezygnowany student specjalnie będzie chciał zobaczyć co się stanie jak uruchomi przeglądarkę, nie mogę na tym polegać.

0

A co jak zaczną ci robić zdjęcia monitora komórką :D?

Gdy mieliśmy takie testy całym rokiem, 100 osób, to dwóch prowadzących nie ogarnie wszystkich na raz. Było 5 grup od 10 do 20 i generalnie przy każdym teście tego typu o godzinie 10.10 zaczynaliśmy rozwiązywać takie zadania, o 10.40 były skończone, odpowiedzi wysyłało się osobom, które nam je wysyłały i każdy był szczęśliwy :D.

Nie wolno nie doceniać studentów!

0

Przed wszystkim nie zabezpieczę tej aplikacji. Sam piszę ten program na pracę inżynierską, więc wiem jak się kombinuje ;)

Wracając do tematu, wyświetliłem już okno aplikacji na pełnym ekranie. Doszedłem do wniosku, że wcale nie potrzebuje klawiatury podczas egzaminu (odpowiedzi będą zaznaczane myszą), więc najprościej byłoby ją całkowicie zablokować. user32.DLL ma funkcje blockinput, ale ona blokuję również mysz. Czy jest jakiś prosty sposób na zablokowanie klawiatury? Oczywiście po egzaminie będzie ona automatycznie aktywowana.

1

Szkoda, że nie spojrzałeś w kod jaki Tobie dałem. To byś wiedział jak zablokowac wszystkie klawisze. Nadal jednak będzie
działać Ctrl+Alt+Del, ale menager zadan można zablokowac poprzez rejestr. Poszukaj było o tym na tym forum albo też w
google na pewno coś znajdziesz. A zablokowanie wszystkich innych klawiszy, można zrobić jak poniżej i pod XP to działa.

//...
const
  WH_KEYBOARD_LL = $000D;
  LLKHF_EXTENDED = $0001;
  LLKHF_INJECTED = $0010;
  LLKHF_ALTDOWN = $0020;
  LLKHF_UP = $0080;

type
  tagKBDLLHOOKSTRUCT = packed record
    vkCode : DWord;
    ScanCode : DWord;
    Flags : DWord;
    Time : DWord;
    dwExtraInfo : integer;
  end;
  KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
  PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;

var
  HKHook : HHook;

function LowLevelKeyboardProc(nCode : Integer; wParam : Integer; lParam : Integer) : Integer; stdcall; export;
begin
  case nCode of
    HC_ACTION :
      begin
        Result := 1;
      end;
  else
    begin
      Result := CallNextHookEx(HKHook, nCode, wParam, lParam);
    end;
  end;
end;

procedure HookIt;
begin
  HKHook := SetWindowsHookEx(WH_KEYBOARD_LL, @LowLevelKeyboardProc, hInstance, 0);
end;

procedure UnHookIt;
begin
  UnHookWindowsHookEx(HKHook);
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
  HookIt;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnHookIt;
end;

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