Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln anger protokollet för integrering av program från första och tredje part med Windows Snipping Tool med hjälp av schemat ms-screenclip: URI (Uniform Resource Identifier). Protokollet stöder insamling av bilder och video (med ljud) via skärmklippsverktyget, och appuppringare kan välja vilka funktioner i skärmklippsverktyget som deras app ska visa.
Important
Det här protokollet kräver en packaged Windows app (MSIX). När din app paketeras tillhandahåller operativsystemet automatiskt appens identitet till Snipping Tool, som använder den för att på ett säkert sätt dirigera insamlingssvaret tillbaka till din app. Opackade (Win32)-anropare kan inte ta emot svar via redirect-uri. Om en uppackad app tillhandahåller ett redirect-uri, levererar inte Snipping Tool svaret och kan stängas utan att visa fångstgränssnittet.
Note
Det här protokollet ersätter upplevelsen som dokumenteras i Starta skärmsnippning (inaktuell), som nu är inaktuell.
Funktioner som stöds
Protokollet Snipping Tool stöder följande funktioner:
- Rektangelupptagning
- Frihandstagning
- Avbildning av fönster
- Skärminspelning
- Anpassa tillgängliga avbildningslägen
- Spara automatiskt (valfritt)
Protokollspecifikation
URI-format:ms-screenclip://{host}/{path}?{query parameters}
| Komponent | Description | Värden |
|---|---|---|
| System | Det anpassade schemat för Snipping Tool | ms-screenclip |
| Värd | Den snipping Tool-åtgärd som ska utföras |
capture eller discover |
| Path | Medietypen att fånga (gäller endast för värd capture; värd discover har ingen sökväg) |
/image eller /video |
| Query | Parametrar för åtgärden | Se tabeller nedan |
Note
Sökvägar och frågeparameternamn är skiftlägesokänsliga. Beter sig till exempel ms-screenclip://capture/Image?Redirect-Uri=my-app://response på samma sätt som ms-screenclip://capture/image?redirect-uri=my-app://response.
Avbilda värd
Använd capture-värden för att starta Snipping Tools avbildningsöverlägg.
Väg
| Väg | Description |
|---|---|
/image |
Startar skärminspelning. Kräver en lägesparameter. |
/video |
Startar videoinspelning (skärminspelning). Använder alltid rektangelläge. |
Lägesparametrar (uppfångning/avbildning)
/image För sökvägen måste du ange exakt en lägesparameter. Lägesparametrar är enkla query-parametrar utan värde.
| Parameter | Description |
|---|---|
rectangle |
Interaktiv rektangel avbildningsläge. |
freeform |
Interaktiva frihandsinspelningsläget. |
window |
Interaktivt avbildningsläge för fönster. |
Important
Lägesparametrar måste anges utan värde. Använd till &rectangle exempel, inte&rectangle=value. Om du anger ett värde får du ett felsvar.
För /imagemåste du ange exakt en lägesparameter. Om du anger noll eller mer än ett läge resulterar det i ett 400 Bad Request felsvar. För /videoignoreras alla lägesparametrar.
Frågeparametrar (avbildning)
Note
Frågeparametrar kan anges i valfri ordning.
| Parameter | Type | Obligatoriskt | Description | Standardinställning |
|---|---|---|---|---|
redirect-uri |
URI | Yes | Återkallnings-URI där Snipping Tool skickar det fångade svaret. Din app måste registrera en protokollhanterare för det här URI-schemat. Om det utelämnas visas inte avbildningsverktyget i avbildningsgränssnittet och returnerar inte något svar. | Inte tillämpligt |
user-agent |
snöre | Nej (rekommenderas starkt) | Identifierare för det anropande programmet som används för loggning och analys. Krävs för att diagnostisera problem via supportkanaler; utelämna på egen risk. | Inte tillämpligt |
api-version |
snöre | Nej | Protokollversion som ska användas, till exempel "1.2". Om begäran utelämnas bearbetas den som version 1.2. |
1.2 |
x-request-correlation-id |
snöre | Nej | Unik identifierare för begäran, vilket tillåter referens till en viss transaktion eller händelsekedja. | Automatiskt genererat GUID |
enabledModes |
sträng (lista) | Nej | Styr vilka avbildningslägen som är tillgängliga i användargränssnittet. Se EnabledModes nedan. | Endast det läge som anges i URI:n |
auto-save |
flag | Nej | När den insamlade skärmbilden eller inspelningen finns sparas den automatiskt på användarens enhet. | Finns inte (ingen automatisk sparande) |
Note
Standardvärdet api-version1.2 ändras inte när nyare protokollversioner släpps. Begäranden som utelämnar api-version bearbetas alltid som 1.2. Om du vill använda funktioner som lagts till i en senare version anger du api-version till den versionen. Vi rekommenderar att api-version du uttryckligen anger i varje begäran så att appen förblir knuten till en känd protokollversion i stället för den implicita standardinställningen.
Note
När du anger api-versionmåste det exakt matcha ett av värdena i /discover svarets supportedVersions matris (för närvarande 1.0, 1.1och 1.2). Alla andra värden – inklusive mellanliggande värden som 1.15 eller felaktigt formaterade värden som 1.0abc – returnerar ett 400 Bad Request svar. Om du vill identifiera vilka versioner en specifik Snipping Tool-version accepterar, anropar du discover host.
Note
Flaggan auto-save respekterar användarens inställningar för skärmklippningsverktyget. Om användaren har inaktiverat automatisk besparing i Snipping Tool sparas inte avbildningen på enheten även när din begäran innehåller auto-save.
Identifiera värd
Använd discover värd för att fråga Snipping Tools stödda funktioner, lägen och protokollversioner under körning. Detta är användbart för att kontrollera kompatibiliteten innan du gör en avbildningsbegäran.
Frågeparametrar (upptäck)
| Parameter | Type | Obligatoriskt | Description | Standardinställning |
|---|---|---|---|---|
redirect-uri |
URI | Yes | Återanrops-URI där Snipping Tool skickar funktionssvaret. Din app måste registrera en protokollhanterare för det här URI-schemat. Om det utelämnas returnerar Skärmklippsverktyget inte något svar. | Inte tillämpligt |
user-agent |
snöre | Nej (rekommenderas starkt) | Identifierare för det anropande programmet som används för loggning och analys. | Inte tillämpligt |
x-request-correlation-id |
snöre | Nej | Unik identifierare för begäran. | Automatiskt genererat GUID |
Upptäck exempel
ms-screenclip://discover?user-agent=MyApp&redirect-uri=my-app://response
Identifiera svarsformat
Svaret är ett JSON-objekt som läggs till i omdirigerings-URI:n som frågeparameter discover. Den innehåller:
-
version: Den senaste protokollversionen som stöds av denna Snipping Tool-byggnad. -
defaultVersion: Protokollversion som antas när en begäran utelämnarapi-version. Läs det här för att förstå hur dina opinnade begäranden tolkas. -
supportedVersions: Matris med protokollversioner som den här Snipping Tool-versionen accepterar. -
capabilities: Matris med avbildningsåtgärder som stöds, var och en med:-
path: Avbildningsslutpunkten (t.ex.capture/image,capture/video). -
methods: HTTP-liknande metoder som stöds. -
parameters: Tillgängliga parametrar för slutpunkten. -
description: Beskrivning av funktionen.
-
{
"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."
}
]
}
AktiveradeLägen
Med enabledModes parametern kan du styra vilka avbildningslägen som är tillgängliga i användargränssnittet för skärmklippsverktyget. Använd den för att begränsa eller utöka användarens val för att matcha programmets krav.
Lägen som stöds
| Mode | Description |
|---|---|
RectangleSnip |
Rektangel avbildningsläge. |
WindowSnip |
Avbildningsläge för fönster. |
FreeformSnip |
Frihandsläge för avbildning |
FullscreenSnip |
Helskärmsläge för avbildning. |
SnippingAllModes |
Alla avbildningslägen: RectangleSnip, WindowSnip, FreeformSnip, FullscreenSnip. |
RectangleRecord |
Rektangulärt inspelningsläge. |
RecordAllModes |
Alla inspelningslägen: endast för närvarande RectangleRecord . |
All |
Alla lägen som stöds: union av SnippingAllModes och RecordAllModes. |
Tips/Råd
All, SnippingAllModes, och RecordAllModes är aggregerade värden. De lägen som de innehåller kan ändras i Snipping Tool-versioner. En app som använder något av dessa värden hämtar automatiskt lägen som läggs till i framtida versioner. Om du vill behålla samma uppsättning av tillgängliga lägen över flera uppdateringar listar du de specifika lägena (till exempel RectangleSnip,FreeformSnip).
Important
- För
/imagerectangleen lägesparameter (t.ex.freeform,window, ) i URI:n, även närenabledModesanges. Lägesparametern avgör det ursprungligen valda läget. - Det läge som anges i URI:n är alltid tillgängligt i användargränssnittet, även om det inte visas i
enabledModes. Gör till exempel?freeform&enabledModes=RectangleSnipbåde frihandsfigur (från URI) och rektangelfragment tillgängligt, med frihandsfiguren förvald. - Om
enabledModesutelämnas är endast det läge som anges i URI:n tillgängligt i användargränssnittet. - För
/image, om ingen lägesparameter har angetts, är begäran ogiltig och resulterar i ett fel, oavsettenabledModes.
EnabledModes-exempel
Aktivera endast rektangelfragment:
ms-screenclip://capture/image?rectangle&enabledModes=RectangleSnip&user-agent=MyApp&redirect-uri=my-app://response
Aktivera rektangel- och fönsterutklipp:
ms-screenclip://capture/image?rectangle&enabledModes=RectangleSnip,WindowSnip&user-agent=MyApp&redirect-uri=my-app://response
Aktivera alla skärmklippslägen:
ms-screenclip://capture/image?rectangle&enabledModes=SnippingAllModes&user-agent=MyApp&redirect-uri=my-app://response
Aktivera endast inspelningsläge:
ms-screenclip://capture/video?enabledModes=RecordAllModes&user-agent=MyApp&redirect-uri=my-app://response
Aktivera flera skärmklipps- och inspelningsalternativ:
ms-screenclip://capture/image?freeform&enabledModes=RectangleSnip,RectangleRecord&user-agent=MyApp&redirect-uri=my-app://response
Eftersom fri form har angetts i URI:n kommer den att vara förvald. Användare kan växla mellan frihandsklipp, rektangelklipp och rektangelinspelning.
Responses
När användaren har slutfört eller avbrutit en avbildning skickar Snipping Tool ett svar tillbaka till ditt program via redirect-uri. Svaret är strukturerat som URI-frågeparametrar som läggs till i din omdirigerings-URI.
Om dina redirect-uri redan innehåller frågeparametrar (till exempel my-app://response?sessionId=abc), bevaras dessa parametrar och svarsparametrarna läggs till med &. Du kan använda detta för att återanropsspecifikt tillstånd via återanropet – värdet sessionId=abc upprepas i svars-URI:n tillsammans med code, reason, x-request-correlation-idoch (för en lyckad avbildning) file-access-token.
Svarsparametrar
| Parameter | Type | Närvarande | Description |
|---|---|---|---|
code |
int | Always | STATUSkod i HTTP-format som anger resultatet. |
reason |
snöre | Always | Mänskligt läsbar beskrivning av resultatet. |
x-request-correlation-id |
snöre | Always | Korrelations-ID:t från den ursprungliga begäran (eller ett automatiskt genererat). |
file-access-token |
snöre | Enbart framgång | En SharedStorageAccessManager token som representerar det insamlade mediet. Använd detta för att hämta filen. |
discover |
snöre | Upptäck endast | URL-kodad JSON som innehåller funktionssvaret. |
Statuskoder
| Kod | Förnuft | Description |
|---|---|---|
| 200 | Success | Infångningen har slutförts framgångsrikt. A file-access-token ingår i svaret. |
| 400 | Felaktig begäran – Ogiltiga eller saknade parametrar | Det gick inte att bearbeta begäran. Kontrollera att alla obligatoriska parametrar finns och är giltiga. |
| 408 | Tidsgräns för begäran – åtgärden tog för lång tid | Tidsgränsen för åtgärden gick ut innan den slutfördes. |
| 499 | Kundbegäran stängd – användaren avbröt förfrågan | Användaren avbröt avbildningen genom att trycka på Escape eller klicka bort. Gäller endast för /image och /video . |
| 500 | Internt serverfel – bearbetningen misslyckades | Ett oväntat fel uppstod under insamlingen. |
Exempelsvar
Lyckad avbildning:
my-app://response?code=200&reason=Success&x-request-correlation-id=aaaa0000-bb11-2222-33cc-444444dddddd&file-access-token=cccc2222-dd33-4444-55ee-666666ffffff
Användaren avbröt:
my-app://response?code=499&reason=Client%20Closed%20Request%20-%20User%20Cancelled%20the%20Snip&x-request-correlation-id=bbbb1111-cc22-3333-44dd-555555eeeeee
Ogiltig begäran (saknad modeparameter):
my-app://response?code=400&reason=Bad%20Request%20-%20Invalid%20or%20Missing%20Parameters&x-request-correlation-id=bbbb1111-cc22-3333-44dd-555555eeeeee
Fullständiga URI-exempel
| Användningsfall | URI | Description |
|---|---|---|
| Skärmbild av rektangel | ms-screenclip://capture/image?rectangle&user-agent=MyApp&redirect-uri=my-app://response |
Interaktiv rektangelinsamling. Resultatet returnerades till anroparen. |
| Skärmbild av frihandsformulär | ms-screenclip://capture/image?freeform&user-agent=MyApp&redirect-uri=my-app://response |
Interaktiv frihandsfångst. Resultatet returnerades till anroparen. |
| Skärmbild av fönster | ms-screenclip://capture/image?window&user-agent=MyApp&redirect-uri=my-app://response |
Interaktiv fönsterinspelning. Resultatet returnerades till anroparen. |
| Skärminspelning | ms-screenclip://capture/video?user-agent=MyApp&redirect-uri=my-app://response |
Interaktiv skärminspelning. Resultatet returnerades till anroparen. |
| Identifiera funktioner | ms-screenclip://discover?user-agent=MyApp&redirect-uri=my-app://response |
Förfrågan om stödda funktioner. Kapaciteter JSON returnerades till anroparen. |
| Rektangel med automatisk sparande | ms-screenclip://capture/image?rectangle&auto-save&user-agent=MyApp&redirect-uri=my-app://response |
Rektangelfångst med automatiskt sparande aktiverat. |
| Rektangel med alla mod | ms-screenclip://capture/image?rectangle&enabledModes=All&user-agent=MyApp&redirect-uri=my-app://response |
Rektangelinsamling förvald, alla lägen som är tillgängliga i användargränssnittet. |
Starta från din app
Du måste använda Launcher.LaunchUriAsync för att starta Snipping Tool från din paketerade app. Andra startmetoder (till exempel Process.Start eller shell-körning) ger inte appens identitet, och Snipping Tool levererar inte svaret.
Steg 1: Registrera en protokollhanterare
Registrera ett anpassat protokoll i din Package.appxmanifest så att appen kan ta emot motringningssvaret. Protokollnamnet måste matcha schemat som används i din redirect-uri.
<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>
Mer information om hur du registrerar och hanterar protokollaktiveringar finns i Hantera URI-aktivering .
Steg 2: Starta Skärmklippverktyget
// 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);
Steg 3: Hantera svaret
När fångsten har slutförts (eller användaren avbryter), aktiverar Snipping Tool din app via din redirect-uri med resultatparametrar som läggs till i form av frågesträngar. De flesta integreringar körs redan när svaret kommer – anroparen startade Snipping Tool och väntade sedan på återanropet – så appen måste hantera både kallstartsaktivering (appen kördes inte) och varm återaktivering (appen körs redan). Prenumerera på båda banorna i App.xaml.cs.
Hantera ett avbildningssvar (bild eller 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}");
}
}
Hantera ett upptäckingssvar:
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
}
}
Tips/Råd
Om du har skickat en x-request-correlation-id med begäran, kontrollera att svaret återger samma värde så att du kan matcha svaret till rätt pågående begäran. Om du låter Snipping Tool generera ett automatiskt, bär svaret det genererade värdet – behandla det som att matcha din senaste begäran under flygning.
Hämtar insamlade medier med hjälp av token
Använd klassen SharedStorageAccessManager för att lösa in file-access-token och komma åt den insamlade filen.
Tokenbegränsningar:
- En token kan bara lösas in en gång. Efter inlösen är den inte längre giltig.
- En token upphör att gälla efter 14 dagar.
- En app får inte ha fler än 1 000 aktiva token. När en token har lösts in, tagits bort eller upphör att gälla räknas den inte längre mot kvoten.
// 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);
Säkerhetsfrågor
Snipping Tool verifierar alla redirect-uri värden innan du startar dem. Följande skydd tillämpas:
- Packeterade applikationsanrop: När din app är en paketerad Windows-app (MSIX), dirigerar operativsystemet säkert insamlingssvaret tillbaka till din app, så att endast din app kan ta emot det. Det här är den rekommenderade integreringsvägen.
- Indatavalidering: Klippverktyget avvisar omdirigerings-URI:er som innehåller UNC-sökvägar, inledande och avslutande blanksteg, eller kontrolltecken.
-
Inga fragment: Omdirigerings-URI:er som innehåller ett URL-fragment (till exempel
my-app://response#section) avvisas. Snipping Tool lägger till svarsparametrarna som en frågesträng, och ett fragment skulle svälja dem. - Självrefererande skydd: Omdirigerings-URI:er som skulle orsaka rekursiv aktivering av Snipping Tool blockeras.
Important
För att anropa program:
- Registrera en protokollhanterare för ditt omdirigerings-URI-schema så att din app kan ta emot svaret.
- Verifiera och sanera alla parametrar som tas emot i svaret innan du bearbetar dem.
- Kontrollera att svaret
x-request-correlation-idmatchar din begäran under flygning för att undvika att hantera ett inaktuellt svar eller blanda ihop samtidiga begäranden. Korrelations-ID förhindrar förväxlingar; den etablerar inte token proveniens – säker tokenroutning kommer från den paketerade appens återanropskanal.
Relaterat innehåll
Windows developer