クリップボードを使用したプロセスを調べる

  • デル株式会社
  • クリップボードを使用したプロセスを調べたりするプログラム。
    例えば、ユーザにコピペさせないようにしたり出来るかも。

    仕組みは意外に簡単。

    SetClipboardViewer(); を実行して、WM_DRAWCLIPBOARD メッセージ
    を拾うだけ。
    取り合えず、msdn参照のこと。

    CWnd::SetClipboardViewer

    ここからサンプル。
    色々端折ってるから、自己責任で。
    ちなみに、コピペだけだとコンパイル通らないので注意。

     
    // 監視実行
    void CClipStopDlg::OnBnClickedButton1()
    {
        // クリップボードチェインへウインドウを追加
        m_hWnd = SetClipboardViewer();
    }
    
    void CClipStopDlg::OnDrawClipboard()
    {
        CDialog::OnDrawClipboard();
    
        HWND    hWnd       = NULL;
        DWORD   dwProcId   = 0;
        DWORD   dwThId     = 0;
        HANDLE  hProcess   = NULL;
        CWnd    *pWnd      = NULL;
        HMODULE hModule    = NULL;
        DWORD   cbNeeded   = 0;
    
        CHAR    lpFilePath[ _MAX_PATH ] = { NULL };
    
        CString strWinTxt;
        
        pWnd = GetClipboardOwner( );
    
        // クリップボード所有者でウインドウが無い場合
        if( pWnd == NULL )
        {
            return;
        }
    
        // プロセスIDを取得する
        dwThId = GetWindowThreadProcessId( pWnd->m_hWnd, &dwProcId );
    
        strWinTxt.Format( "プロセスID:%d\n", dwProcId );
        
        OutputDebugString( strWinTxt );
    
        // 該当プロセスをオープン
        hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                                FALSE,
                                dwProcId );
    
        if( hProcess == NULL )
        {
            MessageBoxA( "OpenProcess 失敗" );
            return;
        }
    
        if( EnumProcessModules( hProcess,
                                &hModule,
                                sizeof( hModule ),
                                &cbNeeded ) == FALSE )
    
        {
            MessageBoxA( "EnumProcessModules 失敗" );
            return;
    
        }
    
        GetModuleFileNameEx( hProcess, hModule, lpFilePath, _MAX_PATH );
    
        strWinTxt.Format( "プロセス名:%s\n", lpFilePath, );
    
        // プロセス名をデバックウインドウに表示(出力)
        OutputDebugString( strWinTxt )
    
    }
    

    んな感じ。

    関連記事

    ページ上部へ戻る