Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek definuje protokol pro integraci aplikací prvních a třetích stran s nástrojem Výstřižky ve Windows pomocí schématu ms-screenclip: URI (Uniform Resource Identifier). Protokol podporuje zachytávání obrázků a videa (se zvukem) prostřednictvím nástroje Výstřižky a uživatelé aplikací si mohou vybrat, které funkce nástroje Výstřižky se budou zobrazovat.
Důležité
Tento protokol vyžaduje aplikaci Windows v balíčku (MSIX). Když je vaše aplikace zabalená, operační systém automaticky poskytne identitu vaší aplikace nástroji Výstřižky, který ji používá k bezpečnému směrování odpovědi z výstřižku zpět do vaší aplikace. Nezabalené volající (Win32) nemohou přijímat odpovědi prostřednictvím redirect-uri. Pokud rozbalená aplikace poskytuje redirect-uri, nástroj Výstřižky neodešle odpověď a může se ukončit bez zobrazení uživatelského rozhraní pro zachycení.
Note
Tento protokol nahrazuje zkušenost popsanou v Zachycení úvodní obrazovky (Deprecated), které je nyní zastaralé.
Podporované funkce
Protokol nástroje pro výstřižky podporuje následující funkce:
- Zachytávání obdélníků
- Freeform Capture
- Zachytávání oken
- Záznam obrazovky
- Přizpůsobení dostupných režimů zachycení
- Automatické ukládání (volitelné)
Specifikace protokolu
Formát identifikátoru URI:ms-screenclip://{host}/{path}?{query parameters}
| Součást | Description | Hodnoty |
|---|---|---|
| Schéma | Vlastní schéma pro nástroj Výstřižek | ms-screenclip |
| Host | Operace nástroje Výstřižky, která se má provést |
capture nebo discover |
| Path | Typ média, který se má zachytit (platí jenom pro capture hostitele; discover hostitel nemá žádnou cestu) |
/image nebo /video |
| Query | Parametry té operace | Prohlédněte si následující tabulky. |
Note
Cesty a názvy parametrů dotazu nejsou citlivé na velikost písmen.
ms-screenclip://capture/Image?Redirect-Uri=my-app://response Například se chová stejně jako ms-screenclip://capture/image?redirect-uri=my-app://response.
Zachycení hostitele
Spusťte zachytávací překryv Nástroje Výstřižky pomocí capture hostitele.
Cesta
| Cesta | Description |
|---|---|
/image |
Spustí snímek obrázku (snímek obrazovky). Vyžaduje parametr režimu. |
/video |
Spustí snímek videa (záznam obrazovky). Vždy používá režim obdélníku. |
Parametry režimu (zachytávání/image)
/image Pro cestu musíte zadat přesně jeden parametr režimu. Parametry režimu jsou holé parametry dotazu bez hodnoty.
| Parameter | Description |
|---|---|
rectangle |
Interaktivní režim zachycení obdélníku |
freeform |
Interaktivní režim zachytávání volného tvaru. |
window |
Interaktivní režim zachytávání oken |
Důležité
Parametry režimu musí být zadány bez hodnoty. Například použijte &rectangle, ne&rectangle=value. Zadání hodnoty způsobí chybovou odpověď.
Pro /image, musíte zadat přesně jeden parametr režimu. Zadání nuly nebo více než jednoho režimu způsobí chybovou 400 Bad Request odpověď. V /videopřípadě , jakýkoli parametr režimu je ignorován.
Parametry dotazu (zachytávání)
Note
Parametry dotazu mohou být poskytovány v libovolném pořadí.
| Parameter | Typ | Povinné | Description | Výchozí |
|---|---|---|---|---|
redirect-uri |
identifikátor URI | Ano | Identifikátor URI zpětného volání, kam nástroj Výstřižky odešle odpověď na zachycený obsah. Aplikace musí pro toto schéma identifikátoru URI zaregistrovat obslužnou rutinu protokolu. Pokud vynecháte, nástroj Výstřižky nezobrazí uživatelské rozhraní zachycení a nevrátí odpověď. | není k dispozici |
user-agent |
řetězec | Ne (důrazně doporučeno) | Identifikátor volající aplikace, který se používá k protokolování a analýze. Vyžaduje se k diagnostice problémů prostřednictvím kanálů podpory; vynechání na vlastní riziko. | není k dispozici |
api-version |
řetězec | No | Verze protokolu, která se má použít, například "1.2". Pokud tento parametr vynecháte, požadavek se zpracuje jako verze 1.2. |
1.2 |
x-request-correlation-id |
řetězec | No | Jedinečný identifikátor požadavku, který umožňuje odkaz na konkrétní transakci nebo řetěz událostí. | Automaticky vygenerovaný identifikátor GUID |
enabledModes |
řetězec (seznam) | No | Určuje, které režimy zachycení jsou k dispozici v uživatelském rozhraní. Viz EnabledModes níže. | Pouze režim zadaný v identifikátoru URI |
auto-save |
označit příznakem | No | Po zobrazení se zachycený snímek obrazovky nebo záznam automaticky uloží do zařízení uživatele. | Není k dispozici (bez automatického uložení) |
Note
Výchozí hodnota api-version1.2 se při vydání novějších verzí protokolu nezmění. Požadavky, které vynechávají api-version, se vždy zpracovávají jako 1.2. Pokud chcete použít funkce přidané v novější verzi, nastavte api-version ji na tuto verzi. V každém požadavku doporučujeme explicitně zadat api-version , aby vaše aplikace zůstala svázaná se známou verzí protokolu, a ne s implicitními výchozími nastaveními.
Note
Když zadáte api-version, musí přesně odpovídat jedné z hodnot v /discover matici odpovědi supportedVersions (aktuálně 1.0, 1.1a 1.2). Jakákoli jiná hodnota, včetně meziproduktových hodnot jako 1.15 nebo chybných hodnot jako 1.0abc, vrátí odpověď 400 Bad Request. Pokud chcete zjistit sadu verzí, které přijímá konkrétní sestavení Nástroje na vystřihování, zavolejte discover host.
Note
Příznak auto-save respektuje nastavení Výstřižkového nástroje uživatele. Pokud uživatel zakázal automatické ukládání v nástroji Výstřižky, zachycení se neuloží na zařízení, i když vaše žádost obsahuje auto-save.
Zjišťování hostitele
Pomocí discover hostitele můžete za běhu získávat informace o podporovaných možnostech, režimech a verzích protokolu nástroje Výstřižky. To je užitečné při kontrole kompatibility před vytvořením žádosti o zachycení.
Parametry dotazu (zjišťování)
| Parameter | Typ | Povinné | Description | Výchozí |
|---|---|---|---|---|
redirect-uri |
identifikátor URI | Ano | Identifikátor URI zpětného volání, kam nástroj vystřižení odesílá odpověď ohledně možností. Aplikace musí pro toto schéma identifikátoru URI zaregistrovat obslužnou rutinu protokolu. Pokud vynecháte, nástroj Výstřižky nevrátí odpověď. | není k dispozici |
user-agent |
řetězec | Ne (důrazně doporučeno) | Identifikátor volající aplikace, který se používá k protokolování a analýze. | není k dispozici |
x-request-correlation-id |
řetězec | No | Jedinečný identifikátor požadavku. | Automaticky vygenerovaný identifikátor GUID |
Objevit příklad
ms-screenclip://discover?user-agent=MyApp&redirect-uri=my-app://response
Zjistit formát odpovědi
Odpověď je JSON objekt připojený k přesměrovacímu URI jako parametr dotazu discover. Obsahuje:
-
version: Nejnovější verze protokolu, kterou podporuje tento build Nástroje výstřižků. -
defaultVersion: Verze protokolu se předpokládá, když požadavek vynecháapi-version. Přečtěte si toto, abyste pochopili, jak se interpretují vaše neukotvené požadavky. -
supportedVersions: Seznam verzí protokolu, které tato verze nástroje Nástroj pro vystřižení akceptuje. -
capabilities: Pole podporovaných operací zachytávání, z nichž každá obsahuje:-
path: Koncový bod zachycení (napřcapture/image. ,capture/video). -
methods: Podporované metody podobné protokolu HTTP. -
parameters: Dostupné parametry pro koncový bod. -
description: Popis schopnosti.
-
{
"version": 1.2,
"defaultVersion": 1.2,
"supportedVersions": [1.0, 1.1, 1.2],
"capabilities": [
{
"path": "capture/image",
"methods": ["GET"],
"parameters": ["rectangle", "freeform", "window"],
"description": "Captures an image with options for shape."
},
{
"path": "capture/video",
"methods": ["GET"],
"parameters": [],
"description": "Captures a video in a defined area."
}
]
}
EnabledModes
Tento enabledModes parametr umožňuje určit, které režimy zachycení jsou k dispozici v uživatelském rozhraní nástroje Výstřižky. Použijte ho k omezení nebo rozšíření možností uživatele tak, aby odpovídaly požadavkům vaší aplikace.
Podporované režimy
| Mode | Description |
|---|---|
RectangleSnip |
Režim zachycení obdélníku |
WindowSnip |
Režim zachytávání oken |
FreeformSnip |
Volný režim zachycení. |
FullscreenSnip |
Režim zachytávání na celé obrazovce |
SnippingAllModes |
Všechny režimy zachycení obrázků: RectangleSnip, WindowSnipFreeformSnip, , FullscreenSnip. |
RectangleRecord |
Režim záznamu obdélníku |
RecordAllModes |
Všechny režimy nahrávání: v současnosti pouze RectangleRecord. |
All |
Všechny podporované režimy: sjednocení SnippingAllModes a RecordAllModes. |
Tip
All, SnippingAllModesa RecordAllModes jsou agregované hodnoty. Režimy, které jsou součástí, se mohou měnit v různých verzích nástroje Výstřižky. Aplikace, která používá jednu z těchto hodnot, automaticky převezme režimy přidané v budoucích verzích. Pokud chcete zachovat sadu dostupných režimů opravených napříč aktualizacemi, uveďte explicitně konkrétní režimy (například RectangleSnip,FreeformSnip).
Důležité
- Pro
/imageparametr režimu (např.rectangle,freeform,window) je vyžadován v URI, i kdyženabledModesje zadán. Parametr režimu určuje původně vybraný režim. - Režim zadaný v URI je vždy k dispozici v uživatelském rozhraní, i když se neobjevuje v
enabledModes.?freeform&enabledModes=RectangleSnipNapříklad zpřístupňuje volný tvar (z identifikátoru URI) i obdélníkový výnip s předem vybraným volným tvarem. - Pokud
enabledModestento parametr vynecháte, bude v uživatelském rozhraní k dispozici pouze režim zadaný v identifikátoru URI. - Pokud
/imagenení zadán žádný parametr režimu, požadavek je neplatný a bude mít za následek chybu bez ohledu na .enabledModes
Příklady EnabledModes
Povolit pouze obdélníkový výřez:
ms-screenclip://capture/image?rectangle&enabledModes=RectangleSnip&user-agent=MyApp&redirect-uri=my-app://response
Povolit obdélník a výnip okna:
ms-screenclip://capture/image?rectangle&enabledModes=RectangleSnip,WindowSnip&user-agent=MyApp&redirect-uri=my-app://response
Povolte všechny režimy výstřižků:
ms-screenclip://capture/image?rectangle&enabledModes=SnippingAllModes&user-agent=MyApp&redirect-uri=my-app://response
Povolit pouze režim nahrávání:
ms-screenclip://capture/video?enabledModes=RecordAllModes&user-agent=MyApp&redirect-uri=my-app://response
Povolte více režimů výstřižků a nahrávek:
ms-screenclip://capture/image?freeform&enabledModes=RectangleSnip,RectangleRecord&user-agent=MyApp&redirect-uri=my-app://response
Vzhledem k tomu, že volný tvar je zadaný v identifikátoru URI, bude předem vybrán. Uživatelé můžou přepínat mezi volným výřezem, výstřihem obdélníku a záznamem obdélníku.
Responses
Jakmile uživatel dokončí nebo zruší zachytávání, nástroj Výstřižky odešle odpověď zpět do vaší aplikace prostřednictvím redirect-uri. Odpověď je strukturována jako URI parametry dotazu, které jsou připojeny k vašemu přesměrovacímu URI.
Pokud již obsahuje redirect-uri parametry dotazu (například my-app://response?sessionId=abc), tyto parametry se zachovají a parametry odpovědi se připojí pomocí &. Můžete to použít k přenosu kontextu volajícího skrz zpětné volání – hodnota sessionId=abc se odráží zpět v identifikátoru URI odpovědi spolu s code, reason, x-request-correlation-id a (pro úspěšné zachycení) file-access-token.
Parametry odpovědi
| Parameter | Typ | Přítomný | Description |
|---|---|---|---|
code |
int | Always | Stavový kód ve stylu HTTP označující výsledek. |
reason |
řetězec | Always | Popis výsledku čitelný člověkem. |
x-request-correlation-id |
řetězec | Always | ID korelace z původního požadavku (nebo automaticky vygenerovaného id). |
file-access-token |
řetězec | Pouze úspěch | Token SharedStorageAccessManager představující zachycené médium. Tento příkaz použijte k načtení souboru. |
discover |
řetězec | Pouze objevování | Zakódovaný JSON ve formátu URL obsahující odpověď na schopnosti. |
Stavové kódy
| Code | Reason | Description |
|---|---|---|
| 200 | Success | Zachycení bylo úspěšně dokončeno. Odpověď obsahuje file-access-token. |
| 400 | Chybný požadavek – Neplatné nebo chybějící parametry | Požadavek nelze zpracovat. Zkontrolujte, jestli jsou přítomné a platné všechny požadované parametry. |
| 408 | Vypršení časového limitu požadavku – operace trvala příliš dlouho | Operace vypršela před dokončením. |
| 499 | Uzavřená žádost klienta – Uživatel zrušil akci Snip | Uživatel zrušil zachytávání stisknutím klávesy Escape nebo kliknutím pryč. Platí pouze pro /image a /video. |
| 500 | Vnitřní chyba serveru – Zpracování selhalo | Během zachycení došlo k neočekávané chybě. |
Ukázkové odpovědi
Úspěšné zachycení:
my-app://response?code=200&reason=Success&x-request-correlation-id=aaaa0000-bb11-2222-33cc-444444dddddd&file-access-token=cccc2222-dd33-4444-55ee-666666ffffff
Uživatel byl zrušen:
my-app://response?code=499&reason=Client%20Closed%20Request%20-%20User%20Cancelled%20the%20Snip&x-request-correlation-id=bbbb1111-cc22-3333-44dd-555555eeeeee
Neplatný požadavek (chybějící parametr režimu):
my-app://response?code=400&reason=Bad%20Request%20-%20Invalid%20or%20Missing%20Parameters&x-request-correlation-id=bbbb1111-cc22-3333-44dd-555555eeeeee
Úplné příklady identifikátorů URI
| Případ použití | identifikátor URI | Description |
|---|---|---|
| Snímek obrazovky s obdélníkem | ms-screenclip://capture/image?rectangle&user-agent=MyApp&redirect-uri=my-app://response |
Interaktivní zachycení obdélníku Výsledek vrácený volajícímu. |
| Snímek obrazovky s volným tvarem | ms-screenclip://capture/image?freeform&user-agent=MyApp&redirect-uri=my-app://response |
Interaktivní zachytávání volných tvarů Výsledek vrácený volajícímu. |
| Snímek obrazovky okna | ms-screenclip://capture/image?window&user-agent=MyApp&redirect-uri=my-app://response |
Interaktivní zachytávání oken Výsledek vrácený volajícímu. |
| Záznam obrazovky | ms-screenclip://capture/video?user-agent=MyApp&redirect-uri=my-app://response |
Interaktivní nahrávání obrazovky Výsledek vrácený volajícímu. |
| Objevte možnosti | ms-screenclip://discover?user-agent=MyApp&redirect-uri=my-app://response |
Dotazování podporovaných funkcí Funkce JSON vrácené volajícímu |
| Obdélník s automatickým uložením | ms-screenclip://capture/image?rectangle&auto-save&user-agent=MyApp&redirect-uri=my-app://response |
Zachytávání obdélníků s povoleným automatickým ukládáním |
| Obdélník se všemi režimy | ms-screenclip://capture/image?rectangle&enabledModes=All&user-agent=MyApp&redirect-uri=my-app://response |
Obdélníkové zachycení je předvybráno, všechny režimy jsou dostupné v uživatelském rozhraní. |
Spuštění z aplikace
Ke spuštění nástroje Výstřižky z zabalené aplikace musíte použít Launcher.LaunchUriAsync . Jiné metody spuštění (například Process.Start nebo spuštění v shellu) neposkytnou identitu vaší aplikace a nástroj Výstřižky nedoručí odpověď.
Krok 1: Registrace obslužné rutiny protokolu
Zaregistrujte ve své Package.appxmanifest aplikaci vlastní protokol, aby vaše aplikace získala odpověď zpětného volání. Název protokolu se musí shodovat se schématem použitým ve vašem redirect-urisouboru .
<Extensions>
<uap:Extension Category="windows.protocol">
<uap:Protocol Name="my-app" DesiredView="default">
<uap:DisplayName>My App Protocol</uap:DisplayName>
</uap:Protocol>
</uap:Extension>
</Extensions>
Další podrobnosti o registraci a zpracování aktivací protokolu najdete v tématu Zpracování aktivace identifikátoru URI .
Krok 2: Spuštění nástroje Výstřižky
// Capture a screenshot in rectangle mode
var uri = new Uri(
"ms-screenclip://capture/image"
+ "?rectangle"
+ "&user-agent=MyApp"
+ "&redirect-uri=my-app://capture-response"
+ "&x-request-correlation-id=" + Guid.NewGuid().ToString()
);
await Launcher.LaunchUriAsync(uri);
// Record a video
var uri = new Uri(
"ms-screenclip://capture/video"
+ "?user-agent=MyApp"
+ "&redirect-uri=my-app://capture-response"
);
await Launcher.LaunchUriAsync(uri);
// Discover capabilities (returns immediately, no capture UI)
var uri = new Uri(
"ms-screenclip://discover"
+ "?user-agent=MyApp"
+ "&redirect-uri=my-app://discover-response"
);
await Launcher.LaunchUriAsync(uri);
Krok 3: Zpracování odpovědi
Po dokončení zachytávání (nebo pokud uživatel zruší) nástroj Výstřižky aktivuje vaši aplikaci prostřednictvím redirect-uri s parametry výsledků, které jsou připojeny jako řetězce dotazu. Většina integrací se už spouští, když dorazí odpověď – volající spustil nástroj Výstřižky a pak čekal na zpětné volání, takže aplikace musí zpracovat aktivaci studeného spuštění (aplikace nebyla spuštěná) a teplá opětovná aktivace (aplikace už běží). Přihlaste se k odběru obou kanálů ve App.xaml.cs.
Zpracování odpovědi na zachytávání (obrázek nebo video):
// In App.xaml.cs: handle protocol activation for both cold-start and warm re-activation
protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args)
{
// Cold-start path: the app was launched by Snipping Tool's callback.
var activatedArgs = Microsoft.Windows.AppLifecycle.AppInstance.GetCurrent().GetActivatedEventArgs();
if (activatedArgs.Kind == Microsoft.Windows.AppLifecycle.ExtendedActivationKind.Protocol)
{
if (activatedArgs.Data is Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs protocolArgs)
{
_ = HandleProtocolActivationAsync(protocolArgs.Uri);
}
}
// Warm re-activation path: the app is already running when the callback arrives.
Microsoft.Windows.AppLifecycle.AppInstance.GetCurrent().Activated += (sender, e) =>
{
if (e.Kind == Microsoft.Windows.AppLifecycle.ExtendedActivationKind.Protocol &&
e.Data is Windows.ApplicationModel.Activation.IProtocolActivatedEventArgs protocolArgs)
{
_ = HandleProtocolActivationAsync(protocolArgs.Uri);
}
};
}
private async Task HandleProtocolActivationAsync(Uri uri)
{
var query = new WwwFormUrlDecoder(uri.Query);
var code = query.GetFirstValueByName("code");
var reason = query.GetFirstValueByName("reason");
if (code == "200")
{
var token = query.GetFirstValueByName("file-access-token");
var file = await SharedStorageAccessManager.RedeemTokenForFileAsync(token);
// Use the captured file (see "Retrieving captured media" below)
}
else
{
// Handle error (400, 408, 499, 500)
Debug.WriteLine($"Snipping Tool returned {code}: {reason}");
}
}
Zpracování odpovědi na zjišťování:
private void HandleDiscoverResponse(Uri uri)
{
var query = new WwwFormUrlDecoder(uri.Query);
var code = query.GetFirstValueByName("code");
if (code == "200")
{
var discover = query.GetFirstValueByName("discover");
// discover contains a URL-encoded JSON capabilities payload
var capabilities = Uri.UnescapeDataString(discover);
// Parse the JSON to inspect supported capture modes
}
}
Tip
Pokud jste odeslali x-request-correlation-id spolu s žádostí, ověřte, že odpověď obsahuje stejnou hodnotu, abyste mohli správně přiřadit odpověď k aktuální žádosti. Pokud necháte nástroj výstřižky automaticky vygenerovat, odpověď nese vygenerovanou hodnotu – považuje ji za odpovídající nejnovější požadavek v rámci letu.
Načítání zachyceného média pomocí tokenu
K uplatnění zachyceného souboru a přístupu k němu použijte třídu file-access-token.
Omezení tokenu:
- Token lze uplatnit pouze jednou. Po uplatnění už není platný.
- Platnost tokenu vyprší po 14 dnech.
- Aplikace nemůže mít více než 1 000 aktivních tokenů. Po uplatnění, odebrání nebo vypršení platnosti tokenu se už do kvóty nezapočítá.
// Redeem the token and display the captured image
var file = await SharedStorageAccessManager.RedeemTokenForFileAsync(token);
using (var stream = await file.OpenReadAsync())
{
var bitmap = new BitmapImage();
await bitmap.SetSourceAsync(stream);
MyImage.Source = bitmap;
}
// Or copy to your app's local storage
var localFolder = ApplicationData.Current.LocalFolder;
await file.CopyAsync(localFolder, file.Name, NameCollisionOption.GenerateUniqueName);
Bezpečnostní aspekty
Nástroj Výstřižky před spuštěním ověří všechny redirect-uri hodnoty. Vynucují se následující ochrany:
- Balené volající aplikace: Pokud je vaše aplikace zabalenou aplikací Windows (MSIX), operační systém bezpečně směruje odpověď zachycení zpět do vaší aplikace, aby ji mohla přijímat pouze vaše aplikace. Toto je doporučená cesta integrace.
- Ověřování vstupu: Nástroj výstřižky odmítne identifikátory URI přesměrování, které obsahují cesty UNC, počáteční nebo koncové prázdné znaky nebo řídicí znaky.
-
Žádné fragmenty: Identifikátory URI přesměrování, které obsahují fragment adresy URL (například
my-app://response#section), jsou odmítnuty. Aplikace Snipping Tool připojí parametry odpovědi jako řetězec dotazu, a fragment by je spolkl. - Sebeodkazování ochrana: Přesměrovací URI, které by způsobily rekurzivní aktivaci nástroje Výstřižek, jsou blokované.
Důležité
Pro volání aplikací:
- Zaregistrujte zpracovatele protokolu pro schéma URI přesměrování, aby vaše aplikace mohla přijímat odpovědi.
- Před zpracováním ověřte a sanitujte všechny parametry přijaté v odpovědi.
- Ověřte, že odpověď
x-request-correlation-idodpovídá vaší probíhající žádosti, abyste se vyhnuli zpracování zastaralé odpovědi nebo záměně souběžných požadavků. ID korelace zabraňuje záměnám; nezakládá původ tokenů – zabezpečené směrování tokenů vychází z kanálu zpětného volání aplikace.
Související obsah
Windows developer