Я работаю над проектом, который не позволит пользователям копировать текст с нескольких внешних веб-сайтов, мне удалось настроить ClipboarViewer, и это прерывает буфер обмена, теперь я пытаюсь получить владелец буфера обмена и затем заголовка/заголовок окна, ниже того, что я пытался, но он всегда возвращает пустойПолучить владельца буфера обмена Название/Caption
protected override void WndProc(ref Message m)
{
switch ((User32.Message) m.Msg)
{
case User32.Message.WM_DRAWCLIPBOARD:
{
ClipboardChanged();
User32.SendMessage(_nextClipboardViewer, m.Msg, m.WParam, m.LParam);
string title = User32.GetWindowTitle(User32.GetClipboardOwner());
}
break;
case User32.Message.WM_CHANGECBCHAIN:
{
if (m.WParam == _nextClipboardViewer)
{
_nextClipboardViewer = m.LParam;
}
else
{
User32.SendMessage(_nextClipboardViewer, m.Msg, m.WParam, m.LParam);
}
}
break;
case User32.Message.WM_CLIPBOARDUPDATE:
{
ClipboardChanged();
string title = User32.GetWindowTitle(User32.GetClipboardOwner());
}
break;
default:
{
base.WndProc(ref m);
}
break;
}
}
public static string GetWindowTitle(IntPtr hWnd)
{
StringBuilder Caption = new StringBuilder(256);
//hWnd = GetActiveWindow();
GetWindowText(hWnd, Caption, Caption.Capacity);
return Caption.ToString();
}
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr GetClipboardOwner();
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString, int nMaxCount);
[DllImport("user32", CharSet = CharSet.Auto)]
public static extern IntPtr GetActiveWindow();
если изменить обработчик в GetActiveWindow(), то она работает, что странно, потому что GetClipboardOwner() возвращает значение, которое не равно null.
К тому времени, когда вы вокруг обработки 'WM_DRAWCLIPBOARD' независимо изменено содержимое не может владеть ею больше. –
, но на WM_CLIPBOARDUPDATE Я могу получить владельца, но не могу получить заголовок –
Попробуйте 'GetWindowText', а не' GetWindowTitle'. –