We have a COM interface for Vulkan interop, see https://github.com/doitsujin/dxvk/blob/4c09b006a5ce84b4707a0b175a800c56a28643f0/src/dxgi/dxgi_interfaces.h#L312-L390.
Please note that the Vulkan swap chain itself can be recreated at any point in time, it's not really safe to export those images, and if you rely on current implementation details, we will break those in the future.
Not sure if it counts as cleaner or dirtier, but FWIW specialk just checks if the loaded api dll product name contains "DXVK".
I'd say checking the DXVK interop COM interfaces is a lot cleaner, especially since OP needs the Vulkan handles after that anyway.
Nothing extracted yet.
I'm currently working on a library to allow swapchain image sharing across processes in a cross platform manner. For this to work while running under DXVK I'd need to first detect DXVK, then get the VkImage handles for the underlying Vulkan renderer.
Brute force method would just be to find some DXVK function that generally always exists and using GetProcAddress on it to detect DXVK. But if there's a cleaner way I'd like to know.