Autor Beitrag
JackBaur
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 04.04.05 19:36 
Hi,

also erstmal ich bin ein totaler Delphi-Anfänger. Ich habe zwar schon einen anfängerkurs an meiner Schule belegt, und ein Einsteigerbuch gelesen, aber von dem meisten, das ihr hier im Forum so schreibt versteh ich nur Bahnhof.

So und jetzt zu meiner Frage:
Ich versuche gerage ein Programm zu schreiben, welches den kompletten bildschirm schwarz (oder irgendeine andere Farbe) werden lässt, so dass nichts mehr zu sehen ist, nichts vom Desktop und nichts von der Startleiste. Mein Gedanke war dann, dass sich die "Blockade" nur durch eingabe eines Passworts aufheben lässt. (Im Prinzip so, wie wenn ich mich abmelde)

Als Ansatz hab ich mir überlegt, ich nehme eine Form, färbe die mit "form1.color := clblack" schwarz. Dann stelle ich in den Eigenschaften "borderstyle" auf "bsnone", sodass ich die Form nichtmehr so einfach schließen kann.
Dabei hatte ich allerdings einige Probleme: zum einen hat die Form nicht den kompletten Desktop bedeckt, egal wie groß ich sie gemacht hab (die Startleiste zB wurde nie überdeckt, und ein kleiner Rand oben am Bildschirm auch nicht).
Auch müsste die Form immer im Vordergrund bleiben, so dass keine anderen Fenster etc. "treten" können.

Ist mein Ansatz da total Falsch, und habt ihr einen anderen Vorschlag, oder kann ich den irgendwie verbessern?

Ich bin dankbar für jede Hilfe, ich hoffe ihr könnt mir helfen.

P.S. ich hab Windows XP und Delphi 7
wdbee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 628
Erhaltene Danke: 1



BeitragVerfasst: Mo 04.04.05 19:49 
Sowas geht schon, aber es ist sehr aufwendig, wenn es denn wirklich schützen soll.
Ich habe hier im Forum unter Win 32 API - XPLocked RFC mal eine Demo zum Test bereitgestellt, um zu zeigen, was geht.

Aber ich denke, dass ist nicht gerade DAS Thema, um programmieren zu lernen.
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 04.04.05 19:58 
pack einfach diesen code hier in einen timer:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure clrdesk;
// author : retnyg
var pc: tcanvas;
    ph: hdc;
    tr: trect;
begin
   ph := getdc(0);
   pc := tcanvas.Create ;
   pc.Handle := ph;
//   tr := rect(0,0,getsystemmetrics(SM_CXSCREEN),getsystemmetrics(SM_CYSCREEN));
   tr := pc.ClipRect;
   pc.Brush.Color := clblack;
   pc.FillRect(tr);
   pc.TryLock;
   pc.Free;
   releasedc(0,ph);
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...


Zuletzt bearbeitet von retnyg am Di 05.04.05 14:56, insgesamt 1-mal bearbeitet
JackBaur Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 04.04.05 20:09 
Aha, und wie beende ich die ganze sache wieder?? Das hab ich noch nicht ganz kapiert...
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Mo 04.04.05 20:21 
dazu müsstest du als erstes einen "screenshot machen", mit copyrect und in ein tbitmap speichern...
wird das richtige passwort eingegeben, füllst du den canvas wieder mit dem gespeicherten bitmap.

ungefähr so:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var pc: tcanvas;
    tr: trect;
begin
   pc := tcanvas.Create;
   tempbmp := tbitmap.create;
   pc.Handle := getdc(0);
//   tr := rect(0,0,getsystemmetrics(SM_CXSCREEN),getsystemmetrics(SM_CYSCREEN));
   tr := pc.ClipRect;
   tempbmp.Width:=tr.Right;
   tempbmp.height:=tr.bottom;
   tempbmp.Canvas.CopyRect(tr,pc,tr);
   pc.Brush.Color := clblack;
   pc.FillRect(tr);
   pc.TryLock;
//   pc.Copyrect(tr,sc.Canvas ,tr);
   pc.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var pc: tcanvas;
    ph: hdc;
    tr: trect;
begin
   ph := getdc(0);
   pc := tcanvas.Create;
   pc.Handle := ph;
//   tr := rect(0,0,getsystemmetrics(SM_CXSCREEN),getsystemmetrics(SM_CYSCREEN));
   tr := pc.ClipRect;
   pc.Brush.Bitmap:=tempbmp;
   pc.FillRect(tr);
   pc.Free;
   tempbmp.Free;
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JackBaur Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 05.04.05 14:40 
Also ich hab deinen zweiten Quelltext in 2 buttons gepackt, aber er funktioniert nicht.
Immer bei der Zeile mit "tempbmp" meldet Delphi ne Fehlermeldung. Brauch ich da noch irgendwas dazu.

Und dann hab ich noch ne Frage: Welcher Button ist zum starten und welcher zum beenden des "BlackScreens"?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.04.05 14:53 
ich habe das noch etwas optimiert, die fehlermeldung kam weil du tempbmp als globale variable deklarieren musst, so wie hier:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
var
  Form1: TForm1;
  tempbmp: tbitmap;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
// alles schwarz machen, davor wird screenshot in tempbmp abgelegt;
var pc: tcanvas;
    tr: trect;
    dc: HDC;
begin
   pc := tcanvas.Create;
   DC := getdc(0);
   pc.Handle := DC;
//   tr := rect(0,0,getsystemmetrics(SM_CXSCREEN),getsystemmetrics(SM_CYSCREEN));
   tr := pc.ClipRect;
   if not assigned(tempbmp) then begin 
     tempbmp := tbitmap.create;
     tempbmp.Width:=tr.Right;
     tempbmp.height:=tr.bottom;
     tempbmp.Canvas.CopyRect(tr,pc,tr);
   end;
   pc.Brush.Color := clblack;
   pc.FillRect(tr);
   pc.TryLock;
   pc.Free;
   releasedc(0,DC);
end;

procedure TForm1.Button2Click(Sender: TObject);
// screenshot wird wieder drüber gemalt
var pc: tcanvas;
    DC: hdc;
    tr: trect;
begin
   if assigned(tempbmp) then begin
     DC := getdc(0);
     pc := tcanvas.Create;
     pc.Handle := DC;
     tr := pc.ClipRect;
     pc.Brush.Bitmap:=tempbmp;
     pc.FillRect(tr);
     pc.Free;
     releasedc(0,DC);
     tempbmp.Free;
     tempbmp := nil;
   end;
end;

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...


Zuletzt bearbeitet von retnyg am Di 05.04.05 15:32, insgesamt 1-mal bearbeitet
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.04.05 15:07 
ich habe noch nen kleinen bug behoben.
vergiss nicht die desktop-schwarz prozedur in einen timer zu schmeissen, der das jede sekunde macht, ausser dein passwort dialog ist gerade auf dem schirm. ansonsten kann man nämlich per mausbewegung das bild teilweise wieder sichtbar machen...

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
JackBaur Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 05.04.05 15:47 
So also funtktionieren tuts jetzt, allerdings noch nicht so wie ich will :(

Denn, da das Schwarz nur drübergemalt wird, kann ich auch trotzdem noch auf Windows zugreifen. Ich wollte ein Programm, dass den Bildschirm schwart färbt, und ich nicht mehr auf WIndows zufreifen kann, bis ich irgendwo ein Passwort eingegeben habe. (vllt war das aus meinem ersten Post nich ganz erstchtlich).

Oder, falls das mit einfachen Mitteln nicht zu verwirklichen ist (wie gesagt, ich bin Delphi-Anfänger), kennt jemand ein Programm, oder hat eins, möglichst Freeware, das genau das macht^^?
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: Di 05.04.05 20:34 
ja: man nehme einen bildschirmschoner, und aktiviere den passwortschutz.

btw: wenn der bildschirm per timer in einem kurzen intervall immer wieder gefärbt wird, nützt es dem "angreifer" auch nichts, dass mal vielleicht ganz kurz beim drüberfahren irgendwelche icons erscheinen...

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.04.05 14:17 
Mann, Mann, Mann. :roll:

Suche im MSDN LOCKWORKSTATION