{"id":758,"date":"2015-01-14T18:57:53","date_gmt":"2015-01-14T18:57:53","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=758"},"modified":"2015-01-14T18:57:53","modified_gmt":"2015-01-14T18:57:53","slug":"personalizacja-systemu-windows-level-piatkosia","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2015\/01\/14\/personalizacja-systemu-windows-level-piatkosia\/","title":{"rendered":"Personalizacja systemu windows &#8211; level piatkosia"},"content":{"rendered":"<p style=\"text-align: justify;\">Przypomnia\u0142o mi si\u0119 co\u015b z mojego okresu dojrzewania &#8211; \u017ce zawsze by\u0142am skuteczna tylko, gdy si\u0119 powa\u017cnie wkurzy\u0142am.<br \/>\nDopiero totalne wyprowadzenie mnie z r\u00f3wnowagi dawa\u0142o mi kopa do dzia\u0142ania. Nie b\u0119d\u0119 si\u0119 rozwodzi\u0107 na tym, co, albo raczej raczej kto mnie wkurzy\u0142 tym razem;). Tak czy inaczej, rozmawiaj\u0105c z ukochanym wyrzuci\u0142am mu, \u017ce r\u00f3wnie jak moja wsp\u00f3\u0142lokatorka, wkurza mnie jak mi si\u0119 rozpakuje paczka tworz\u0105c folder a w nim content, zamiast si\u0119 rozpakowa\u0107 w roboczym. M\u00f3wi\u0105, &#8222;nie ma co p\u0142aka\u0107 nad rozlanym mlekiem, ile to przenie\u015b\u0107&#8221;. No ale mam tego in\u017cyniera i wypada\u0142oby rozwi\u0105za\u0107 problem programowo, id\u0105c za zasad\u0105 &#8222;je\u015bli co\u015b robisz raz, zr\u00f3b to r\u0119cznie, je\u015bli znowu ci si\u0119 to zdarza, zastan\u00f3w si\u0119 czy aby nie warto tego oskryptowa\u0107 i zr\u00f3b to&#8221;. Jako \u017ce ostatnio mam faz\u0119 na wind\u0119 7 (tzn cz\u0119\u015bciej j\u0105 uruchamiam i robi mi za g\u0142\u00f3wny OS), postanowi\u0142am sobie dopisa\u0107 ma\u0142ego liba (serverek comowski), kt\u00f3ry mi spraw\u0119 za\u0142atwi jednym klikni\u0119ciem PPM.<!--more--><\/p>\n<p style=\"text-align: justify;\">No to &#8222;dawaj naliwaj&#8221;, modem, connect, przegl\u0105darka, jaki\u015b google, szukam, nie da si\u0119 z .net, trza winapi, omg ale to brzydkie brr&#8230; oooo jest rozwi\u0105zanie. Ano jeden z codeplex (aka szybciej wstanie ni\u017c si\u0119 po\u0142o\u017cy\u0142) user\u00f3w postanowi\u0142 poratowa\u0107 wszystkich toolowindoklepaczy i zrobi\u0142 sharpshella. Projekt jest w nugecie, wi\u0119c odpalam package manager console, wklepuj\u0119 jak cz\u0142owiek Install-Package SharpShell, tworz\u0119 klas\u0119 kt\u00f3ra dziedziczy po czym trzeba i mam co chcia\u0142am:)<br \/>\nCa\u0142o\u015b\u0107 wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<pre class=\"brush: csharp; collapse: true\">using System.Runtime.InteropServices;\r\nusing System.Windows.Forms;\r\nusing SharpShell.Attributes;\r\nusing SharpShell.SharpContextMenu;\r\nusing System.IO;\r\n\r\nnamespace MyExt\r\n{\r\n   [ComVisible(true)]\r\n  [COMServerAssociation(AssociationType.Directory)]\r\n    public class Extractor : SharpContextMenu\r\n    {\r\n        protected override bool CanShowMenu()\r\n        {\r\n            return true;\r\n        }\r\n\r\n        protected override System.Windows.Forms.ContextMenuStrip CreateMenu()\r\n        {\r\n            var menu = new ContextMenuStrip();\r\n            var mymenuitem = new ToolStripMenuItem {Text = \"Extract\"};\r\n            mymenuitem.Click +=mymenuitem_Click;\r\n            menu.Items.Add(mymenuitem);\r\n            return menu;\r\n        }\r\n\r\n        public static bool IsDirectoryEmpty(DirectoryInfo directory)\r\n        {\r\n            FileInfo[] files = directory.GetFiles();\r\n            DirectoryInfo[] subdirs = directory.GetDirectories();\r\n\r\n            return (files.Length == 0 &amp;&amp; subdirs.Length == 0);\r\n        }\r\n        public static bool IsDirectoryEmpty(string path)\r\n        {\r\n            return IsDirectoryEmpty(new DirectoryInfo(path));\r\n        }\r\n        private void mymenuitem_Click(object sender, System.EventArgs e)\r\n        {\r\n            foreach (var VARIABLE in SelectedItemPaths)\r\n            {\r\n                FileAttributes attr = File.GetAttributes(VARIABLE);\r\n                if ((attr &amp; FileAttributes.Directory) == FileAttributes.Directory)\r\n                {\r\n                    var tmppath = Path.GetDirectoryName(VARIABLE);\r\n                    var files = Directory.GetFiles(VARIABLE);\r\n                    foreach (var file in files)\r\n                    {\r\n                        File.Move(file, tmppath + \"\\\\\" + Path.GetFileName(file));\r\n                        if (IsDirectoryEmpty(VARIABLE))\r\n                        {\r\n                            Directory.Delete(VARIABLE);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p style=\"text-align: justify;\">i co tu si\u0119 po kolei dzieje.<br \/>\nFunkcj\u0119 kt\u00f3ra pyta o pojawieniu si\u0119 menu zby\u0142am &#8222;return true;&#8221;, bo tak mi by\u0142o wygodnie. Odsiewam ziarno od plew dalej.<br \/>\nFunkcja tworz\u0105ca menu to tylko sprawa dodania elementu i zwrot zawarto\u015bci- bardziej mnie interesi zawarto\u015b\u0107, czyli funkcja obs\u0142uguj\u0105ca klikni\u0119ce. Dzia\u0142a ona tak, \u017ce bierze pliki z folderu, wrzuca je do folderu w kt\u00f3rym znajduje si\u0119 folder w kt\u00f3rym pliki by\u0142y i wyrzuca go je\u015bli jest pusty. Dobra, namota\u0142am, mo\u017ce \u0142atwiej b\u0119dzie obrazkiem<br \/>\nby\u0142o<br \/>\nd:\\dupa\\dupa2\\aa.txt<br \/>\nd:\\dupa\\dupa2\\z1.txt<br \/>\nd:\\dupa\\dupa2\\na.txt<br \/>\nto teraz jest<br \/>\nd:\\dupa\\aa.txt<br \/>\nd:\\dupa\\z1.txt<br \/>\nd:\\dupa\\na.txt<br \/>\na sam katalog dupa 2 pozbywa si\u0119 plik\u00f3w aa.txt, z1.txt, na.txt. Je\u017celi kt\u00f3ry\u015b z plik\u00f3w o takiej nazwie ju\u017c by\u0142, to zostaje na swoim miejscu (przeniesienie si\u0119 nie uda\u0142o &#8211; normalna funkcja move). Je\u015bli si\u0119 oka\u017ce, \u017ce wszystkie pliki zosta\u0142y przeniesione a folder pozosta\u0142 pusty (co jest sprawdzane funkcj\u0105 IsDirectoryEmpty), to go wywala (aka na co nam \u015bmieci). Jak komu\u015b to nie pasi, niech sobie przed kompilacj\u0105 tego ifka z deletem w \u015brodku wywali.<br \/>\nKompilujemy projekt (kt\u00f3ry by\u0142 wybrany jako lib formsowy &#8211; nie aplikacja okienkowa &#8211; sam si\u0119 z siebie nie uruchomi \ud83d\ude42 ) i wrzucamy go. Hmm, tylko jak? srm install plik.dll -codebase, potem modyfikacja rejestru&#8230; no ej, lask\u0105 jestem. Mo\u017cna prosi\u0107 co\u015b ludzkiego? I dosta\u0142am &#8211; \u0142adnego toola pod nazw\u0105 Server Manager. Wybieram moj\u0105 jeszcze ciep\u0142\u0105 dllk\u0119, testuje &#8211; dzia\u0142a jak chcia\u0142am. No to rejestruj\u0119, instaluj\u0119 (dos\u0142ownie 1 button na operacj\u0119) i mam. I u\u017cywam. I ciesz\u0119 si\u0119. I&#8230; kurka, musz\u0119 znale\u017a\u0107 zamiennik na linuxa. Albo sobie napisa\u0107:)<br \/>\nJeszcze rzuc\u0119 binarkami:<br \/>\nMoja gotowizna dost\u0119pna jest na <a title=\"folder extractor\" href=\"https:\/\/extract.codeplex.com\" target=\"_blank\"> tej stronce<\/a>, za\u015b sam sharpshell jest dost\u0119pny na <a title=\"sharpshell\" href=\"https:\/\/sharpshell.codeplex.com\/\" target=\"_blank\">tej.<\/a><\/p>\n<p> Obie zabawki s\u0105 na wolnych licencjach.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Przypomnia\u0142o mi si\u0119 co\u015b z mojego okresu dojrzewania &#8211; \u017ce zawsze by\u0142am skuteczna tylko, gdy si\u0119 powa\u017cnie wkurzy\u0142am. Dopiero totalne wyprowadzenie mnie z r\u00f3wnowagi dawa\u0142o<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2015\/01\/14\/personalizacja-systemu-windows-level-piatkosia\/\">Lecim dalej<span class=\"screen-reader-text\">Personalizacja systemu windows &#8211; level piatkosia<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83,180,54,144,42],"tags":[181,142,182,210,221],"class_list":["post-758","post","type-post","status-publish","format-standard","hentry","category-c_sharp","category-libs","category-ms","category-windows","category-wolny-soft","tag-comserver","tag-csharp","tag-extractor","tag-programowanie","tag-windows","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/758","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=758"}],"version-history":[{"count":1,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/758\/revisions"}],"predecessor-version":[{"id":759,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/758\/revisions\/759"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}