Показать сообщение отдельно
  #18  
Старый 17.02.2017, 08:37
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

В принципе готово. Заморачиваться с 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;
Во вложении модуль реализующий функции управления виртуальными десктопами, а также демка.

Ну а на авторство я не претендую, только на порт И достаточно будет того, что на этом форуме отметка с датой публикации есть .
Если Админ захочет, то может добавить в исходники.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием