home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kompon / d23456 / PHANTOM.ZIP / Deutsch / Phantom.pas < prev    next >
Pascal/Delphi Source File  |  2001-06-20  |  17KB  |  583 lines

  1. {
  2.  
  3.  TPhantom Version 7.0
  4.  
  5.   erstellt von Roland Gruber  (delphi@rolandgruber.de)
  6.                               (http://www.rolandgruber.de)
  7.  
  8.   Diese Komponente darf in kommerziellen Anwendungen sowie
  9.   zum privaten Gebrauch verwendet werden, solange der Name
  10.   des Programmierers genannt wird (z.B. in einer Info-Box).
  11.  
  12.   Der Gebrauch der Komponente erfolgt auf eigene Gefahr
  13.   und fⁿr etweige SchΣden wird keine Haftung ⁿbernommen.
  14.   (Auch wenn die Wahrscheinlichkeit dafⁿr eher gering ist.)
  15.  
  16.   Wenn Sie diese Komponente verbessern oder Anregungen
  17.   haben wⁿrde ich mich ⁿber eine e-mail freuen.
  18.   (delphi@rolandgruber.de)
  19.  
  20.   ACHTUNG!!! Das Verstecken vor dem Taskmanager wird unter Windows NT
  21.   nicht unterstⁿtzt und von der Komponente ignoriert.
  22.  
  23.   ErklΣrung der Funktionen:
  24.  
  25.   Sichtbar: legt fest ob das Anwendungsformular sichtbar ist 
  26.             (sollte erst zur Laufzeit gesetzt werden: z.B Form.OnActivate)
  27.   Serviceprocess: versteckt das Programm vor dem Taskmanager(Strg+Alt+Entf)
  28.   Icondatei: Name der .ico-Datei die das Symbol fⁿr Taskleiste
  29.              enthΣlt.
  30.   Iconsichtbarkeit: legt fest, ob das Icon in der Taskleiste
  31.                     sichtbar ist.
  32.   Popuprechts: Name des Popupmenⁿs, das erscheint, wenn der
  33.                Benutzer mit der rechten Maustaste auf das
  34.                Taskleistenicon klickt
  35.   Popuplinks:  Dasselbe wie oben mit Klick auf die linke Taste
  36.   Linksklick:  Ereignis,das ausgel÷st wird, wenn der Benutzer
  37.                mit der linken Maustaste auf das Icon klickt
  38.   Rechtsklick: analog zu oben mit der rechten Taste
  39.   Doppelklick: analog zu oben mit einem Doppelklick
  40.   Blinken: LΣ▀t die SchaltflΣche in der Taskbar einmal blinken
  41.            (!!!nach setzen auf true, wechselt es sofort zurⁿck zu false (vorher blinkt es einmal) !!!)
  42.   Blinkdauer: Legt fest, wie lange(ms) das Blinken anhΣlt
  43.   Prioritaet: PrioritΣt der Anwendung
  44.   MausPosX: Position des Mauscursors auf der x-Achse
  45.   MausPosY: Position des Mauscursors auf der y-Achse
  46.   MausRechtsKlick: simulierter Klick der rechten Maustaste
  47.   MausLinksKlick: simulierter Klick der linken Maustaste
  48.   MausMittelKlick: simulierter Klick der mittleren Maustaste
  49.   Sendstring: simuliert die Eingabe eines Strings ⁿber die Tastatur
  50.               ( unterstⁿtzte Zeichen: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  51.                                       abcdefghijklmnopqrstuvwxyz
  52.                                       1234567890!"º$%&/()=
  53.                                       ,.-;:_ +* )
  54.   Eingabesperre: hiermit kann man Maus und Tastatur sperren: bei esNormal kann der Benutzer noch
  55.                  durch Strg+Alt+Entf die Sperre aufheben, bei esHart nicht mehr
  56.   }
  57.  unit Phantom;
  58.  
  59. interface
  60.  
  61. uses
  62.   Windows, wintypes, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  63.   menus, shellapi, extctrls;
  64.  
  65.   const
  66.   TASKBAREVENT: PChar = 'NewTNIMessage_20';
  67.  
  68. type
  69.  
  70.   TPrioritaet = (Idle, Normal, Hoch, Realtime);
  71.   TSperre = (esHart, esNormal, esKeine);
  72.   TPhantom = class(TComponent)
  73.   private
  74.     fIconDatei: Ticon;
  75.     ftip:string  ;
  76.     fSichtbar: Boolean ;
  77.     fServiceprocess: Boolean ;
  78.     fLinksKlick: TNotifyEvent;
  79.     fRechtsKlick: TNotifyEvent;
  80.     fDoppelKlick: TNotifyEvent;
  81.     fIconSichtbarkeit: boolean;
  82.     fPopupRechts: TPopupMenu;
  83.     fPopupLinks: TPopupMenu;
  84.     fblinken:boolean;
  85.     fblinkdauer:integer;
  86.     fprioritaet: TPrioritaet;
  87.     fcursor: TPoint;
  88.     kerneldll: THandle;
  89.     userdll: THandle;
  90.     fkeycode: string;
  91.     feingabesperre:TSperre;
  92.     { Private-Deklarationen }
  93.     procedure PWsichtbarkeit(value:boolean);
  94.     procedure PWserviceprocess(value:boolean);
  95.     procedure sichtbarmachen;
  96.     procedure unsichtbarmachen;
  97.     procedure WPopRechts;
  98.     procedure WPopLinks;
  99.     procedure CreateIcon;
  100.     procedure ChangeIcon;
  101.     procedure DeleteIcon;
  102.     procedure settip(value:string);
  103.     procedure Wicondatei(value:Ticon);
  104.     procedure WIconSichtbarkeit(value:boolean);
  105.     procedure blink(value:boolean);
  106.     procedure prioritaetsetzen(value:TPrioritaet);
  107.     function  getposx:integer;
  108.     function  getposy:integer;
  109.     procedure setposx(value:integer);
  110.     procedure setposy(value:integer);
  111.     procedure setsendstring(value:string);
  112.     procedure SetSperre(value:TSperre);
  113.   protected
  114.     { Protected-Deklarationen }
  115.     procedure serviceprocessEin;
  116.     procedure serviceprocessAus;
  117.     procedure WRechtsklick; virtual;
  118.     procedure WLinksklick; virtual;
  119.     procedure WDoppelklick; virtual;
  120.     procedure WndProc(var Msg: TMessage);
  121.     procedure Notification(Component: TComponent; Operation: TOperation); override;
  122.   public
  123.     { Public-Deklarationen }
  124.       procedure loaded;override;
  125.       destructor Destroy; override;
  126.       constructor Create(AOwner: TComponent); override;
  127.    published
  128.     { Published-Deklarationen }
  129.     procedure MausRechtsKlick;
  130.     procedure MausLinksKlick;
  131.     procedure MausMittelKlick;
  132.     property Sichtbar: Boolean read fsichtbar write PWsichtbarkeit;
  133.     property Serviceprocess: Boolean read fserviceprocess write PWserviceprocess;
  134.     property IconDatei: Ticon read fIconDatei write Wicondatei;
  135.     property LinksKlick: TNotifyEvent read fLinksKlick write flinksklick;
  136.     property RechtsKlick: TNotifyEvent read fRechtsKlick write fRechtsklick;
  137.     property DoppelKlick: TNotifyEvent read fDoppelKlick write fDoppelklick;
  138.     property IconSichtbarkeit: boolean read fIconSichtbarkeit write WIconSichtbarkeit;
  139.     property PopupRechts: TPopupMenu read fPopupRechts write fPopuprechts;
  140.     property PopupLinks: TPopupMenu read fPopupLinks write fPopuplinks;
  141.     property Tip: string read FTip write SetTip;
  142.     property Blinken: boolean read fblinken write blink;
  143.     property Blinkdauer: integer read fblinkdauer write fblinkdauer;
  144.     property Prioritaet: TPrioritaet  read fprioritaet write prioritaetsetzen;
  145.     property MausPosX: integer read getposx write setposx;
  146.     property MausPosY: integer read getposy write setposy;
  147.     property SendString: string read fkeycode write setsendstring;
  148.     property Eingabesperre: TSperre read feingabesperre write SetSperre;
  149.   end;
  150.  
  151. procedure Register;
  152.  
  153. implementation
  154.  
  155. var ficonmessage: UINT;
  156.     FWnd: HWnd;
  157.  
  158. constructor tphantom.Create(AOwner: TComponent) ;
  159. begin
  160. inherited Create(AOwner);
  161. ficonmessage := RegisterWindowMessage(TASKBAREVENT);
  162. FWnd := AllocateHWnd(WndProc);
  163. FIcondatei := TIcon.Create;
  164. iconsichtbarkeit:=false ;
  165. sichtbar:=true;
  166. serviceprocess:=false;
  167. fblinken:=false;
  168. blinkdauer:=300;
  169. prioritaet:=normal;
  170. kerneldll:=LoadLibrary('kernel32.dll');
  171. userdll:=Loadlibrary('user32.dll');
  172. eingabesperre:=esKeine;
  173. end;
  174.  
  175. destructor TPhantom.Destroy;
  176. begin
  177.   if Ficonsichtbarkeit then deleteIcon;
  178.   FIcondatei.Free;
  179.   DeallocateHWnd(FWnd);
  180.   FreeLibrary(kerneldll);
  181.   Freelibrary(userdll);
  182.   inherited destroy;
  183. end;
  184.  
  185. procedure TPhantom.WndProc(var Msg: TMessage);
  186. begin
  187.   with Msg do begin
  188.     if Msg = ficonmessage then
  189.       case LParamLo of
  190.         WM_LBUTTONDOWN:   WLinksKlick;
  191.         WM_RBUTTONDOWN:   WRechtsKlick;
  192.         WM_LBUTTONDBLCLK: WDoppelKlick;
  193.       end
  194.     else
  195.       Result := DefWindowProc(FWnd, Msg, wParam, lParam);
  196.   end;
  197. end;
  198.  
  199. procedure TPhantom.Notification(Component: TComponent; Operation: TOperation);
  200. begin
  201.   inherited Notification(Component, Operation);
  202.   if Operation = opRemove then begin
  203.     if Component = FPopuprechts then FPopuprechts := nil;
  204.     if Component = FPopuplinks then FPopuplinks := nil;
  205.   end;
  206. end;
  207.  
  208. procedure TPhantom.PWsichtbarkeit(value:boolean);
  209. begin
  210. fsichtbar:=value;
  211. if (csDesigning in ComponentState) then exit;
  212. if sichtbar=true then sichtbarmachen;
  213. if sichtbar=false then unsichtbarmachen;
  214. end;
  215.  
  216. procedure TPhantom.PWserviceprocess(value:boolean);
  217. begin
  218. fserviceprocess:=value;
  219. if serviceprocess then serviceprocessEin;
  220. if not serviceprocess then serviceprocessAus;
  221. end;
  222.  
  223. procedure TPhantom.serviceprocessEin;
  224. type Tregisterservice = function(dwProcessId,dwType:dword): Integer;stdcall;
  225. var registerserviceprocess:Tregisterservice;
  226. begin
  227.   if (csDesigning in ComponentState) then exit;
  228.   @registerserviceprocess:=GetProcAddress(kerneldll, 'RegisterServiceProcess');
  229.   if @registerserviceprocess=nil then exit;
  230.   RegisterServiceProcess(GetCurrentProcessID,1);
  231. end;
  232.  
  233. procedure TPhantom.serviceprocessAus;
  234. type Tregisterservice = function(dwProcessId,dwType:dword): Integer;stdcall;
  235. var registerserviceprocess:Tregisterservice;
  236. begin
  237.   if (csDesigning in ComponentState) then exit;
  238.   @registerserviceprocess:=GetProcAddress(kerneldll, 'RegisterServiceProcess');
  239.   if @registerserviceprocess=nil then exit;
  240.   RegisterServiceProcess(GetCurrentProcessID,0);
  241. end;
  242.  
  243. procedure TPhantom.sichtbarmachen;
  244. begin
  245. if (csDesigning in ComponentState) then exit;
  246. showwindow(FindWindow(nil, @Application.Title[1]),SW_RESTORE)
  247. end;
  248.  
  249. procedure TPhantom.unsichtbarmachen;
  250. var handle:HWND;
  251. begin
  252. if (csDesigning in ComponentState) then exit;
  253. handle:=FindWindow(nil, @Application.Title[1]);
  254. showwindow(handle,SW_MINIMIZE);
  255. showwindow(handle,SW_HIDE) ;
  256. end;
  257.  
  258. procedure TPhantom.WRechtsklick;
  259. begin
  260. if Assigned(FPopuprechts) then WPoprechts
  261.   else if Assigned(FRechtsKlick) then
  262.     FRechtsKlick(Self);
  263. end;
  264.  
  265. procedure TPhantom.WLinksklick;
  266. begin
  267. if Assigned(FPopuplinks) then WPoplinks
  268.   else if Assigned(FLinksKlick) then
  269.     FLinksKlick(Self);
  270. end;
  271.  
  272. procedure TPhantom.WDoppelklick;
  273. begin
  274. if Assigned(Fdoppelklick)then FDoppelKlick(Self);
  275. end;
  276.  
  277. procedure TPhantom.WPopRechts;
  278. var punkt:Tpoint;
  279. begin
  280. GetCursorPos(Punkt);
  281. SetForeGroundWindow(FWnd);
  282. FPopuprechts.Popup(Punkt.X, Punkt.Y);
  283. end;
  284.  
  285. procedure TPhantom.WPopLinks;
  286. var punkt:Tpoint;
  287. begin
  288. GetCursorPos(Punkt);
  289. SetForeGroundWindow(FWnd);
  290. FPopuplinks.Popup(Punkt.X, Punkt.Y);
  291. end;
  292.  
  293. procedure TPhantom.CreateIcon;
  294. var icon: TNOTIFYICONDATA;
  295. begin
  296. with icon do begin
  297.     cbSize := SizeOf(TNOTIFYICONDATA);
  298.     Wnd := FWnd;
  299.     uID := 1;
  300.     uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  301.     uCallbackMessage :=ficonMessage;
  302.     hIcon := FIcondatei.Handle;
  303.     StrCopy(szTip, PChar(FTip));
  304.     Shell_NotifyIcon(NIM_ADD, @icon);
  305.   end;
  306.   ficonsichtbarkeit := true;
  307. end;
  308.  
  309. procedure TPhantom.ChangeIcon;
  310. var icon: TNOTIFYICONDATA;
  311. begin
  312. with icon do begin
  313.     cbSize := SizeOf(TNOTIFYICONDATA);
  314.     Wnd := FWnd;
  315.     uID := 1;
  316.     uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  317.     uCallbackMessage := ficonMessage;
  318.     hIcon := FIcondatei.Handle;
  319.     StrCopy(szTip, PChar(FTip));
  320.     Shell_NotifyIcon(NIM_MODIFY, @icon);
  321.   end;
  322. ficonsichtbarkeit:=true;
  323. end;
  324.  
  325. procedure TPhantom.DeleteIcon;
  326. var icon: TNOTIFYICONDATA;
  327. begin
  328. with icon do begin
  329.     cbSize := SizeOf(TNOTIFYICONDATA);
  330.     Wnd := FWnd;
  331.     uID := 1;
  332.     uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
  333.     uCallbackMessage := ficonmessage;
  334.     hIcon := FIcondatei.Handle;
  335.     StrCopy(szTip, PChar(FTip));
  336.     Shell_NotifyIcon(NIM_DELETE, @icon);
  337.   end;
  338.   ficonsichtbarkeit := false;
  339. end;
  340.  
  341. procedure TPhantom.settip(value:string);
  342. begin
  343. if FTip <> value then begin
  344.     FTip := value;
  345.     changeicon;
  346.   end;
  347. end;
  348.  
  349. procedure TPhantom.Wicondatei(value:Ticon);
  350. begin
  351. if ficondatei<>value then begin
  352.       ficondatei.assign(value);
  353.       if (csDesigning in ComponentState) then exit;
  354.       if ficonsichtbarkeit then changeicon else createicon;
  355.       if ficondatei.empty then deleteicon;
  356.   end;
  357. end;
  358.  
  359. procedure TPhantom.WIconSichtbarkeit(value:boolean);
  360. begin
  361. ficonsichtbarkeit:=value;
  362. if not (csDesigning in ComponentState) then begin
  363.    if ficonsichtbarkeit then createicon;
  364.    if not ficonsichtbarkeit then deleteicon;
  365.    end;
  366. end;
  367.  
  368. procedure TPhantom.Loaded;
  369. begin
  370.   inherited Loaded;
  371.   if Ficonsichtbarkeit and not FIcondatei.Empty then begin
  372.     createIcon;
  373.   end;
  374. end;
  375.  
  376. procedure TPhantom.blink(value:boolean);
  377. begin
  378. fblinken:=value;
  379. if fblinken=false then exit;
  380. flashwindow(application.handle,true);
  381. sleep(fblinkdauer);
  382. flashwindow(application.handle,true);
  383. fblinken:=false;
  384. end;
  385.  
  386. procedure TPhantom.prioritaetsetzen(value:TPrioritaet);
  387. begin
  388. fprioritaet:=value;
  389. if (csdesigning in componentstate) then exit;
  390. case value of Idle : setpriorityclass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
  391.               Normal : setpriorityclass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
  392.               Hoch : setpriorityclass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
  393.               Realtime : setpriorityclass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
  394.    end;
  395. end;
  396.  
  397. procedure TPhantom.MausRechtsKlick;
  398. begin
  399. mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
  400. mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
  401. end;
  402.  
  403. procedure TPhantom.MausLinksKlick;
  404. begin
  405. mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
  406. mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
  407. end;
  408.  
  409. procedure TPhantom.MausMittelKlick;
  410. begin
  411. mouse_event(MOUSEEVENTF_MIDDLEDOWN,0,0,0,0);
  412. mouse_event(MOUSEEVENTF_MIDDLEUP,0,0,0,0);
  413. end;
  414.  
  415. procedure TPhantom.setposx(value:integer);
  416. begin
  417. getcursorpos(fcursor);
  418. fcursor.x:=value;
  419. setcursorpos(fcursor.x, fcursor.y);
  420. end;
  421.  
  422. procedure TPhantom.setposy(value:integer);
  423. begin
  424. getcursorpos(fcursor);
  425. fcursor.y:=value;
  426. setcursorpos(fcursor.x, fcursor.y);
  427. end;
  428.  
  429. function TPhantom.getposx:integer;
  430. begin
  431. getcursorpos(fcursor);
  432. result:=fcursor.x;
  433. end;
  434.  
  435. function TPhantom.getposy:integer;
  436. begin
  437. getcursorpos(fcursor);
  438. result:=fcursor.y;
  439. end;
  440.  
  441. procedure TPhantom.setsendstring(value:string);
  442. var c:byte;
  443. label fertig;
  444. begin
  445. fkeycode:=value;
  446. if length(value)=0 then exit;
  447. while length(value)<>0 do begin
  448. c:=byte(value[1]);
  449. if c>=33 then begin    
  450.   if c<=41 then begin
  451.   c:=(c+16);
  452.   keybd_event(VK_SHIFT, 0, 0,0);
  453.   keybd_event(c, 0, 0,0);
  454.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  455.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  456.   goto fertig;
  457.   end;
  458.  end;
  459. if c>=48 then begin
  460.   if c<=57 then begin
  461.   keybd_event(c, 0, 0,0);
  462.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  463.   goto fertig;
  464.   end;
  465.  end;
  466. if c>=65 then begin
  467.   if c<=90 then begin
  468.   keybd_event(VK_SHIFT, 0, 0,0);
  469.   keybd_event(c, 0, 0,0);
  470.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  471.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  472.   goto fertig;
  473.   end;
  474.  end;
  475. if c>=97 then begin
  476.   if c<=122 then begin
  477.   c:=(c-32);
  478.   keybd_event(c, 0, 0,0);
  479.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  480.   goto fertig;
  481.  end;
  482. end;
  483. if c=58 then begin
  484.   c:=190;
  485.   keybd_event(VK_SHIFT, 0, 0,0);
  486.   keybd_event(c, 0, 0,0);
  487.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  488.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  489.   goto fertig;
  490. end;
  491. if c=59 then begin
  492.   c:=188;
  493.   keybd_event(VK_SHIFT, 0, 0,0);
  494.   keybd_event(c, 0, 0,0);
  495.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  496.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  497.   goto fertig;
  498. end;
  499. if c=95 then begin
  500.   c:=189;
  501.   keybd_event(VK_SHIFT, 0, 0,0);
  502.   keybd_event(c, 0, 0,0);
  503.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  504.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  505.   goto fertig;
  506. end;
  507. if c=167 then begin
  508.   c:=51;
  509.   keybd_event(VK_SHIFT, 0, 0,0);
  510.   keybd_event(c, 0, 0,0);
  511.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  512.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  513.   goto fertig;
  514. end;
  515. if c=61 then begin
  516.   c:=48;
  517.   keybd_event(VK_SHIFT, 0, 0,0);
  518.   keybd_event(c, 0, 0,0);
  519.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  520.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  521.   goto fertig;
  522. end;
  523. if c=42 then begin
  524.   c:=187;
  525.   keybd_event(VK_SHIFT, 0, 0,0);
  526.   keybd_event(c, 0, 0,0);
  527.   keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  528.   keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
  529.   goto fertig;
  530. end;
  531. if c=43 then c:=187;
  532. if c=44 then c:=188;
  533. if c=46 then c:=190;
  534. if c=45 then c:=189;
  535.  keybd_event(c, 0, 0,0);
  536.  keybd_event(c, 0, KEYEVENTF_KEYUP,0);
  537. fertig:
  538. delete(value,1,1);
  539. application.ProcessMessages;
  540. end;
  541. end;
  542.  
  543. procedure TPhantom.SetSperre(value:TSperre);
  544. type Tblockinput = function(value:boolean): Dword;stdcall;
  545. var blockinput:Tblockinput;
  546.     j:integer;
  547. begin
  548.   if (csDesigning in ComponentState) then begin
  549.   feingabesperre:=value;
  550.   exit;
  551.   end;
  552.   @blockinput:=GetProcAddress(userdll, 'BlockInput');
  553.   if @blockinput=nil then begin
  554.   feingabesperre:=value;
  555.   exit;
  556.   end;
  557.   if value=esKeine then begin
  558.    blockinput(false);
  559.    if feingabesperre=esHart then SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@j,0);
  560.   end
  561.   else if value=esNormal then begin
  562.    if feingabesperre=esHart then SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@j,0)
  563.    else blockinput(true);
  564.   end
  565.   else if value=esHart then begin
  566.    blockinput(true);
  567.    SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@j,0);
  568.   end;
  569. feingabesperre:=value;
  570. end;
  571.  
  572. procedure Register;
  573. begin
  574.   RegisterComponents('Roland', [TPhantom]);
  575. end;
  576.  
  577. end.
  578.  
  579.  
  580.  
  581.  
  582.  
  583.