Entwickler-Ecke

WinForms - Kontextmenüs in Windows Forms unterbinden


Felix2000 - Mi 17.08.11 11:31
Titel: Kontextmenüs in Windows Forms unterbinden
Hi Folks !

Ist es eigentlich ohne weiteres möglich, sämtliche Kontextmenüs in den Windowsforms zu unterbinden? Also der Benutzer kann zwar immernoch einen rechten Mausklick über meiner Benutzeroberfläche durchführen, ihm sollen allerdings kerinerlei Kontextmenüs mehr angezeigt werden (z.B. die "windowsinternen Kontextmenüs" zum Kopieren und Einfügen von Daten bspw.).

Ich möchte dadurch eine gewisse Sicherheit meiner Daten erlangen, auch wenn dieses natürlich kein endgültiger Schutz der Daten sicherstellt. Kann man so etwas bewerkstelligen?

Greetz
Felix


Felix2000 - Do 18.08.11 08:51

Kann mir wirklich keiner weiterhelfen?


bakachan - Do 18.08.11 08:58

Setze doch einfach ein eigenes (leeres) Kontextmenü an den Controls.

Aber selbst wenn du die Kontextmenüs unterbindest, was hält den Benutzer davon ab einfach Strg+C / Strg+V zu drücken?


Felix2000 - Do 18.08.11 09:09

user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
Aber selbst wenn du die Kontextmenüs unterbindest, was hält den Benutzer davon ab einfach Strg+C / Strg+V zu drücken?


Genau darauf zielte ja meine Frage ab, wie kann man es gänzlich verhindern, dass Daten von einer GUI kopiert werden können!?

Greetz
Felix


Th69 - Do 18.08.11 09:25

Hallo Felix,

dann benutze für das Anzeigen der Daten eben keine Standard-Windows-Controls (wie TextBox, RichTextBox etc.), sondern entweder nur das Label-Control oder zeichne die Texte alle selber (im Paint-Ereignis mittels e.Graphics.DrawString()).

Wenn du schon WinAPI-Erfahrung hast (was ich ersteinmal nicht annehme), dann könntest du auch die entsprechenden Messages über die WndProc-Methode [http://msdn.microsoft.com/de-de/library/system.windows.forms.control.wndproc.aspx] rausfiltern.


Ralf Jansen - Do 18.08.11 09:40


C#-Quelltext
1:
Genau darauf zielte ja meine Frage ab, wie kann man es gänzlich verhindern, dass Daten von einer GUI kopiert werden können!?                    


Denn Rechner nicht einschalten. Letztlich kann ich einfach einen Screenshot machen oder irgendeine Art von Screenreader verwenden dem egal ist was deine Anwendung verhindert.


Felix2000 - Do 18.08.11 09:47

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
Genau darauf zielte ja meine Frage ab, wie kann man es gänzlich verhindern, dass Daten von einer GUI kopiert werden können!?                    


Denn Rechner nicht einschalten. Letztlich kann ich einfach einen Screenshot machen oder irgendeine Art von Screenreader verwenden dem egal ist was deine Anwendung verhindert.


Diese Idee ist mir auch bereits gekommen, aber ich glaube das wäre bei zich tausend relevanten Datensätzen ein Aufwand, den wohl nur die Wenigsten auf sich nehmen würden.

Klar, komplett verhindern werde ich das wohl nie können, dass sich jemand an meinen Daten bedient, aber zumindest deutlich erschweren und für den Schnüffler sehr nervig gestalten.

Greetz
Felix


Ralf Jansen - Do 18.08.11 10:02

Zum schwermachen würde ich eine IMessageFilter [http://msdn.microsoft.com/en-us/library/system.windows.forms.imessagefilter.aspx] implementieren und alle relevanten Mouse und Keyboard Messages wegfiltern so das sie die UI nicht mehr erreichen.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private class MeinUserNervenderMessageFilter : IMessageFilter
{
    public bool PreFilterMessage(ref Message m)
    {       
        if ((m.Msg == WM_KEY_XXXX) ||  ... u.s.w  ) // alle zu filternden Messages oder Messagebereiche aufzählen vielleicht noch auf eine Menge bstimmter Controls einschränken
            return true;
        return false;
    }
}


Denn müßtest du dann noch zum richtigen Zeitpunkt registrieren und wieder deregistrieren.


C#-Quelltext
1:
2:
3:
MeinUserNervenderMessageFilter messageFilter = new MeinUserNervenderMessageFilter ();
Application.AddMessageFilter(messageFilter );
Application.RemoveMessageFilter(messageFilter );