スポンサーリンク

Win32api でクリップボードにデータがコピーされたら動くプログラム

クリップボードを監視する方法を調べてみたら、AddClipboardFormatListenerにウィンドウハンドルを渡しておけば、クリップボードにコピーが発生するたびにWM_CLIPBOARDUPDATEメッセージが入ってくることが分かったのでこれを使うとクリップボードを管理するようなプログラムを書ける。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
  case WM_CREATE:

    // クリップボード監視開始
    AddClipboardFormatListener(hWnd);
    return 0;
  case WM_CLIPBOARDUPDATE:
    // クリップボードが使用されるとこのメッセージが入る
    if (OpenClipboard(hWnd)) {

      // クリップボードの内容がテキストの時だけ処理
      if ((IsClipboardFormatAvailable(CF_TEXT) == TRUE)) {

        HGLOBAL hg = GetClipboardData(CF_TEXT);
        size_t size = GlobalSize(hg);
        LPVOID strClip = GlobalLock(hg);

        char* strText = new char[size];
        strcpy(strText, (char*)strClip);

        //クリップボード後始末
        GlobalUnlock(hg); 
        CloseClipboard();

        // 表示
        HDC hdc = GetDC(hWnd);
        RECT rect{ 0,0,100,100 };
        DrawTextA(hdc, (char*)strText, -1, &rect, DT_LEFT);
        ReleaseDC(hWnd, hdc);

      }
    }
    return 0;
  case WM_LBUTTONDOWN:
    return 0;
  case WM_DESTROY:
    // クリップボード監視終了
    RemoveClipboardFormatListener(hWnd);
    PostQuitMessage(0);
    break;
  case WM_PAINT:
    {
      PAINTSTRUCT ps;
      HDC hdc = BeginPaint(hWnd, &ps);
      EndPaint(hWnd, &ps);
    }
    break;
  default:
    return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

このコードは、クリップボードに文字列がコピーされると画面にその内容を表示する。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: