Qt C++ kopieren nur innerhalb Programm erlauben

Gast #2188184
Lesenswert?

Hallo

wie kann ich folgendes Problem lösen?

Ich habe ein Programm geschrieben mit einem textwidget.
Ich möchte, dass der User inner halb des Programms die copy and past 
funktion nutzen kann.
ich möchte aber nicht, dass die Kopierten daten außerhalb meines 
Programms zur Verfügung stehen.

Es gibt einige Programme bei denen das so gemacht wurde.
Wie kann ich das realisieren?

Vielen Dank
Gast #2188210
Lesenswert?

http://msdn.microsoft.com/en-us/library/ms649051(v=vs.85).aspx

A handle to the data in the specified format. This parameter can be 
NULL, indicating that the window provides data in the specified 
clipboard format (renders the format) upon request. If a window delays 
rendering, it must process the WM_RENDERFORMAT and WM_RENDERALLFORMATS 
messages.


man müssten bei dem event nur noch rausbekommen von welchen Prozess die 
daten angefordert werden.
Gast #2188252
Lesenswert?

Vielleicht nicht das schönste, aber ich meine, dass du auf ein Event 
reagieren könntest, bei dem die Maus das Fenster verlässt.

Kannst du in dem Handler dazu nicht einfach die Zwischenablage löschen? 
(Auch wenn mich so ein Verhalten arg nerven würde, wenn ich etwas dort 
habe, die Maus durch das Fenster bewege und danach alles weg ist. 
Müsstest du also ggf. sichern und dir eine "eigene" Zwischenablage 
schreiben.
Gast #2189349
Lesenswert?

Hallo,

Die rechte des Nutzers sollen eingeschränkt werden.
Mit dem Programm wird eine Große menge an Daten erstellt.
Das Knowhow und der Fleiß liegt dabei in der Art und weise wie die Daten 
erstellt werden.

Der Nutzer darf kosten los mit dem Programm Daten erstellen und diese im 
Programm bearbeiten, jedoch soll er die durch unser Programm gewonnenen 
Daten nicht in anderen Programmen von anderen Firmen verwenden können.

Die Weitergabe der Daten ist nur an bestimmte Programme per Datenfile 
möglich. Die anderen Programme kosten dann natürlich Geld.

Wenn einer die Daten per hand Abschreibt oder ein Texterkennungsprogramm 
verwendet nutzt der Schutz nichts, aber sicher wird sich keiner der 
Nutzer die Arbeit machen und 1000 Zeilen abschreiben, denn dann könnte 
er die Arbeit der Software auch per hand machen.
Gast #2190653
Lesenswert?

http://freeclipboardviewer.com/

(Ein) schrieb:
> Vielleicht nicht das schönste, aber ich meine, dass du auf ein Event
> reagieren könntest, bei dem die Maus das Fenster verlässt.
>
> Kannst du in dem Handler dazu nicht einfach die Zwischenablage löschen?
> (Auch wenn mich so ein Verhalten arg nerven würde, wenn ich etwas dort
> habe, die Maus durch das Fenster bewege und danach alles weg ist.
> Müsstest du also ggf. sichern und dir eine "eigene" Zwischenablage
> schreiben.
#2190727
Lesenswert?

entweder Registrierung eines eigenen Clipboardformat - kann ja trotzdem 
einfach Text sein - möglicherweise auch "verschlüsselter" oder komplett 
eigene Zwischenablage und Unterbindung der Normalen.

Aber prinzipiell finde ich das ganze Vorgehen Schrott. Warum sollte man 
sich als Benutzer so bevormunden lassen?
Ich würde das Programm dann einfach nicht nutzen.  Was nützt es mir, 
wenn es die schönsten Berechnungen macht, ich die Ergebnisse dann aber 
nicht nutzen darf.
#2190777
Lesenswert?

basti schrieb:
> somit kann man ganz einfach verschiedene Lizensierungsstufen
> realisieren.
> Und die eingeschränkte Variante ist nun mal kostenlos.
> Ein kaufende Nutzer hat natürlich keine dieser Einschränkungen.
>
> Ganz einfach

Und ganz einfach nicht wirksam realisierbar!

QT muss sich auch Windows-Funktionen für die Darstellung der 
Eingabefelder bedienen. Jedes Eingabefeld wird mit Window Messages 
gesteuert und bekommt so seinen Inhalt gesetzt bzw kann darüber seinen 
Inhalt ausgeben. So sind nun einmal die Windows-Mechanismen, und das 
seit Windows 1.0, sprich daran kann niemand mehr etwas ändern, ohne die 
Kompatibilität zum Teufel zu jagen - auch Microsoft nicht. Du kannst das 
Auslesen der Felder nicht verhindern. Punkt.

Ändere Dein Geschäftsmodell!

fchk
Gast #2190785
Lesenswert?

Frank K. schrieb:
> QT muss sich auch Windows-Funktionen für die Darstellung der
> Eingabefelder bedienen. Jedes Eingabefeld wird mit Window Messages
> gesteuert und bekommt so seinen Inhalt gesetzt bzw kann darüber seinen
> Inhalt ausgeben.

nein, es kann auch alles selber machen - bei SWING konnt man auch nichts 
aulesen. Denn man kann einfach text auf den Devicekontect zeichnen.
Gast #2190820
Lesenswert?

das Programm hat nen wert von ca. 150€ also net so dolle.

wenn sich also jemand die mühe macht und den Crack veröffentlicht, kann 
man den auch finden.
Und aus der Erfahrung von mir bekannten Firmen, weiß ich , dass bei 
einer Klage gegen diese Hoster, welche meist erfogreich ist, viel mehr 
als nur die 150€ rausspringen... soll aber bei uns nicht angewendet 
werden.

Da müssen wir den kopierten Inhalt halt verschlüsseln.
Ist zwar Aufwand , aber was tut man nicht alles für seine Kunden :-)

Aber trotzdem vielen Dank
#2191713
Lesenswert?

> ... einer Klage gegen diese Hoster ...

Wenn du schon mit Recht&Gesetz anfängst:

Ich vermute du benutzt die Qt unter LGPL-Lizenz (Unter GPL wär's nix für 
Kommerzielle Software, und für eine 150€ Software lohnt es sich kaum, 
eine teure Lizenz der QT zu kaufen, bzw. die müsstest du bereits gekauft 
haben, bevor du überhaupt mit dem Programmieren angefangen hast).

Dann hat jeder Anwender deiner Software das RECHT, die Qt.DLL in 
deinem Programm auszutauschen. Das DARFST du nicht verhindern.

Und meine QT.DLL hat im Textedit-Kontext-Menu einen Eintrag "Inhalt in 
Textdatei speichern" ;)
#2191763
Lesenswert?

Schreiben in die Zwischenablage

    int i = 50; // wait for 5 sec
    while(i-- && !OpenClipboard(hwnd)) Sleep(100);

    if(!i) return;

    if(!EmptyClipboard()) return;

    // Allocate a global memory object for the text.
    HGLOBAL hglbCopy = GlobalAlloc(GMEM_DDESHARE, (len +1) * 
sizeof(char));
    if (hglbCopy != NULL)
    {
    // Lock the handle and copy the text to the buffer.
    LPTSTR lptstrCopy = (LPTSTR) GlobalLock(hglbCopy);
    CopyMemory(lptstrCopy, content, len);

    lptstrCopy[len] = 0;    // null character
    GlobalUnlock(hglbCopy); // Place the handle on the clipboard.
    SetClipboardData(CF_TEXT, hglbCopy);
    }

    CloseClipboard();
#2191779
Lesenswert?

Joe Redfish schrieb:
> Vielleicht ein Ansatz:
>
> Die Zwischenablage hat viele Formate.
> Mach ein eigenes mit verschlüsseltem Text.
> Das kannst Du innerhalb Deiner App kopieren da Du es ja dekodieren
> kannst, alle anderen sehen nur Schrott.

dann muss man die QT-Komponenten aber so manipulieren, das die 
Standardmechanismen für Copy+Paste unterdrückt werden.
Damit begibt man sich auf das rechtlich dünne Eis, was ernst eufgezeigt 
hat.

Kan natürlich sein, dass man das auch von außen, also ohne Änderung der 
dlls Unterdrücken kann - glaub ich aber kaum, da Tesxt zu kopieren eine 
ziemlich tief verwurzeltes Feature ist, dass schon jedes standardelement 
der WinApi beherrscht
Gast #2191933
Lesenswert?

Eigenen FormatTyp für die Zwischenablage funktioniert. Die eigene 
Komponente muss hierbei den Handler überschreiben. Hab ich vor Jahren 
schon einmal so in eine Applikation einbauen müssen.
Grund für diese Benutzergängelung - Datenschutz.
So etwas kann auch sinnvoll sein - hier war es ein Programm zur 
Abwicklung von Supportfällen in einem Callcenter. Hier wurden vom 
Auftraggeber "alle" Kundendaten ans Callcenter übergeben - Ein User mit 
einem Problem konnte damit identifiziert werden --- musste nicht noch 
mal seine Adresse komplett durchgeben (Historie ..) usw.
Da dem Auftraggeber aber schon Kundendaten weggekommen sind (ging durch 
die Medien) musste sichergestellt werden das alles dicht war. Auch 
copy&paste.

Gruß
  Slartibartfaß
Gast #2192021
Lesenswert?

Na dann halt nur die Objektreferenz in die Zwischenablage. Die Referenz 
enthält dann quasi nur einen Zeiger. Den darf dann auch jeder sehen. Die 
eigene Applikation kann sich dann alle information die sie braucht 
besorgen. Aber mit der Referenz kann von außen keiner von auf den 
Speicher zugreifen (protected).
Da fällt mir noch was ein .... wenn die App. irgend etwas ablegen soll 
wo keiner anderer rankommen soll - bei .NET gibts IsolatedStorage - 
praktisch für Einstellungen vom Programm.

Gruß
  Slartibartfaß
#2192167
Lesenswert?

Slartibartfaß schrieb:
> Da fällt mir noch was ein .... wenn die App. irgend etwas ablegen soll
> wo keiner anderer rankommen soll - bei .NET gibts IsolatedStorage -
> praktisch für Einstellungen vom Programm.

Ach und du glaubst der Ram ist vor anderen Programmen sicher? Da gibts 
genügend Tools. Mit einem hab ich mal in einem Spiel gecheated indem ich 
den Ram manipuliert habe. Funktioniert ohne Probleme.
#2192172
Lesenswert?

Samuel K. schrieb:
> Ach und du glaubst der Ram ist vor anderen Programmen sicher?

Geht es hier nicht eh nur darum, eine halbwegs wirksame Hürde 
aufzubauen? Dass absolute Sicherheit nicht geht ist doch klar. Es geht 
nur darum, es so aufwendig zu machen, dass der Nutzer lieber $$$ 
investiert, statt sich auf eine Reverse-Engineering-Odyssee zu begeben.

Viele Grüße,
        Simon
#2192250
Lesenswert?

Joe Redfish schrieb:
> Der ScreenPrintHandler muss das entschlüsseln wenn er den Bildschirm
> schreiben möchte.

Und der Mensch, der den Text lesen soll, auch?

Ich weiß ja nicht wie das bei dir ist, aber AES im Kopf entschlüsseln 
kriege ich auch bei bekanntem Key nicht hin.


Gibt aber Windows-Bordmittel um Screenshot&Co zu verhindern, wurden zum 
"Sicheren" BluRay-Abspielen eingeführt. Die App läuft dann halt nur noch 
mit Zertifizierter VGA/Monitor Kombi.
Gast #2193641
Lesenswert?

Ich mag es eigentlich nicht, so negativ zu schreiben, aber ich habe zu 
viele junge ambitionierte Programmierer (mich selbst eingeschlossen) 
scheitern gesehen, als dass ich die Alarmglocken, die gerade in meinem 
Kopf erklingen, ignorieren könnte. Nimm es also nicht als Beleidigung:

basti schrieb:
> oh je
> fühl mich grad wien blutiger anfänger.

Vielleicht solltest Du Dich mal einfach auf Deine Gefühle verlassen..

> Bei Qt ist das alles schön in vorgefertigten methoden verpackt...
> da hab ich mich somit noch nie mit der grundmaterie auseinandersetzten
> müssen.

Wissen Deine Kunden eigentlich, dass Du programmiertechnisch auf 
Hobbyniveau - sorry - herumfrunzelst?

> na mal sehn ... ob ich das hinbekomme ?!?!?!

Wenn Du Dich eine Weile mit der Windows-API und den MFC beschäftigst, 
noch ein wenig Erfahrung als Entwickler in professionellen Projekten 
sammelst, und dabei mindestens ein mal auf die Nase fällst, bestimmt.
Gast #2299480
Lesenswert?

oh da hab ich aber eine diskussion angefangen.

Simon Budig schrieb:
> Geht es hier nicht eh nur darum, eine halbwegs wirksame Hürde
> aufzubauen? Dass absolute Sicherheit nicht geht ist doch klar. Es geht
> nur darum, es so aufwendig zu machen, dass der Nutzer lieber $$$
> investiert, statt sich auf eine Reverse-Engineering-Odyssee zu begeben.

Wenigstens einige haben den Sinn verstanden.

Das ich kein Informatiker/ Programmierer bin weiß ich, aber immerhin hat 
man selbst als reiner maschinenbauer einige Programm ideen. Und nen 
professionellen Programmierer zu beauftragen, das lohnt sich für den 
Anfang nicht.

Ich wollte aber gern jedem die möglichkeit geben, das Programm in vollem 
Umfang zu testen. (Niemand will ja die Katze im Sack kaufen.)
Damit es aber nicht als freeware verwendet werden kann, sollte 
verhindert werden, dass der Nutzer die erstellten Daten aus meinem 
Programm in ein anderes Programm zur Weiterverarbeitung kopieren kann.

Das es immer einen Weg gibt ist mir schon klar, aber mir ging es auch 
nur um eine Hürde, so wie Simon Budig das schon gesagt hat.

Trotzdem vielen Dank für die ganzen Hinweise.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren