3

私のwin32アプリケーションで、どのコントロールでコピーが発生するかを特定する方法を知りたいです。たとえば、EditBox、RichEdit など。

コピーがアプリ内で行われたのか、アプリ外で行われたのかを把握するために、次の方法を使用しました。

//global variables

HWND hWnd; 
DWORD ProcId; 
HWND nextHandle; 
DWORD currentID;

//then I call two functions on form create

currentID=GetCurrentProcessId();
nextHandle = SetClipboardViewer(Handle); 

//then on  WM_DRAWCLIPBOARD message I call 

hWnd = GetClipboardOwner();
GetWindowThreadProcessId(hWnd,&ProcId);

// functions and checking by IDs whether
// the copying took place in or outside my application 

if(lpdwProcessId==currentID) {...}

正常に動作しますが、これは (私のアプリの) どのコントロールでコピーが発生したかを検出する方法ではありません。

4

1 に答える 1

0

まあ、私はあなたが使用できると思いますGetClipboardOwner。これは 100% 信頼できるものではありません。クリップボードにデータが含まれている可能性があり、この関数が を返す可能性がありますNULL。まず、クリップボードはコントロール以外の何かで満たされている可能性がありますが、クリップボードがデータでいっぱいになり、所有者ウィンドウがなくなる方法はたくさんあると思います。しかし、あなたのアプリがクリップボードに対してあまり非標準的なことをしない限り、それでうまくいくと思います。

アプリ内のどのコントロールがクリップボードにデータを入力したかを 100% 確実に知りたい場合は、クリップボードに最後に入力したコントロールを追跡してください。

于 2012-10-14T10:28:35.577 に答える