I’m developing a game for a big group and Nitro Boosters were granted Alpha testing permissions. I’d like to minimize all possible leaks and for now what I’ve done is use UserInputService.WindowFocused and UserInputService.WindowFocusReleased which basically makes their screen black if they change windows. I’ve tried finding a way to detect screenshot taking and recording, but I haven’t found anything as of yet.
I tried to find a way that allows the game to detect if the user is recording or taking a screenshot. I did find a property, called VideoCaptureEnabled. However, after digging with some more researching and trying to get the command to work. Sadly, I found out that the command only works in Studio, since it’s actually one of the settings in Studio. So, there is no possible way to detect screenshot taking and video recording.
Perhaps you could listen to whenever the print screen key is pressed, or the default keybind for the video recording is pressed. There really is no good way of preventing them from taking videos/images of the game. Some external programs can allow you to change the keybind for the video recording, effectively making listening for a specific key input pointless. If someone is dedicated enough, you really can’t stop them from taking a picture/video using a real camera.
This might be a bit hard because:
- Exploiters can easily delete the black screen
- If you press print screen it’ll get the photo probably before you can even detect it
- Some people use binds that Roblox doesn’t recognise to record so no luck there
There’s no good solution for this unfortunately
Your issue is more of trust rather than detecting screen shots. You method of detecting Window Focus is uneffective, what if I use my third party screen recorder? the window will be focused, but i’ll still be recording everything. I can also take photos with my phone if I wanted to.
If I can remember correctly, there’s a take screen shot button right from the settings menu, so pressing print screen is unnecessary.
You basically can’t stop people from taking screen shots, it’s beyond Roblox and it’s beyond software. If you want to effectively stop leaks, you need to rework the way you trust people for testing.
You can’t detect screenshot taking/video recording.
There are many third-party software programs that can take screenshots and record videos.
This is an issue that is focused on who you trust, as @wevetments said earlier.
In conclusion, there is no possible way to detect screenshot taking and recording videos.
Oh, this issue. It’s honestly a real gamble when it comes to granting NDA-like testing access. I’ve personally seen this handled by putting the user’s name across their screen in slightly transparent text. What I don’t know is how they accounted for exploited removals of the Gui, if they ever did.
You can’t stop players from capturing your game. No screenshot detection or capture prevention technique will ever work as long as you are displaying an unmodified image to the player’s screen.
The only working solution is to watermark the image with their username, or otherwise display an unique identifier over the game. By spamming the screen with TextLabels with a unique identifier, every screenshot taken will include it and you are able to directly punish the player who captured and shared it.
Probably not the smartest way to spam textlabels with their name/identifer because:
- Exploiter can change the text and blame an innocent victim
- Use of ChildAdded and remove it before the screen even renders it
What about photoshop? Clever photo editors can simply edit out the watermark. I’ve tried reverse editing edited photos and it’s a definitely a pain, sometimes doesn’t even work out. A determined leaker will do anything they can to leave no trace.
There’s no way to edit out the watermark without ruining the image.
The players name is displayed hundreds of times in a sort of checkerboard pattern. There’s white and black names so it’s always displayed.
A determined leaker will simply grab all the geometry from your place and screenshot it in Studio, anyway. If the concern is to make a game un-leakable, not publishing the game is the only way to go.
In other cases where the group of testers is a small curated group, tactics like printing their username or otherwise embedding information in the game is a very practical way used by many companies within the industry.
Obviously, printing usernames on the screen is the easiest way to do it. But if you are looking for a less-obvious strategy; take a look at what Microsoft used to detect leakers on Xbox https://www.dualshockers.com/xbox-360-nda-trick-nxe/
Like Colbert mentioned earlier, when the QA team tests event games, we always use the watermarks across the screen. This way if a picture is uploaded, you always know who the person is and then you can ban them from your game, server, etc.
Obviously for QA we’re under an NDA, and if you’re really worried about it, you could possibly put in something like an NDA.
Yes, I am aware of what colbert said, while doing watermarks, to window focus detection, to input detection adds a layer of complexity to leakers, if the leaker is really determined, they could just edit the watermark out or use a third party software or another image capturing device or even steal your place and take a photo from studio like what @Wsly mentioned.
I also know that removing watermarks from an image can lower the quality(to an extent), however leaks are leaks, quality doesn’t matter as long as it can be interpreted and is still believable. The leaker could even draw whatever they wanted to leak an have it replicated in studio.
To reiterate what I’ve previously mentioned, you can’t detect screenshots because it’s beyond Roblox’s control. There’s no effective way of detecting or preventing screenshots, the way Roblox is currently built will not allow an effective way to prevent leaks whatsoever. You really need to think a billion times before letting someone onto your testing server or even publishing it to the public if you’re concerned with leaks.
Edit:
Another thing to keep in mind is that the PlayerGui container can be deleted, so you’d have to implement some out of the box method as a backup since you can’t create the PlayerGui container with Instance.new() whatsoever.
Thank you everyone for your replies, really appreciated. I’m already aware that such a thing is not 100% possible and that my method was not that efficient, which I had not mentioned sadly.