en af motivationerne for at flytte min blog til markering var at stoppe med at stole på vinduer Live forfatter, som ikke længere understøttes og har et antal fejl. Men en ting, det var praktisk for, var at indsætte billeder i indlæg. Jeg kunne bare bruge værktøjet til klipning af vinduer og indsætte billedet direkte i et indlæg. I markering skal jeg gemme billedet i en fil og generere nogle markeringer for at henvise til den fil.
for små automatiserede opgaver som denne er mit Goto-værktøj det fantastiske værktøj. Jeg har hundredvis af scripts derinde for at gøre alle mulige nyttige ting.
generering af et filnavn
først og fremmest skal mit script finde ud af, hvor billedet skal gemmes på udklipsholderen til. Dette afhænger af, hvilken computer jeg kører på, da mit GitHub-lager klones til forskellige stier. Her er et hurtigt og beskidt trick til at vælge den rigtige mappe, uanset hvilken computer jeg er på:
var path = new { @"C:\Users\markh\code\web\markblog\wwwroot\posts18",@"C:\code\soundcode\MarkBlog\wwwroot\posts18" }.First(p => Directory.Exists(p));
Dernæst skal jeg generere et filnavn. Jeg bruger postens” slug ” som et præfiks plus et stigende nummer. Igen bruger jeg en hurtig smule link til at finde det første suffiks, der ikke er blevet brugt.
var prefix = "css-social-media-icon-list";var fileName = Enumerable.Range(1,100) .Select(n => Path.Combine(path,$"{prefix}-{n}.png")) .First(p => !File.Exists(p));
lagring af billeder fra udklipsholderen
nu ved vi, hvor vi vil gemme billedet til, vi kan bruge klassen System.Windows.Forms.Clipboard
til at få adgang til billedet og gemme det i en PNG-fil. Bliv ikke afskrækket af “vinduer formularer” i navnet – denne klasse er den nemmeste måde at få adgang til udklipsholderen og kan bruges fra en konsol eller en app, hvis du vil.
jeg opdaterer også indholdet af udklipsholderen med den markering, jeg vil indsætte i mit blogindlæg. Så nu er alt, hvad jeg skal gøre efter at have brugt Clip-værktøjet til at tage et skærmbillede, kørt dette script og derefter indsætte markeringen i min teksteditor.
if(Clipboard.ContainsImage()){ Clipboard.GetImage().Save(fileName, ImageFormat.Png); Clipboard.SetText($"!(/posts/2018/{Path.GetFileName(fileName)})");}
tager det videre?
så jeg har indsat et billede i mine markeringsindlæg næsten lige så let som det var med vinduer Live forfatter, men det næste skridt ville være at indarbejde en lignende proces i Visual Studio Code, som jeg bruger som min redaktør. Jeg tror, at dette kunne omdannes til en Visual Studio-kodeudvidelse, men jeg formoder, at det betyder en omskrivning i node.js og lære, hvordan VS kode udvidelser arbejde. Hvis jeg klarer det, vil jeg skrive om, hvordan jeg gjorde det.
men forhåbentlig er dette nyttigt for alle, der har brug for udklipsholderadgang i C#, og giver dig også nogle ideer til, hvordan scripts kan bruges til at automatisere manuelle opgaver.