В принципе готово. Заморачиваться с IApplicationView я не стал. Остальные методы IVirtualDesktopManagerInternal реализованы.
Код:
{ IVirtualDesktopManager }
const
CLSID_VirtualDesktopManager: TGUID = '{AA509086-5CA9-4C25-8F95-589D3C07B48A}';
IID_VirtualDesktopManager: TGUID = '{A5CD92FF-29BE-454C-8D04-D82879FB3F1B}';
type
IVirtualDesktopManager = interface(IUnknown)
function IsWindowOnCurrentVirtualDesktop(Wnd: HWND; out IsTrue: BOOL): HResult; stdcall;
function GetWindowDesktopId(Wnd: HWND; out DesktopID: TGUID): HResult; stdcall;
function MoveWindowToDesktop(Wnd: HWND; const DesktopID: TGUID): HResult; stdcall;
end;
{ IVirtualDesktopManagerInternal }
const
CLSID_ImmersiveShell: TGUID = '{C2F03A33-21F5-47FA-B4BB-156362A2F239}';
IID_ServiceProvider: TGUID = '{6d5140c1-7436-11ce-8034-00aa006009fa}';
CLSID_VirtualDesktopAPI_Unknown: TGUID = '{C5E0CDCA-7B6E-41B2-9FC4-D93975CC467B}';
IID_VirtualDesktopManagerInternal: TGUID = '{F31574D6-B682-4CDC-BD56-1827860ABEC6}'; // build 14393 or higher
//IID_VirtualDesktopManagerInternal: TGUID = '{AF8DA486-95BB-4460-B3B7-6E7A6B2962B5}'; // build 10240 or higher
//IID_VirtualDesktopManagerInternal: TGUID = '{EF9F1A6C-D3CC-4358-B712-F84B635BEBE7}'; // build 10130 or higher
IID_VirtualDesktop: TGUID = '{FF72FFDD-BE7E-43FC-9C03-AD81681E88E4}';
type
PIVirtualDesktop = ^IVirtualDesktop;
IVirtualDesktop = interface(IUnknown)
function notimpl(): HRESULT; stdcall; //virtual HRESULT STDMETHODCALLTYPE IsViewVisible(IApplicationView *pView, int *pfVisible) = 0;
function GetId(Id: PGUID): HRESULT; stdcall;
end;
PIObjectArray = ^IObjectArray;
IObjectArray = interface
function GetCount(out Count: UINT): HRESULT; stdcall;
function GetAt(uiIndex: UINT; riid: PGUID; out PIUnknown): HRESULT; stdcall;
end;
IVirtualDesktopManagerInternal = interface(IUnknown)
function GetCount(pCount: PUINT): HRESULT; stdcall;
function notimpl1(): HRESULT; stdcall; //virtual HRESULT STDMETHODCALLTYPE MoveViewToDesktop(IApplicationView *pView,
//VirtualDesktop *pDesktop) = 0;
function notimpl2(): HRESULT; stdcall; //virtual HRESULT STDMETHODCALLTYPE CanViewMoveDesktops(IApplicationView *pView,
//int *pfCanViewMoveDesktops) = 0;
// build 10240 or higher
function GetCurrentDesctop(pVD: PIVirtualDesktop): HRESULT; stdcall;
function GetDesktops(pDesktops: PIObjectArray): HRESULT; stdcall;
function GetAdjacentDesktop(Desktop: IVirtualDesktop; AdjacentDesktop: UINT; pAdjacentDesktop: PIVirtualDesktop): HRESULT; stdcall;
function SwitchDesktop(Desktop: IVirtualDesktop): HRESULT; stdcall;
function CreateDesktopW(pNewDesctop: PIVirtualDesktop): HRESULT; stdcall;
function RemoveDesktop(Desktop: IVirtualDesktop; FallDesktop: IVirtualDesktop): HRESULT; stdcall;
function FindDesktop(Id: PGUID; Desktop: PIVirtualDesktop): HRESULT; stdcall; // build 10240 or higher
end;
Во вложении модуль реализующий функции управления виртуальными десктопами, а также демка.
Ну а на авторство я не претендую, только на порт
И достаточно будет того, что на этом форуме отметка с датой публикации есть
.
Если Админ захочет, то может добавить в исходники.