WinAPI如何检测在哪个控件中进行复制

时间:2012-10-14 10:26:31

标签: winapi copy

我想知道如何在我的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控件(在我的应用程序中)检测复制。

1 个答案:

答案 0 :(得分:0)

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

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