我想知道如何在我的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控件(在我的应用程序中)检测复制。
答案 0 :(得分:0)
好吧,我认为您可以使用GetClipboardOwner
。这不是100%可靠。剪贴板可以包含数据,并且此函数可以返回NULL
。首先,剪贴板可能已被控件以外的其他东西填充,但我希望剪贴板有很多方法可以充满数据,并且没有所有者窗口。但只要你的应用程序没有对剪贴板做任何不合标准的事情,我认为它会为你做好工作。
如果您想100%确定应用中的哪个控件用数据填充了剪贴板,请跟踪自己最后一个控件以填充剪贴板。