본문 바로가기
프로그래밍

Block PrintScreen ( 프로그램 캡쳐 방지)

by 알 수 없는 사용자 2012. 3. 23.
프로그램에서
Print-Screen으로 화면 캡쳐를 막는 class 입니다.

문론 원천적으로 프로그램의 캡쳐를 완전히 막는 방법은 없습니다.
최소한의 캡쳐방비용 기능입니다.


  
#include <ClipBrd.hpp>
// ���
// http://msdn.microsoft.com/en-us/magazine/cc163713.aspx
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms646279(v=vs.85).aspx
// http://labnol.blogspot.com/2004/08/disable-print-screen-key-in-windows.html
//---------------------------------------------------------------------------
class TSnapShotBlock
{
    HWND m_hWnd[4];
    bool m_bBlock;
public:
    TSnapShotBlock()
    {
        m_bBlock=false;
        for(int i=0;i<4;i++)
        {
            m_hWnd[i]=AllocateHWnd(AllHwndWinProc);
        }
    }
    ~TSnapShotBlock()
    {
        SetSnapshotBlock(false);
        for(int i=0;i<4;i++)
        {
            DeallocateHWnd(m_hWnd[i]);
        }
    }
    //----------------------------------------------
    void __fastcall AllHwndWinProc(TMessage &Msg)
    {
        if(Msg.WParam==IDHOT_SNAPDESKTOP || Msg.WParam==IDHOT_SNAPWINDOW)
        {
            Clipboard()->Clear();
        }
    }
    //----------------------------------------------

    void __fastcall SetSnapshotBlock(bool bBlock)
    {
        m_bBlock=bBlock;
        if(bBlock)
        {
            RegisterHotKey(m_hWnd[0], IDHOT_SNAPDESKTOP,0, VK_SNAPSHOT);
            RegisterHotKey(m_hWnd[1], IDHOT_SNAPDESKTOP,MOD_CONTROL, VK_SNAPSHOT);
            RegisterHotKey(m_hWnd[2], IDHOT_SNAPDESKTOP,MOD_SHIFT, VK_SNAPSHOT);
            RegisterHotKey(m_hWnd[3], IDHOT_SNAPDESKTOP,MOD_WIN, VK_SNAPSHOT);

            RegisterHotKey(m_hWnd[0], IDHOT_SNAPWINDOW, MOD_ALT, VK_SNAPSHOT);
        }
        else
        {
            UnregisterHotKey(m_hWnd[0], IDHOT_SNAPDESKTOP);
            UnregisterHotKey(m_hWnd[1], IDHOT_SNAPDESKTOP);
            UnregisterHotKey(m_hWnd[2], IDHOT_SNAPDESKTOP);
            UnregisterHotKey(m_hWnd[3], IDHOT_SNAPDESKTOP);
            UnregisterHotKey(m_hWnd[0], IDHOT_SNAPWINDOW);
        }
    }

};
TSnapShotBlock g_SnapshotBlk;
     

 
 
사용방법은?

  
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    g_SnapshotBlk.SetSnapshotBlock(true);

    Application->OnMinimize=AppMinimize;
    Application->OnRestore=AppRestore;
}
//---------------------------------------------------------------------------
//프로그램이 minimize될때 snapshot을 허용하도록 한다.  
void __fastcall TForm1::AppMinimize(TObject *Sender)
{
    g_SnapshotBlk.SetSnapshotBlock(false);
}
//---------------------------------------------------------------------------
//프로그램이 Restore될때 snapshot을 막는다
void __fastcall TForm1::AppRestore(TObject *Sender)
{
    g_SnapshotBlk.SetSnapshotBlock(true);
}
     
 
....

Application이 Minimize되었을때는 Print-Screen을 허용하도록 한것입니다.


그럼..