1

CTRL+によってコピーされたすべてのステートメントを(ある段階で)格納しC、現在のステートメントを特定のステートメントに運ぶ「バッファー」を操作するアプリケーションを作成しようとしています。

例:ユーザーがCTRL+Cを押して「Hello」をコピーします。任意のテキスト領域/フィールドでCTRL+を押すと、書かれた単語は「Hello」になります。書かれたステートメントを「Hello」ではなく「Test」にします。V

問題は、コピーされたステートメントを運ぶバッファにアクセスし、Javaを使用してそのコンテンツを操作する方法ですか?

4

1 に答える 1

1
  public static void main(String[] args) throws Exception
  {
    // Get a reference to the clipboard
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();

    // Poll once per second for a minute
    for (int i = 0; i < 60; i++)
    {
      // Null is ok, because, according to the javadoc, the parameter is not currently used
      Transferable transferable = clipboard.getContents(null);

      // Ensure that the current contents can be expressed as a String
      if (transferable.isDataFlavorSupported(DataFlavor.stringFlavor))
      {
        // Get clipboard contents and cast to String
        String data = (String) transferable.getTransferData(DataFlavor.stringFlavor);

        if (data.equals("Hello"))
        {
          // Change the contents of the clipboard
          StringSelection selection = new StringSelection("Test");
          clipboard.setContents(selection, selection);
        }
      }

      // Wait for a second before the next poll
      try
      {
        Thread.sleep(1000);
      }
      catch (InterruptedException e)
      {
        // no-op
      }
    }
  }

いくつかの簡単なテスト容易性/検証のためにポーリングを追加しました。クリップボードを1秒に1回1分間チェックします。私の知る限り、イベントベースの通知を行う方法はありません(フレーバーの変更を聞いていない限り)ので、ポーリングで立ち往生していると思います。

于 2012-04-06T21:48:42.937 に答える