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) {...}

它工作正常,但这不是如何在 whitch 控制(在我的应用程序中)中检测复制发生的解决方案。

4

1 回答 1

0

好吧,我认为您可以使用GetClipboardOwner. 这不是 100% 可靠的。剪贴板可能包含数据,并且此函数可能返回NULL. 首先,剪贴板可能被控件以外的东西填充,但我希望剪贴板有很多方法可以充满数据,并且没有所有者窗口。但只要您的应用程序没有对剪贴板做任何不标准的事情,我认为它会为您完成这项工作。

如果您想 100% 确定应用程序中的哪个控件用数据填充了剪贴板,请自行跟踪最后一个填充剪贴板的控件。

于 2012-10-14T10:28:35.577 回答