Just nu i M3-nätverket
Gå till innehåll

Förhindra screenshots tagning


misterbond

Rekommendera Poster

Hej,

 

Det finns några program som kan användas till att ta screenshots av skärmen.

Jag undrar om det finns någon elegant metod som kan förhindra användningen av ett sådant program då mitt eget program är igång. Jag vill alltså förhindra användarna att ta en screenshot av mitt program.

 

Tack på förhand

 

 

Länk till kommentar
Dela på andra webbplatser

Det låter som en svår uppgift med tanke på att knappen PrintScreen ger en bild av skärmen i utklipp.

 

Kanske bör Du fråga dig varför du vill förhindra screenshots av Ditt program?

 

 

 

Länk till kommentar
Dela på andra webbplatser

För närvarande går det inte att förhindra. Tillverkarna håller på att utveckla ett system där de bl.a. vill kunna förhindra detta, men det kommer inte att lyckas av minst tre anledningar:

 

Allt går att hacka mjukvarumässigt förr eller senare

Du kan koppla till en box som säkerhetssystemet accepterar (fejkar att vara en monitor med HD-möjlighet, men skickar vidare okrypterat ut)

Du kan alltid plåta av skärmen med en kamera

 

Svårare kan man alltid göra det, men förhindra det...? Njaa... ;-)

 

Länk till kommentar
Dela på andra webbplatser

Det låter som en svår uppgift med tanke på att knappen PrintScreen ger en bild av skärmen i utklipp.

Den går förvisso att blockera fast det kommer fortfarande inte att gå att fungera screenshots så länge man vill att programmet ska synas på skärmen.

 

Kanske bör Du fråga dig varför du vill förhindra screenshots av Ditt program?

Eller framförallt, vad man tror att användarna får ut av det.

 

 

Länk till kommentar
Dela på andra webbplatser

Jag testade lite snabbt att i Excel VBA skriva följande:

[color="#0000ff"]Private[/color] [color="#0000ff"]Sub[/color] UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
[color="#0000ff"]MsgBox[/color] KeyCode
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

Formuläret svarade på alla tangenttyrckningar utom just PrintScreen.

Det går kanske att blockera på annat sätt, men då måste väl ditt program vara aktiverat (alternativt att man gör en applikation som på något sätt är integrerad med OS:et och fångar upp just PrintScreen).

 

Om man har ditt program sida vid sida med t.ex. Anteckningar och aktiverar just Anteckningar och sedan tar en skärmdump..

 

Lycka till iaf =)

 

Länk till kommentar
Dela på andra webbplatser

Du kan ju alltid fånga upp tangentbordet med en hook (SetHookEX) och när Print Scrn trycks så rensar du Cliboard:en. Men Print Scrn är ju inte det enda sättet att ta screenshots på, det finns API-anrop som kan användas för att fånga skärminnehållet, så något heltäckande skydd kan du inte skapa.

 

Men jag upprepar tidigare ställd fråga, varför ska du hålla på och ge dig in i det där? Du ska respektera folks rätt att använda sin dator som den är tänkt att fungera och inte blockera dess funktionalitet på något sätt.

 

 

Länk till kommentar
Dela på andra webbplatser

En variant är ju att använda "hardware overlay" (http://en.wikipedia.org/wiki/Screenshot#Hardware_overlays), vilket, om jag förstår saken rätt, i princip innebär att man skriver direkt till grafikminnet. Det används framförallt av videospelare och spel av prestandaskäl (det går ju ofta inte att få med filmer i skärmdumpar).

 

Det är absolut inget jag rekommenderar att du gör, det finns en hel del nackdelar med att göra så (t ex att inte alla grafikkort stöder det) och jag har absolut ingen aning om hur du fixar det i VB och Windows.

 

Sen går det ju alltid att komma runt det genom att ta kort på skärmen med en kamera, köra programmet i t ex VMWare eller använda hårdvara som tillåter en att komma åt grafikminnet.

 

Varför vill du inte att användare ska kunna ta skärmdumpar?

 

Länk till kommentar
Dela på andra webbplatser

En variant är ju att använda "hardware overlay" (http://en.wikipedia.org/wiki/Screenshot#Hardware_overlays), vilket, om jag förstår saken rätt, i princip innebär att man skriver direkt till grafikminnet.

Jepp, men för att det ska fungera med en normal applikation måste du simulera hela GUI:t. Alla komponenter i Windows går att rita ut på en minnesbaserad DC som sen bitblt:as in i grafikminnet men bara en sån sak som att göra ett fält editerbart blir rätt omständigt.

 

Och att ge sig på att göra det i VB känns rätt korkat, man hinner göra rätt mycket normal utveckling på den tiden man lär behöva lägga ner utan att veta om man ens kommer i mål :-)

 

Länk till kommentar
Dela på andra webbplatser

"det går ju ofta inte att få med filmer i skärmdumpar"

Stänger man av "video acceleration" så går det alltid. Så jag tror inte Misterbond kommer lyckas med att förhindra skärmdumpar.

 

Länk till kommentar
Dela på andra webbplatser

Det beror väl snarare på att om stöd för "hardware overlay" saknas, så använder programmen andra metoder för att rita. Man skulle kunna göra ett program som vägrar köra utan hardware overlay (undrar vad det kan tänkas kallas på svenska...).

 

Men som sagt, det är absolut ingen bra lösning, och om man kan se det kan man fånga det (om man så behöver använda en kamera). Frågan är fortfarande

varför misterbond vill förhindra skärmdumpar.

 

Länk till kommentar
Dela på andra webbplatser

Tack för informationen.

 

Anledningen till att jag inte vill att användarna ska kunna ta skärmdumpar av mitt program är att jag tänker vissa de några värdefulla bilder och jag nöjer mig inte med en copyright signatur. Användning av en digitalkamera skulle inte ge ett för stort kvalité.

 

Att bli av med Print Screen knappen verkar inte så svårt, men det är de andra metoderna som verkar vara lite mer komplicerade.

 

Jag har kommit på en idé: om jag kollar vilka program som är igång på användarens datorn; Mitt program skulle kunna vissa bilderna bara om användaren stänger av alla de andra programmen som är igång. Så fort han försöker öppna ett annat program så gömmer mitt program bilderna.

Vad sägs om det här? Hur skulle jag kunna kolla vilka program som är igång och hur skulle jag kunna stänga av dem?

 

 

Länk till kommentar
Dela på andra webbplatser

Om du har så låg tilltro till dina användare så verkar det som en dålig idé att överhuvudtaget ge dem tillgång till bilderna.

 

Annars kan du ju alltid bara ge dem en förminskad version av bilden.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Annars kan du ju alltid bara ge dem en förminskad version av bilden.

Eller lägg vattenstämplar på bilderna

 

Länk till kommentar
Dela på andra webbplatser

Vad sägs om det här? Hur skulle jag kunna kolla vilka program som är igång och hur skulle jag kunna stänga av dem?

 

Det låter som om du är totalt ute och cyklar - men sjutton vill ha ditt program om det skulle hålla på och stänga av andra program?

 

Om det är orginalen du vill skydda får du göra som zerblat skriver - visa helt enkelt inte orginalen i sin helhet.

 

Om det är känsliga bilder som inte får komma på villoväger - se till att programmet inte används utanför en kontrollerad miljö där man inte kan ta med sig kopierade bilder.

 

[Edit]Annars blir det ju en användning för Sony Rootkit - då kan man dra igång program i alla fall, trots att du kontrollerar vilka program som körs. Se bara vad som hände WoW... ;)

 

[inlägget ändrat 2005-12-07 16:43:47 av lizardKng]

Länk till kommentar
Dela på andra webbplatser

men sjutton vill ha ditt program om det skulle hålla på och stänga av andra program?

Jo precis, det börjar låta som Sony - ta över datorn och låt bara användarna göra vad vi tycker de får göra.

 

EDIT: lizardKng lade till: "Annars blir det ju en användning för Sony Rootkit"

Hehe, vi ligger på samma våglängd idag

[inlägget ändrat 2005-12-07 16:45:26 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Låt programmet lägga på en vattenstämpel över bilden på något käckt sätt, och låt användarens dator och program vara. Ett gott råd i all välmening... :)

 

Länk till kommentar
Dela på andra webbplatser

Vad jag har läst av denna tråd så skulle jag gå till väga såhär:

 

Först av allt trappa och avaktivera printscreen knappen i ditt program då fönstret är aktivt...

 

Lägg en vatten stämpel på bilden för att "förstöra" den när programmet/Fönstret blir inaktivt eller göm bilden helt...

Och när programmet/fönstret är aktivt så visas de, det löser problemet med att öppna notepad brevid och ta en printscreen..

 

Skulle också identifiera vissa program som snagit etc. för att inte låta dessa processer att köras.. tex så skulle man kunna suspenda dessa processer medans din application är aktiv..

Gjorde ett uppslag på google om att suspenda andra processer och det finns ett par alternativ till det..

 

"Use NtQuerySystemInformation to enumerate the threads of your process (Thread

IDs) and NtOpenThread to get the handles...

...then you can call SuspendThread to freeze them.

 

Both, NtOpenThread and NtQuerySystemInformation are undocumented.

Query the newsgroups for them... There are some examples

"

 

/Henrik

 

Länk till kommentar
Dela på andra webbplatser

Skulle också identifiera vissa program som snagit etc. för att inte låta dessa processer att köras.. tex så skulle man kunna suspenda dessa processer medans din application är aktiv..

 

Detta hindrar ju inte att man skriver ett eget program som via GetDC kopierar fönsterinnehållet.

 

Nä, mitt svar förblir att du ska hålla dig till vattenstämplade, nedskalade eller på annat sätt förvanskade/försämrade bilder och glömma tanken på att interferera i folks system.

 

Länk till kommentar
Dela på andra webbplatser

Först av allt trappa och avaktivera printscreen knappen i ditt program då fönstret är aktivt..

Vill man bli utkastad fort som fan så...

 

Och när programmet/fönstret är aktivt så visas de, det löser problemet med att öppna notepad brevid och ta en printscreen..

Men det löser inget som helst problem i övrigt eftersom det normala när man tar ett screen shot är att man gör det på ett aktivt fönster.

 

Skulle också identifiera vissa program som snagit etc. för att inte låta dessa processer att köras

Dömt att misslyckas och skapar förmodligen bara mer problem än det löser. Vad ska han göra, slå ihjäl processerna hårt? Det lär ju vara poppis hos varsig användarna eller deras operativsystem.

 

Gjorde ett uppslag på google om att suspenda andra processer och det finns ett par alternativ till det..

Använder han de förslagen är han nästan garanterad att råka illa ut, bägge funktionerna är dokumenterade som "may be changed or removed from Windows without further notice", om man kan brukar man hålla sig till det riktiga Win32.

 

Det finns motsvarande funktioner i Win32 som är gjorda för att användas men min bestämda uppfattning är att personen i fråga bör ägna sig åt knyppling om han/hon är så rädd för vad användarna kan ta sig till med programvaran ifråga.

 

Länk till kommentar
Dela på andra webbplatser

En variant är ju att använda "hardware overlay" (http://en.wikipedia.org/wiki/Screenshot#Hardware_overlays), vilket, om jag förstår saken rätt, i princip innebär att man skriver direkt till grafikminnet. Det används framförallt av videospelare och spel av prestandaskäl (det går ju ofta inte att få med filmer i skärmdumpar).

 

Rita upp bilderna med DirectDraw. Borde finnas guider till hur man gör detta i VB...

 

Länk till kommentar
Dela på andra webbplatser

Rita upp bilderna med DirectDraw. Borde finnas guider till hur man gör detta i

Lägg sen ut en länk till det här så kan jag bistå med skärmdumpar :)

 

Länk till kommentar
Dela på andra webbplatser

Kolla på t.ex. lantmäteriet och deras satelitbilder. Dom har ju löst det med watermarks typ i den storleksordning att det e fan ett helvete om man vill försöka klippa ihop "ett orginal" av bilden, men man ger upp efter en halvtimmes klippandes. Då har man ändå tillgång till all information. Om man slänger över ett watermark över bilden så att det inte finns någon form av orginal för vissa delar så kommer man nog snabbt ge upp helt.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...