| Autor |
Beitrag |
JackBaur
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 628
Erhaltene Danke: 1
|
Verfasst: 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
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mo 04.04.05 19:58
pack einfach diesen code hier in einen timer:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure clrdesk; var pc: tcanvas; ph: hdc; tr: trect; begin ph := getdc(0); pc := tcanvas.Create ; pc.Handle := ph; 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: Mo 04.04.05 20:09
Aha, und wie beende ich die ganze sache wieder?? Das hab ich noch nicht ganz kapiert...
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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:
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 := 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.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 := 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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:
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); var pc: tcanvas; tr: trect; dc: HDC; begin pc := tcanvas.Create; DC := getdc(0); pc.Handle := DC; 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); 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
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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 
Hält's aus hier
Beiträge: 5
|
Verfasst: 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
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: 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
|
Verfasst: Mi 06.04.05 14:17
Mann, Mann, Mann.
LOCKWORKSTATION
|
|
|