Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

1. VTable-based COM interface 2. Komplexní PInvoke definice 3. Shell extensibility interface který musí být implementován v nativním kódu.

Podobné prezentace


Prezentace na téma: "1. VTable-based COM interface 2. Komplexní PInvoke definice 3. Shell extensibility interface který musí být implementován v nativním kódu."— Transkript prezentace:

1

2

3

4

5 1. VTable-based COM interface 2. Komplexní PInvoke definice 3. Shell extensibility interface který musí být implementován v nativním kódu

6 Neexistuje typová knihovna Interfaces nelze kompletně popsat v rámci typové knihovvny Nelze je volat přímo (např. Add Reference či tlbimp) bez předchozí úpravy

7 TypPrimární charakteristikaType library marshaling Automation  Implementace IDispatch  Late binding  Pouze typy VARIANT Ano Custom (či VTable)  Odvozen od IUnknown  VTable (early) binding NeNe Dual  Odvozen od IDispatch  Podporuje late a early binding  Pouze typy VARIANT Ano

8 Vytvořeny pomocí MIDL kompileru z IDL Obsahuje pouze typy obsažené v příkazu library Mnoho standardních IDL atributů není propagováno do výsledné typové knihovny MIDL.exe.idl.tlb

9 Interop assemblies mapují COM definice na ekvivalentní.NET Framework typy tlbimp.exe může generovat interop assemblies z typových knihoven Chybějící atributy z vlastních rozhraní mohou zabránit správnému marshalingu

10 Definice v IDL (pole jako vstupní parametr) Definice ve výsledném interop assembly // interface IFileDialog : IModalWindow // interface IFileDialog : IModalWindow HRESULT SetFileTypes( HRESULT SetFileTypes( [in] UINT cTypes, [in] UINT cTypes, [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFS); [in, size_is(cFileTypes)] const COMDLG_FILTERSPEC *rgFS); void SetFileTypes(uint cTypes, ref COMDLG_FILTERSPEC rgFS); void SetFileTypes(uint cTypes, ref COMDLG_FILTERSPEC rgFS); rgFS size_is není propagována do typové knihovny; během překladu se ztratilo to, že rgFS je pole. Může být definováno jako … void SetFileTypes(uint cTypes, void SetFileTypes(uint cTypes, [In, MarshalAs(UnmanagedType.LPArray)] [In, MarshalAs(UnmanagedType.LPArray)] COMDLG_FILTERSPEC[] rgFS); COMDLG_FILTERSPEC[] rgFS);

11 Disassemblovat interop assembly, změnit interop definitions (v IL) a reassemble.method public hidebysig newslot abstract virtual instance void SetFileTypes([in] uint32 cFileTypes, instance void SetFileTypes([in] uint32 cFileTypes, [in] valuetype COMDLG_FILTERSPEC& rgFilterSpec) [in] valuetype COMDLG_FILTERSPEC& rgFilterSpec) runtime managed internalcall runtime managed internalcall [ComImport(), Guid(IIDGuid.IFileDialog), [ComImport(), Guid(IIDGuid.IFileDialog), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IFileDialog : IModalWindow internal interface IFileDialog : IModalWindow { … void SetFileTypes([In] uint cFileTypes, void SetFileTypes([In] uint cFileTypes, [In, MarshalAs(UnmanagedType.LPArray)] [In, MarshalAs(UnmanagedType.LPArray)] COMDLG_FILTERSPEC[] rgFilterSpec); COMDLG_FILTERSPEC[] rgFilterSpec);.method public hidebysig newslot abstract virtual instance void SetFileTypes([in] uint32 cFileTypes, instance void SetFileTypes([in] uint32 cFileTypes, [in] valuetype COMDLG_FILTERSPEC[] marshal([]) rgFilterSpec) [in] valuetype COMDLG_FILTERSPEC[] marshal([]) rgFilterSpec) runtime managed internalcall runtime managed internalcall Ručně vytvořit interop definice Vytvořit wrapper v C++

12 1. Definice parametrů a návratových typů 2. Předávání hodnot mezi nativním a managed kódem IntPtr pro jiné než handle typy je nutné explicitně marshalovat IntPtr pro jiné než handle typy je nutné explicitně marshalovat 3. Rozdílné programovací modely Explicitní memory management vs garbage collection Explicitní memory management vs garbage collection

13 Množina příkladů vložená do Windows SDK Ilustruje interop a wrapper techniky pro přístup k některým Vista API Lze libovolně modifikovat Zaměřeno na klíčové API, které je těžké volat přímo z managed kódu

14

15

16

17 WPF “look-like” Wizard control VistaBridge WinForms Command Link control OLE DB Provider pro Windows Search pomocí ADO.NET, a jak dynamicky dotazovat Property System Použití UAC manifestu, spuštění povýšeného procesu a dekorace tlačítka ikonkou štítu

18

19 Nový způsob práce s grafikou Grafický obsah je nejdříve vykreslen do „off- screen“ bufferu a poté je komponován do „back“ bufferu odkud je teprve vykreslen na display Poskytuje Práci s 3D PrůhlednostFlip3DGlassAnimaceThumbnails…… Závislé na grafické kartě

20 On/Off pomocí nastavení schématu Windows Vista AERO Basic Pracuje s okny všech aplikací pomocí technologie Desktop composition Požadavky na grafickou kartu DX9.0c s podporou pixel shader 2.0 Podpora 32bpp WDDM ovladač – DWM přímo spolupracuje s ovladačem Paměť min 64MB, 256MB pro 1600x1200+

21 Directx 9 L Poslední verze 9.x Obsahuje legacy rozhraní pro non-WDDM a poběží na Win XP a výše Directx 10 Pouze Windows Vista API Full-screen DirectX exclusive aplikace automaticky vypínají kompozici

22 Authentic, Energetic, Reflective, Open & accessible AERO Glass On/off nastavením průhlednosti Dle podpory grafické karty Transparent Glass Opaque Glass AERO glass vypnuté

23 Průsvitné rámečky formulářů Libovolné barvy rámečků formulářů Nové ikony pro windows tlačítka Reakce na „přejezd“ kurzorem myši nad tlačítky

24 Běží v rámci dwm.exe Pro přístup ke specifickým funkcím použít dwmapi.dll Spolupracuje s milcore.dll sdílená komponenta s WPF pro výstup a rendering do DirectX

25 Aplikace DWM render thread DirectXinterface vykreslení scény update desktopu pomocí

26 DwmEnableComposition on/off kompozice DwmSetWindowAttribute nastavuje vlastnosti okna pro zpracování kompozice (např. nastavení glass effektu) DwmGetWindowAttributeDwmDefWindowProc

27 DwmIsCompositionEnabled pro kontrolu zda je zapnutá kompozice DwmEnableBlurBehindWindow kontroluje blur efekt vlastního okna (standarně automaticky zapnuto) DwmExtendFrameIntoClientArea kontroluje blur efekt vlastní klientské části (standardně je opaque)

28 DwmQueryThumbnailSourceSize vrací velikost náhledu DwmRegisterThumbnail vytváří vztah mezi zdrojovým a cílovým oknem DwmUnregisterThumbnail DwmUpdateThumbnailProperties

29 WM_DWMCOMPOSITIONCHANGED Bez parametrů WM_DWMCOLORIZATIONCOLORCHANGED Změna barvy pozadí WM_DWMNCRENDERINGCHANGED Změna vykreslování u ne-klientské části okna wParam = zda je povoleno vykreslování

30 cyTopHeight cyBottomHeight cxLeftWidth cxRightWidth -1 nastaví hodnotu aktuálního okna -1 nastaví hodnotu aktuálního okna 0 provede reset 0 provede reset nutno nastavit po každém resize okna nutno nastavit po každém resize okna

31 Při použití aero glass na pozadí je nutné používat funkce pracující s alpha kanálem Černá barva je použita jako 0x (při použití alpha kanálu to je plně průhledná barva) Standardní černá barva textboxu je pomocí DWM rozpoznána jako průhledná PoužítApplication.SetUseCompatibleTextRenderingDefault(true) Nebo owner-draw metody Nebo vykreslovat do bitmapy Nebo používat GDI+

32 Živé náhledy běžících aplikací Potřeba hWND okna jehož náhled chceme zobrazit a okna kam chceme náhled zobrazit OS automaticky provádí změny

33 Nový systémový font vytvořen specielně pro UI Optimalizován pro ClearType Standardní velikost 9 pt Musí být explicitně uveden při vytváření formulářů a dialogů The Segoe UI Font ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz

34

35

36 Podpora nových vizuálních vlastností jako je hover states, cross fading a další Nové stavy a styly ovládacích prvků Nové ovládací prvky Network Address Control (IPv6) Command Link Control Vylepšení stávajících prvků pro plnou podporu Vista vlastností Open File Dialog Save File Dialog

37 Snižuje počet potřebných kliků uživatele Zjednodušuje orientaci uživatele Text Poznámka (volitelné) Ikona (volitelné) Při přejezdu myší vzhled tlačítka

38 Vista API Nový styl tlačítka ( BS_COMMANDLINK ) Nové typy zpráv tlačítek ( BCM_SETNOTE, BCM_GETNOTE ).NET Flatstyle nastavit FlatStyle.System Přidat styl BS_COMMANDLINK Zpracovat BCM_SETNOTE, BCM_GETNOTE Nebo použít VistaBridge

39 using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace VistaControls { class CommandLinkButton : Button { public CommandLinkButton() { base.FlatStyle = FlatStyle.System; } private string helpText = ""; public string HelpText { get { return this.helpText;} set { Win32Api.SendMessage(this.Handle, 0x /*BCM_SETNOTE*/,IntPtr.Zero, value); this.helpText = value; } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x e; //BS_COMMANDLINK return cp; } public static class Win32Api { [DllImport("user32", CharSet = CharSet.Unicode)] internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, string lParam); }

40

41 MessageBox Jednoduché použití Ne vždy srozumitelné pro uživatele Task Dialog Nová generace dialogů pro zprávy a dotazy Více uživatelsky přívětivý Využívá Command Link Control

42 TaskDialog() pro jednoduché zprávy TaskDialogIndirect() pro komplexní okna

43 Progress bar Radio buttons Command links Expand control Checkbox Zápatí: ikona a text

44 HRESULT TaskDialog( HWND hwndParent, HWND hwndParent, HINSTANCE hinst, HINSTANCE hinst, PCWSTR pszWindowTitle, PCWSTR pszWindowTitle, PCWSTR pszMainInstruction, PCWSTR pszMainInstruction, PCWSTR pszContent, PCWSTR pszContent, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, PCWSTR pszIcon, PCWSTR pszIcon, int* pnButton); int* pnButton); HRESULT TaskDialogIndirect( const TASKDIALOGCONFIG* pTaskConfig, const TASKDIALOGCONFIG* pTaskConfig, int* pnButton, int* pnButton, int* pnRadioButton, int* pnRadioButton, BOOL* pfVerificationFlagChecked); BOOL* pfVerificationFlagChecked); HRESULT TaskDialog( HWND hwndParent, HWND hwndParent, HINSTANCE hinst, HINSTANCE hinst, PCWSTR pszWindowTitle, PCWSTR pszWindowTitle, PCWSTR pszMainInstruction, PCWSTR pszMainInstruction, PCWSTR pszContent, PCWSTR pszContent, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons, PCWSTR pszIcon, PCWSTR pszIcon, int* pnButton); int* pnButton); HRESULT TaskDialogIndirect( const TASKDIALOGCONFIG* pTaskConfig, const TASKDIALOGCONFIG* pTaskConfig, int* pnButton, int* pnButton, int* pnRadioButton, int* pnRadioButton, BOOL* pfVerificationFlagChecked); BOOL* pfVerificationFlagChecked); typedef struct _TASKDIALOGCONFIG { UINT cbSize; UINT cbSize; HWND hwndParent; HWND hwndParent; HINSTANCE hInstance; HINSTANCE hInstance; TASKDIALOG_FLAGS dwFlags; TASKDIALOG_FLAGS dwFlags; TASKDIALOG_COMMON_BUTTON_FLAGS dwCmdBtns; TASKDIALOG_COMMON_BUTTON_FLAGS dwCmdBtns; PCWSTR pszWindowTitle; PCWSTR pszWindowTitle; union union { HICON hMainIcon; HICON hMainIcon; PCWSTR pszMainIcon; PCWSTR pszMainIcon; }; }; PCWSTR pszMainInstruction; PCWSTR pszMainInstruction; PCWSTR pszContent; PCWSTR pszContent; UINT cButtons; UINT cButtons; const TASKDIALOG_BUTTON* pButtons; const TASKDIALOG_BUTTON* pButtons; int nDefaultButton; int nDefaultButton; UINT cRadioButtons; UINT cRadioButtons; const TASKDIALOG_BUTTON* pRadioButtons; const TASKDIALOG_BUTTON* pRadioButtons; int nDefaultRadioButton; int nDefaultRadioButton; PCWSTR pszVerificationText; PCWSTR pszVerificationText; PCWSTR pszExpandedInformation; PCWSTR pszExpandedInformation; PCWSTR pszExpandedControlText; PCWSTR pszExpandedControlText; PCWSTR pszCollapsedControlText; PCWSTR pszCollapsedControlText; union union { HICON hFooterIcon; HICON hFooterIcon; PCWSTR pszFooterIcon; PCWSTR pszFooterIcon; }; }; PCWSTR pszFooter; PCWSTR pszFooter; PFTASKDIALOGCALLBACK pfCallback; PFTASKDIALOGCALLBACK pfCallback; LONG_PTR lpCallbackData; LONG_PTR lpCallbackData; UINT cxWidth; UINT cxWidth; } TASKDIALOGCONFIG; typedef struct _TASKDIALOGCONFIG { UINT cbSize; UINT cbSize; HWND hwndParent; HWND hwndParent; HINSTANCE hInstance; HINSTANCE hInstance; TASKDIALOG_FLAGS dwFlags; TASKDIALOG_FLAGS dwFlags; TASKDIALOG_COMMON_BUTTON_FLAGS dwCmdBtns; TASKDIALOG_COMMON_BUTTON_FLAGS dwCmdBtns; PCWSTR pszWindowTitle; PCWSTR pszWindowTitle; union union { HICON hMainIcon; HICON hMainIcon; PCWSTR pszMainIcon; PCWSTR pszMainIcon; }; }; PCWSTR pszMainInstruction; PCWSTR pszMainInstruction; PCWSTR pszContent; PCWSTR pszContent; UINT cButtons; UINT cButtons; const TASKDIALOG_BUTTON* pButtons; const TASKDIALOG_BUTTON* pButtons; int nDefaultButton; int nDefaultButton; UINT cRadioButtons; UINT cRadioButtons; const TASKDIALOG_BUTTON* pRadioButtons; const TASKDIALOG_BUTTON* pRadioButtons; int nDefaultRadioButton; int nDefaultRadioButton; PCWSTR pszVerificationText; PCWSTR pszVerificationText; PCWSTR pszExpandedInformation; PCWSTR pszExpandedInformation; PCWSTR pszExpandedControlText; PCWSTR pszExpandedControlText; PCWSTR pszCollapsedControlText; PCWSTR pszCollapsedControlText; union union { HICON hFooterIcon; HICON hFooterIcon; PCWSTR pszFooterIcon; PCWSTR pszFooterIcon; }; }; PCWSTR pszFooter; PCWSTR pszFooter; PFTASKDIALOGCALLBACK pfCallback; PFTASKDIALOGCALLBACK pfCallback; LONG_PTR lpCallbackData; LONG_PTR lpCallbackData; UINT cxWidth; UINT cxWidth; } TASKDIALOGCONFIG; [DllImport("comctl32.dll", CharSet = CharSet.Auto)] CharSet = CharSet.Auto)] static extern int TaskDialog( IntPtr hwndParent, IntPtr hwndParent, IntPtr hInstance, IntPtr hInstance, string pszWindowTitle, string pszWindowTitle, string pszMainInstruction, string pszMainInstruction, string pszContent, string pszContent, int dwCommonButtons, int dwCommonButtons, IntPtr pszIcon, IntPtr pszIcon, out int pnButton); out int pnButton); [DllImport("comctl32.dll", CharSet = CharSet.Auto)] CharSet = CharSet.Auto)] static extern int TaskDialog( IntPtr hwndParent, IntPtr hwndParent, IntPtr hInstance, IntPtr hInstance, string pszWindowTitle, string pszWindowTitle, string pszMainInstruction, string pszMainInstruction, string pszContent, string pszContent, int dwCommonButtons, int dwCommonButtons, IntPtr pszIcon, IntPtr pszIcon, out int pnButton); out int pnButton);

45 #region Static Show Methods #region Static Show Methods // STATIC SHOW() METHODS // STATIC SHOW() METHODS public static TaskDialogResult Show(string msg) public static TaskDialogResult Show(string msg) { return ShowCoreStatic(msg, return ShowCoreStatic(msg, TaskDialogDefaults.MainInstruction, TaskDialogDefaults.MainInstruction, TaskDialogDefaults.Caption); TaskDialogDefaults.Caption); } public static TaskDialogResult Show(string msg, string mainInstruction) public static TaskDialogResult Show(string msg, string mainInstruction) { return ShowCoreStatic(msg, return ShowCoreStatic(msg, mainInstruction, //replace TaskDialogDefaults.MainInstruction mainInstruction, //replace TaskDialogDefaults.MainInstruction TaskDialogDefaults.Caption); TaskDialogDefaults.Caption); } public static TaskDialogResult Show(string msg, string mainInstruction, public static TaskDialogResult Show(string msg, string mainInstruction, string caption) string caption) { return ShowCoreStatic(msg, return ShowCoreStatic(msg, mainInstruction, // replace TaskDialogDefaults.MainInstruction, mainInstruction, // replace TaskDialogDefaults.MainInstruction, caption, // replace TaskDialogDefaults.Caption); caption, // replace TaskDialogDefaults.Caption); } #endregion #endregion

46 public class TaskDialogCommandLink : TaskDialogButton public class TaskDialogCommandLink : TaskDialogButton { public override string ToString() public override string ToString() { // Bug: String format incorrect // Bug: String format incorrect string instructionString = (instruction == null ? "" string instructionString = (instruction == null ? "" : instruction + "\n"); : instruction + "\n"); return instructionString + Text; return instructionString + Text; // FIX: String format should be: text \n instructionsString // FIX: String format should be: text \n instructionsString string instructionString = (instruction == null ? "" string instructionString = (instruction == null ? "" : instruction); : instruction); return Text + "\n" + instructionString; return Text + "\n" + instructionString; }}

47

48 Search Box Rozšiřitelná Známá místa Vlastnosti souboru Navigace Úlohy dle typu obsahu Address Bar Třídění, filtrování, shlukování Náhled

49 Nová API: IFileDialog,IFileOpenDialogIFileSaveDialog,IFileDialogEvents IFileDialogCusto mize IFileDialogContro lEvents Mini Save Mode

50 Nové API funkce jsou Vtable Interfaces Stávající Win32 API (GetOpenFileName / GetSaveFileName) jsou stále podporované Zobrazí nový Dialog s přednastavenými vlastnostmi Windows Forms a WPF jsou postaveny nad těmito Win32 API funkcemi

51

52 Následovník “specielních složek” Rozšiřitelné třetími stranami Založeno na KNOWNFOLDERID Kategorie Common (pro sdílení dat/nastavení mezi uživateli) Per-User Virtuální (např. Control Panel) Fixní Win32 funkce SHGetKnownFolderPath Následovník ShGetFolderPath Nové COM API (VTable interfaces) IKnownFolderManager, IKnownFolder

53

54 Mnoho systémových ikon je používaných napříč systémem Vývojáři je chtějí používat Typické je copy/paste Nová reprezentace v budoucích OS vyžaduje manuální akutalizace Nová funkce SHGetStockIconInfo Umožňuje získat dynamicky za běhu ikony z OS

55 HRESULT SHGetStockIconInfo( SHSTOCKICONID siid, // enum type SHSTOCKICONID siid, // enum type UINT uFlags, // bit field UINT uFlags, // bit field SHSTOCKICONINFO *psii); SHSTOCKICONINFO *psii); typedef struct _SHSTOCKICONINFO { DWORD cbSize; DWORD cbSize; HICON hIcon; HICON hIcon; int iSysImageIndex; int iSysImageIndex; int iIcon; int iIcon; WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH]; } SHSTOCKICONINFO; HRESULT SHGetStockIconInfo( SHSTOCKICONID siid, // enum type SHSTOCKICONID siid, // enum type UINT uFlags, // bit field UINT uFlags, // bit field SHSTOCKICONINFO *psii); SHSTOCKICONINFO *psii); typedef struct _SHSTOCKICONINFO { DWORD cbSize; DWORD cbSize; HICON hIcon; HICON hIcon; int iSysImageIndex; int iSysImageIndex; int iIcon; int iIcon; WCHAR szPath[MAX_PATH]; WCHAR szPath[MAX_PATH]; } SHSTOCKICONINFO;

56

57 Aero Wizards

58 Nahrazuje Wizard ’97 framework Změny Odstranění nepotřebných stran Vytvoření sekce záhlaví (heading) a podtitul (subheading) Navigace připomíná navigaci v IE Využívá Command link command

59 AERO Wizards

60 Windows Vista User Experience Guidelines de de MSDN User Interface Developer Center Windows Vista Developer Story oads/docs/developerstory/default.aspx oads/docs/developerstory/default.aspx

61

62 „Miniaplikace“ účelově zaměřené na určitý typ akce/scénáře bězící v rámcí SideBar

63 Web, Desktop a Sideshow Integrace Live.com gadgets běží uvnitř Sidebar Sidebar gadget data lze zobrazit v SideShow live.com DHTML / Atlas Sidebar DHTML / Gadget OM SideShow C++

64 Nainstalované aplikace Nejsou ve start menu Nemají menu, toolbar Nelze je minimalizovat, maximalizovat Nelze se na ně přepnout pomocí ALT+TAB Nejsou to webové stránky Jsou to instalované „komponenty“ Sidebar pracuje s těmito „komponentami“

65 DHTMLCSS Gadget OM JScript COM (ActiveX) objekty Vytváření pomocí CreateObject Windows Media Player, Office, WMI,…

66 UdálostiDock/undock Práce s vlastnostmi Interakce se systémem System.DisplaySystem.EnvironmentSystem.GlobalizationSystem.MachineSystem.Net.NetworkInformationSystem.Shell.[Item/Drive/Metadata/RecycleBin] CreateObject pro externí objekty/kód

67 Jeden dialog pro nastavení vlastností Jednoduchý dialog bez záložek Gadgety v SideBaru jsou široké max. 130px Plovoucí (umístěné vně) mohou být větší 24-bit Per-pixel Alpha (.PNG) a transparentnost pro grafické pozadí a okraje Není podpora uvnitř gadgetu (není obsaženo v MSHTML)

68 Gadget může obsahovat více jazykových verzí Sidebar automaticky použije první jazyk z listu preferovaných jazyků v nastavení Visty Lokalizované soubory mohou být součástí instalace Nebo lze doinstalovat později

69 Sidebar platform versioning Gadget.xml includes platform version number Gadget versioning Gadget.xml includes gadget version, author and URI If you are installing a gadget that already exists Given version info and author Prompted to replace

70 Gadget.xml - manifest IkonaVerze Gadget Type info Bezpečnostní informace Info website Prezentace UI Zdroje (obrázky, lokalizované řetězce, …) Výkonný kód (JavaScript) Ikona pro Gadget picker

71 Sidebar Gadgets jsou instalovány na počítač.gadget je Zip nebo CAB CAB je možné podepsat Může běžet více instancí jednoho gadgetu Nastavení se ukládají jak pro SideBar tak pro jednotlivé instance gadgetů

72

73 tcenter/topics/vista/gadgets-pt1.mspx tcenter/topics/vista/gadgets-pt1.mspx Gadget API asp?url=/library/en- us/sidebar/sidebar/reference/refs.asp asp?url=/library/en- us/sidebar/sidebar/reference/refs.asp Channel 9 video ?postid= ?postid=128231

74

75 DownloadEngine RSS 0.9x RSS 1.0 RSS 2.0 Atom ProhlížečFotografieKontakty… Zprávy BlogyFotografieAudioKalendářeSeznamy…. MergeProcessor FeedlistPoložkyObálky RSS Object Model Úložiště Služby API

76 FeedsManager Feed FeedFolder FeedItem FeedEnclosure

77 I[X]FeedEventsI[X]Feed::GetWatcher Změny položek FeedItemCountChanged Změny vlastních feeds Smazání, přejmenování, změna URL, … Aktivity Downloading, download completed

78 I[X]FeedFolderEvents Nadmnožina I[X]FeedEvents Scope All, Self_Only, Self_And_Children_Only Maska Složka či feed události

79

80 Blog MSDN asp?url=/library/en- us/FeedsAPI/rss/overviews/entry.asp?fra me=true asp?url=/library/en- us/FeedsAPI/rss/overviews/entry.asp?fra me=true

81

82

83 Možnost vyhledávat soubory, složky, obsah, …. Čtení a zápis vlastností položek Nový File Dialog podporující tyto vlastnosti Přidat vyhledávání vlastních dat Přidat vlastní typ souborů a pracovat s nimi

84 FileSystem MAPIStore OtherStores Property System 3 rd Party Schemas SystemSchemas Property Handlers 3rd Party PropertyHandlers ImagePropertyHandlers MediaPropertyHandlers … … Indexer ContentIndex&PropertyCache 3rd Party Applications Query System Protocol Handlers FileProtocolHandler MAPIProtocolHandler 3rd Party ProtocolHandler … IFilters IFilters

85 Jednoduchá a pokročilá syntaxe Použití Není nutné používat parsing či SQL Podpora povinných výrazů Filtrování dle libovolného řetězce či vlastnosti Konzistentní syntaxe vlastnost:hodnota napříč systémem a aplikacemi Pro parsing lze použít ISearchQueryHelper Holiday plans from:Jessica

86 OLE DB provider s dialektem SQL full text Porovnávání řetězců, čísel a datumů CONTAINS a FREETEXT Vyhledávání dle prefixu (“begins with”) Podpora logických výrazů Hit counts a stránkování Podpora ORDER BY a GROUP BY

87 Shodná syntaxe pro Windows Desktop Search SELECT System.ItemName, System.ItemUrl, System.ApplicationName FROM SystemIndex WHERE System.ApplicationName='Microsoft Office Word‘ AND System.DateCreated >=' ’ AND System.Author='Michal Neuwirth'

88

89 Vytváření a používání známých adresářů IKnownFolderManager Tvorba nových adresářů pro vyhledávání ISearchFolderItemFactory Použití funkcí pro práci se soubory Progres dialog pro dlouhotrvající operace IFileDialog Prvek ExplorerBrowser COM prvek pro zobrazení obsahu z Windows Exploreru IExplorerBrowser

90 Vyhledávání a zpracování vlastních formátů Property Handler Čtení/zápis vlastností pro vlastní formáty IPropertyStore, IPropertyStoreCapabilities Rozšířené možnosti při zobrazní vlastních formátů IThumbnailProviderIPreviewHandler

91

92 p?url=/library/en- us/dnanchor/html/EntSearch_anch.asp p?url=/library/en- us/dnanchor/html/EntSearch_anch.asp Preview handlers 01/PreviewHandlers/default.aspx 01/PreviewHandlers/default.aspx 45.aspx 45.aspx Microsoft SharePoint Portal Server Search SQL Syntaxe us/library/ms aspx us/library/ms aspxhttp://msdn2.microsoft.com/en- us/library/ms aspxhttp://msdn2.microsoft.com/en- us/library/ms aspx

93

94 Nové power plány Balanced Power Saver High Performance Vývojáři se mohou Registrovat pro notifikace Zpracovávat notifikace

95 WM_POWERBROADCAST Zprávy o power management událostech PBT_POWERSETTINGCHANGEGUID_ACDC_POWER_SOURCEGUID_MONITOR_POWER_ON GUID_BATTERY_PERCENTAGE_REMAINI NG GUID_POWERSCHEME_PERSONALITY [Un]RegisterPowerSettingNotification [Od]Registrace ke zpracování notifikací

96

97

98 Registrace pro restartování aplikace po fatální chybě Registrace je použita též pro Restart Manager Restart procesu po aplikaci patche Všechny aplikace mohou podporovat Např. při podpoře document recovery Jak na to? Registrovat command-line který bude volán při každém zavolání HRESULT RegisterApplicationRestart (IN PCWSTR pwzCommandline, DWORD dwFlags) Po fatální chybě jsou reportovány informace o chybě a restart aplikace

99 Možnost zotavení dat po fatální chybě Jak na to? 1. Zaregistrovat aplikaci jako “recovery callback” při spuštění HRESULT RegisterApplicationRecoveryCallback (IN RECOVERY_ROUTINE RecoveryRoutine, IN PVOID pvParameter) 2. Automaticky je volána rutina pro opravu dat Nutné volat ApplicationRecoveryInProgress() cca každých 5 vteřin pro informovanost, ze pořád probíha Recovery Volat ApplicationRecoveryFinished() po ukončení recovery procesu Neprovádět operace vyžadující interakci s UI....informace uložit např. na disk či zpracovávat v paměti

100 Systém postavený nad WinXP + Zachycuje „crash“ a „hang“ aplikací a reportuje problémy na centrální místo Reportované problémy jsou autorovi aplikace k dispozici na https://winqual.microsoft.com Vytvoření účtu a další infromace: wer/default.aspx wer/default.aspx

101 1. Nastane problém 2. WER plugin zavolá odpovídající WER API Systém obsahuje plug-ins pro crash, hang a bluescreen Systém obsahuje plug-ins pro crash, hang a bluescreen Lze definovat vlastní Lze definovat vlastní 3. WER posílá potřebná data, vytvoří report a požádá o souhlas k odeslání 4. WER odešle report na server pokud uživatel souhlasí 5. Pokud jsou potřebná další data, WER je připraví a poptá se uživatele 6. Pokud je nastaveno Restart a Recovery WER volá callback funkce v době co posílá report na server 7. Pokud existuje na problém odpověď je uživatel informován

102 WerAddExcludedApplication Vyloučení naší aplikace z WER WerRemoveExcludedApplication Přihlášení do WER procesu pokud jsme použili předchozí funkci WerReportAddDump, WeReportAddFile,.... us/library/ms aspx us/library/ms aspx

103

104

105 Všichni uživatelé běží jako Standard User Vyžadováno explicitní povolení „povýšení“ práv pro některé operace Např. přístup do ovládacích panelů, instalace sw atd. Možnost spustit operaci pod vyššími právy UAC je možno zapnout/vypnout

106 V rámci manifestu nastavit používání admin oprávnění V rámci manifestu nastavit používání admin oprávnění Instalační aplikace mají „povýšená“ oprávnění Run as administrator

107 Uživatelský proces Změna Časové ZónyZměna Časové Zóny Spouštění povolených aplikacíSpouštění povolených aplikací Instalace fontůInstalace fontů Instalace tiskárenInstalace tiskáren Atd.Atd. Admin logon Standard User Mode Split Token Admin oprávnění Standardní oprávnění Admin oprávnění “Standard User” Token Admin Token Admin Process Instalace aplikace Admin Process Konfigurace IIS Admin Process Změna času Admin oprávnění Oprávnění std. uživatele Admin oprávnění Abby Token

108 Připravit a otestovat aplikace jako standardní uživatel Identifikovat úlohy vyžadující Administrátorská oprávnění Nástroje příkazové řádky běží pod oprávněními uživatel, který je zavolá Označit „štítem“ operace vyžadující povýšení oprávnění

109

110 Nelze povýšit běžící proces Doporučené postupy Vedle sebe běžící procesy Sdílená paměť RPC Administrační COM objekt pro povýšení oprávnění CoCreateAsAdmin

111 Definice pro BCM_SETSHIELD zprávu [DllImport("user32.dll")] static extern IntPtr SendMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); UInt32 Msg, IntPtr wParam, IntPtr lParam); const uint BCM_SETSHIELD = 0x ; void SetShieldIcon(bool Show) { SendMessage(new HandleRef(this, this.Handle), SendMessage(new HandleRef(this, this.Handle), BCM_SETSHIELD, IntPtr.Zero, BCM_SETSHIELD, IntPtr.Zero, new IntPtr (Show ? 1 : 0)); new IntPtr (Show ? 1 : 0));} Zavolání SendMessage pro nastavení ikony

112 Starší aplikace často zapisují do míst určených pro administrátory HLKM\Software, %SystemDrive%\Program Files, … Přesměrování práce s daty odstraňuje povýšení oprávnění Zápis do HKLM je přesměrován do HKCU Zápis do systémových adresářů přesměrováno do uživatelského adresáře

113 MSI 3.1 pro instalaci a aktualizaci Nevytvářet samo-aktualizační nativní kód Nepředpokládat administrátorská práva Testovat jednotlivé komponenty pod správným kontextem ClickOnce pro.NET standardní aplikace

114 Per-user nastavení aplikace provádět během prvního spuštění aplikace (ne během instalace) Per-user data ukládat do %LOCALAPPDATA% Per-Machine data ukládat do %ALLUSERPROFILE% Administrační nastavení provádět během instalace

115 Local Security Policy Security Settings->Local Policies- >Security Options User Account Control (9 politik)

116

117 owsvista/evaluate/feat/uaprot.mspx owsvista/evaluate/feat/uaprot.mspx ult.asp?url=/library/en- us/dnlong/html/AccProtVista.asp ult.asp?url=/library/en- us/dnlong/html/AccProtVista.asp UAC Blog Aaron Margosis

118 User Account Control Všechny projekty budou mít vestavený manifest (nastaveno na AsInvoker) Zdroj System.Drawing.SystemIcons.Shield Běh Orcas pod non-admin účtem Common File Dialogs System.Windows.Forms.OpenDialog/SaveDialog budou podporovat nový vzhled a vlastnosi pod Windows Vista

119 Nový grafický systém AERO Nové ovládací prvky Gadgets pro SideBar Zabudovaná podpora pro RSS Možnost rozšiřování služeb pro vyhledávání Systém pro restart a obnovu apliací Nový bezpečnostní model běhu aplikací

120


Stáhnout ppt "1. VTable-based COM interface 2. Komplexní PInvoke definice 3. Shell extensibility interface který musí být implementován v nativním kódu."

Podobné prezentace


Reklamy Google