0

Ctrl + Cを使用してコピーしたものを保存する簡単なアプリを作成することを考えています。今、私はいくつかの興味深いコードをグーグルで検索しました:(私はむしろそれへのリンクを巨大なものとして投稿します)

http://www.prilepi.com/221 (by http://www.liensberger.it/web/blog/?p=207 )

http://www.prilepi.com/222

これで問題なく動作しますが、唯一の問題は、すべてを完全に上書きすることです。つまり、テキストを選択して Ctrl+CI を押しても、選択したテキストを取得できません。

私は Clipboard クラスを認識していますが、何も保存されません...

4

3 に答える 3

0

別の方法がありますが、少し弱いですが、入力を待っているテキストボックスがあるとします。何もない新しいコンテキストメニューを作成して空のコンテキストメニューを割り当て、それをテキストボックスに割り当てることができます. このように、ユーザーは右クリックして、コピー/貼り付け用のデフォルトのコンテキスト メニューを表示できません。

編集: OPが「 C#Overwrite Ctrl + C code 」という正確ではない質問を投稿したので、Ctrl + Cを使用してクリップボードにコピーするのを防ぐためだと思いました。私の答えが間違っていたらごめんなさい。誤解を招くように聞こえるので、質問をもう少し明確にしてください。

編集#2: OPのコメントの後、私は彼が何を達成しようとしているのかについての手がかりを与えることができます.まず、CodeProjectに向かい、この記事を読み、グローバルベースでクリップボードフックをフックすると、仕事は完了です! グローバルキーボードフックを入れる必要はありません! イベントClipboardChangedと を結び付けClipboardStateChangedます。

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-01-24T14:59:03.463 に答える
0

あなたが言ったように、ホットキーは他のウィンドウからメッセージを完全に隠します。あなたがする必要があるのは、フォーカスのあるウィンドウを見つけて、それが選択したテキストを読むことです(そして、おそらくそれを手動でクリップボードに追加しますか?)

このスニペットは、フォーカスされたウィンドウを見つける必要があります。これは C++ ですが、C# に簡単に変換できます。

HWND GetGlobalFocus()
{
   GUITHREADINGO info;
   info.cbSize = sizeof(info);

   if (!GetGUIThreadInfo(0, &info))
      return NULL;

   return info.hwndFocus;
}

それができたら.. ここが難しいところです。を行うことはできますがPostMessage(hWnd, WM_COPY, 0, 0);、コントロールがこれをサポートしていない場合は機能しません (構文で強調表示されたコントロールはおそらく非標準であり、これに応答しない可能性があります)。

手動でWM_GETTEXTメッセージを送信してテキストを取得し、それを手動でクリップボードに追加することもできますが、これも、コントロールが非常に非標準である場合に失敗する可能性が高く、複数のクリップボード形式のアプリケーションを保持できないことは言うまでもありません ( Wordを考えてください)。

もう 1 つのオプションは、ホット キーを受信し、フックを無効にし、キーの組み合わせを で再度送信してkeybd_eventから、フックを再度有効にすることです。これにより、データがクリップボードに保存されます。これは不格好に思えますが、keybd_eventがブロックされているかどうかに応じて機能する可能性がありますが、思い出せません。

お役に立てれば!

于 2009-10-11T13:05:24.870 に答える
0

クリップボードに何かを追加するには、次を使用できます。

Clipboard.SetText(Text, TextDataFormat.Text);

テキスト以外にもいくつかのフォーマットオプションがあります

于 2009-10-11T17:57:11.797 に答える