Внезапно оказалось, что для UWP-приложений функция GetClipboardOwner() возвращает одно и тоже значение!
Не важно, копирую ли я в буфер через Калькулятор или Paint 3D, HWND приходит одинаковый
А надо в итоге узнать, какое именно приложение добавило содержимое в буфер. Делаю через обработку WM_CLIPBOARDUPDATE.
Кто-нибудь с этим сталкивался?
Куда вообще можно копать?
Здравствуйте, flаt, Вы писали:
B>>Внезапно оказалось, что для UWP-приложений функция GetClipboardOwner() возвращает одно и тоже значение!
F>Какое?
Ну это же HWND. Какое винда при старте назначит, такое и возвращает
Сейчас вот hWnd = 0x000104a8. Принадлежит оно svchost.exe.
Проблема в том, что и для Calculator, и для Paint3D возвращается одно и тоже значение. Что принципиально противоречит смыслу GetClipboardOwner() — как же теперь понять, какое приложение записало в буфер обмена?
Здравствуйте, Basil2, Вы писали:
B>Ну это же HWND. Какое винда при старте назначит, такое и возвращает Сейчас вот hWnd = 0x000104a8. Принадлежит оно svchost.exe.
B>Проблема в том, что и для Calculator, и для Paint3D возвращается одно и тоже значение. Что принципиально противоречит смыслу GetClipboardOwner() — как же теперь понять, какое приложение записало в буфер обмена?
Выскажу гипотезу — UWP приложение обращается к svchost для того, чтобы поместить в Clipboard, а он это делает.
От этого тебе, конечно, не легче.
Здравствуйте, Pavel Dvorkin, Вы писали:
B>>Проблема в том, что и для Calculator, и для Paint3D возвращается одно и тоже значение. Что принципиально противоречит смыслу GetClipboardOwner() — как же теперь понять, какое приложение записало в буфер обмена?
PD>Выскажу гипотезу — UWP приложение обращается к svchost для того, чтобы поместить в Clipboard, а он это делает.
PD>От этого тебе, конечно, не легче.
Не легче
Но я нашел способ — GetForegroundWindow(). Не 100% точно, но приемлимо.