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
ich weiss das es unter windows eine möglichkeit gibt das beim copieren nur eine Referenz in die zwischenablage gelegt wird. Beim einfügen wird dann erst der Prozess nach den Daten gefragt. Da könnte ich mir vorstellen das man es verhindern kann. Eventuell gibt es das ja auch unter linux.
benötigt wird es für QT unter windows. hab nur keine vorstellung wie ich das softwaretechnisch lösen kann.
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.
oh je fühl mich grad wien blutiger anfänger. Bei Qt ist das alles schön in vorgefertigten methoden verpackt... da hab ich mich somit noch nie mit der grundmaterie auseinandersetzten müssen. na mal sehn ... ob ich das hinbekomme ?!?!?!
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.
cool das würde natürlich acuh gehn ...danke für die idee
Du kannst natürlich auch ganz einfach ein Renderformat verwenden, dass ausser deinem Programm niemand anderer beherrscht. Dann bleiben die Daten zwar die ganze Zeit im Clipboard, aber andere Programme können damit ganz einfach nichts anfangen.
abend Karl Heinz, das klint interessant, da ich es auch dann für die Speicherung von daten verwenden könnte. Kannst du mir sagen, wie ich soetwas programmieren müsste? Vielleicht mit einem Beispiel.
Das müsste mit einem Zusammenspiel aus http://doc.trolltech.com/latest/qclipboard.html und http://doc.qt.nokia.com/latest/qmimedata.html gehen. Insbesondere im letzten Link den Abschnitt: "There are three approaches for storing custom data in a QMimeData object:" bzw. Platform-Specific MIME Types lesen.
PS. Das heißt nicht RenderFormat sondern einfach nur Clipboard Format. Nur für den Fall, dass du noch weiter googeln willst.
ok schon mal vielen dank, jetzt weiß ich schon mal nach was ich suchen muss werd mich morgen mal auf den weg machen Gut nacht
Hat das dann irgendeinen praktischen Nutzwert, außer den Benutzer vom Arbeiten abzuhalten? Sofern QT nativ benutzt wird, kommt man doch gewiss auch über die klassische WinAPI an den Inhalt des Textfeldes, wenn man möchte.
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.
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.
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.
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
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
wie viel Kenntnis braucht man denn um den Inhalt des Textfeldes in der Software auszulesen, im Fall, dass die Copy und Paste Funktion deaktiviert ist.
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.
basti schrieb: > wie viel Kenntnis braucht man denn um den Inhalt des Textfeldes in der > Software auszulesen, im Fall, dass die Copy und Paste Funktion > deaktiviert ist. Es reicht, ein Programm mitlaufen zu lassen, das die Window Messages mitprotokolliert. Beim Visual Studio ist zB sowas dabei. fchk
ist halt ne Frage des Preises und der Zielgruppe. Wenn das Programm 20€ kostet, wird sich keine Firma die Mühe machen, den "Schutz" zu umgehen. Wenn das Programm für beliebige Anwender interessiert ist, findet sich auch bei 2,50€ einer, der aus (Ehr)geiz da nen Patch/Crack/Auslesetool schreibt.
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
basti schrieb: > 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. Du willst gegen einen Entschlüsslungsalgorithmus klagen? Na dann viel Spaß.
> ... 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" ;)
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.
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();
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
Alles QT so lassen, Zwischenablage einfach überschreiben. Ansonsten würde ich mir es gern anschauen, dann hat das Glaskugelschauen ein Ende. -> PM
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ß
Slartibartfaß schrieb: > Eigenen FormatTyp für die Zwischenablage funktioniert. Kann vielleicht nicht mit Word auslesen, mit einer Programmiersprache aber schon.
zeigt alles an, speichern inklusive http://freeclipboardviewer.com/ Samuel K. schrieb: > Kann vielleicht nicht mit Word auslesen, mit einer Programmiersprache > aber schon.
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ß
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.
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
Ich meine "Crypten" wäre die Lösung. Mit einem symmetrischen Verfahren, z.B AES Der ScreenPrintHandler muss das entschlüsseln wenn er den Bildschirm schreiben möchte. Das steht also nirgendwo als UNICode oder Text im Speicher, nur als Bitmap.
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.
Security by obscurity und broken by design, wie immer. Den Nutzer möglichst weitgehend nerven, einschränken und bei der Arbeit behindern, das ist die Devise :-)
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.