PrintScreenキーを無効にしてスクリーンショットを無効化する
セキュリティ的に絶対的な効果はないけど、アプリケーションの実行中にPrintScreenキーを無効にしてスクリーンショットを撮れなくするのはそれなりの抑止力があるはず。キーストロークをWindowsに登録するホットキーはフックよりも実装が楽。元ネタは、ここ。
1.アプリケーションの開始時(メインフォームのOnCreateイベント)にホットキーを登録。終了時にホットキーの登録を削除。
const int TfrmMain::HotkeyID1 = 0x0001; const int TfrmMain::HotkeyID2 = 0x0002; //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormCreate(TObject *Sender) { RegisterHotKey(Application->Handle, HotkeyID1, 0,VK_SNAPSHOT); RegisterHotKey(Application->Handle, HotkeyID2, MOD_ALT,VK_SNAPSHOT); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action) { UnregisterHotKey(Application->Handle,HotkeyID1); UnregisterHotKey(Application->Handle,HotkeyID2); } //---------------------------------------------------------------------------
2.フォームにTApplicationEventsを貼り、OnMessegeイベントでウィンドウメッセージを受け付ける
//--------------------------------------------------------------------------- void __fastcall TfrmMain::ApplicationEvents1Message(tagMSG &Msg, bool &Handled) { if ((Msg.message == WM_HOTKEY) && (HIWORD(Msg.lParam) == VK_SNAPSHOT)) { if ((Msg.wParam == HotkeyID1) || (Msg.wParam == HotkeyID2)) { // PrintScreenキーが押された場合の処理 return; } } } //---------------------------------------------------------------------------
キャプチャ関係は、Antinnyをはじめとする暴露ウイルスはもちろんのこと、Snipping ToolとかWinShotといったキャプチャソフトが入っていたらアウトなので、この辺は運用ポリシーで補う以外無い。
クリップボードの監視を行うのであれば、JVCLのTJvClipboardMonitorを使うのが楽。フォームに貼るだけでクリップボードの監視が出来る。
//--------------------------------------------------------------------------- void __fastcall TfrmMain::JvClipboardMonitor1Change(TObject *Sender) { if (!Clipboard()->HasFormat(CF_TEXT)) { // テキスト以外は強制的にクリア Clipboard()->Clear(); } } //---------------------------------------------------------------------------