<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=59&amp;t=6213&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-03-03T15:06:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=59&amp;t=6213&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-03-03T15:06:58+01:00</updated>
<published>2014-03-03T15:06:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72921#p72921</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72921#p72921"/>
<title type="html"><![CDATA[Re: Visual C#  -- zapis i odczyt rejestru systemu Windows]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72921#p72921"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />kurczę a ja wciąż się zbieram i zbieram za ten C# .... no ale jak się zabiorę to już będzie na forum kupa cegieł<br /></div><br /><br />Może wystarczy na budowę garażu małego ?? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><div class="quotetitle">mira_aT napisał(a):</div><div class="quotecontent"><br />Dziękuję  Mam tylko nadzieję że kolega będzie dalej pisał<br /></div><br /><br />Niema sprawy jak coś jest warte opisania to się staram opisać, cieszy mnie to ,że komuś się te o &quot;kant&quot; <br />tematy przydadzą <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 3 mar 2014, o 15:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mira_aT]]></name></author>
<updated>2014-03-03T14:42:19+01:00</updated>
<published>2014-03-03T14:42:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72918#p72918</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72918#p72918"/>
<title type="html"><![CDATA[Re: Visual C#  -- zapis i odczyt rejestru systemu Windows]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72918#p72918"><![CDATA[
A to złośliwiec jeden z kolegi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Faktycznie trzeba się trochę zastanowić i pijawkom łatwo nie będzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Jak zawsze na temat  fajny arcik . Dziękuję <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Mam tylko nadzieję że kolega będzie dalej pisał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3142">mira_aT</a> — 3 mar 2014, o 14:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2014-03-02T23:03:24+01:00</updated>
<published>2014-03-02T23:03:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72889#p72889</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72889#p72889"/>
<title type="html"><![CDATA[Re: Visual C#  -- zapis i odczyt rejestru systemu Windows]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72889#p72889"><![CDATA[
Kolejna cegiełka <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ... kurczę a ja wciąż się zbieram i zbieram za ten C# .... no ale jak się zabiorę to już będzie na forum kupa cegieł <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> Dzięki za materiał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 2 mar 2014, o 23:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-03-02T16:33:14+01:00</updated>
<published>2014-03-02T16:33:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72815#p72815</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72815#p72815"/>
<title type="html"><![CDATA[Visual C#  -- zapis i odczyt rejestru systemu Windows]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6213&amp;p=72815#p72815"><![CDATA[
Dziś pobawimy się trochę rejestrem w sumie nie będzie to nic wielkiego <br />i ograniczymy się tylko do odczytu i zapisu  nieszkodliwych kluczy <br />tak by wszelcy C&amp;P nie popsuli sobie systemu. Niniejszym jednak za złe wykorzystanie<br />kodów i niewłaściwe operacje na REJESTRZE ----&gt;&gt; NIE ODPOWIADAM <br /><br />-----------------------------------------------------------------------------------<br />Ci co chcą czytać mogą przejść dalej  inni niech sobie odpuszczą !!<br />-----------------------------------------------------------------------------------<br /><br /><br />1.0  Zapisywanie wartości do rejestru<br /><br />Nasz przykład nie będzie specjalnie wysokich lotów ale pokarze jak zapisywać wartości <br />do kluczy na przykładzie klucza odpowiedzialnego za pokazywanie icon na pulpicie.<br /><br />W celu zapisu wartości do określonego klucza użyjemy funkcji  SetRegistryValue , która<br />znajduje się w klasie RegistryTools - służy ona do wprowadzania wartości do kluczy <br />Rejestru , a wygląda tak:<br /><br />[syntax=csharp]public static void SetRegistryValue(RegistryKey hive, string subkey_name, string value_name, object value)<br />{<br />    RegistryKey podklucz = hive.OpenSubKey (subkey_name, true);<br />    subkey.SetValue (value_name, value);<br />    subkey.Close ();<br />}[/syntax]<br /><br />Funkcja jest prosta ale trzeba sie z nią obchodzić delikatnie i rozumieć dlatego co nieco ją omówię:)<br /><br />Dosyć istotny jest parametr hive jest wskaźnikiem do cześci rejestru w której będzie przeprowadzone <br />wyszukiwanie w tym miejscu możemy zastosować metody :  <br /><br />Registry.ClassesRoot, <br />Registry.CurrentConfig, <br />Registry.CurrentUser,<br />Registry.DynData, <br />Registry.LocalMachine <br />lub <br />Registry.PerformanceData<br /><br />Wybrana metoda tworzy podklucz roboczy z podklucza wewnątrz hive. Takie niby zabezpieczenie <br />wykonywanych operacji, natomiast parametr OpenSubKey wskazuje, że metoda jest konieczna do <br />wykonania zapisy w kluczu rejestru.<br /><br />W następnej kolejności metoda użyje na podkluczu SetValue aby ustawić nową wartość i dokona zamknięcia klucza.<br /><br />Prawda ze proste ??  Nie ??   No to trzymajcie się z daleka od rejestru <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Teraz trochę praktyki. Jak utworzyć formę z przyciskiem nie będę pisał ponownie <br />więc ci co nie wiedzą jak  niech poszukają na forum <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  Natomiast poniżej zobaczcie <br />praktyczne wykorzystanie metody do trywialnego zajęcia czyli odświeżenia ikon:P<br /><br />[syntax=csharp]private void PrzyciskOdswiez_Click(object sender, EventArgs e)<br />{<br />    Cursor = Cursors.WaitCursor;<br />    PrzyciskOdswiez.Enabled = false;<br />    Refresh();<br /><br />    // Pobieramy aktualny rozmiar icon<br />    object icon_size_string = RegistryTools.GetRegistryValue(<br />        Registry.CurrentUser,<br />        @&quot;Control Panel\Desktop\WindowMetrics&quot;,<br />        &quot;Shell Icon Size&quot;, 32);<br />    int icon_size = int.Parse(icon_size_string.ToString());<br /><br />    // Dodajemy 1 (+1) i ustawiamy nowy rozmiar<br />    icon_size++;<br />    RegistryTools.SetRegistryValue(<br />        Registry.CurrentUser,<br />        @&quot;Control Panel\Desktop\WindowMetrics&quot;,<br />        &quot;Shell Icon Size&quot;, icon_size);<br /><br />    // Wysyłamy  HWND_BROADCAST aby odświeżyć icony.<br />    IntPtr result;<br />    SendMessageTimeout(<br />        HWND_BROADCAST, WM_SETTINGCHANGE,<br />        SPI_SETNONCLIENTMETRICS, 0,<br />        SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,<br />        10000, out result);<br /><br />    // odejmujemy 1 (-1) by przywrócić oryginalną wielkość.<br />    icon_size--;<br />    RegistryTools.SetRegistryValue(<br />        Registry.CurrentUser,<br />        @&quot;Control Panel\Desktop\WindowMetrics&quot;,<br />        &quot;Shell Icon Size&quot;, icon_size);<br /><br />    // Send HWND_BROADCAST to refresh the icons again.<br />    SendMessageTimeout(<br />        HWND_BROADCAST, WM_SETTINGCHANGE,<br />        SPI_SETNONCLIENTMETRICS, 0,<br />        SendMessageTimeoutFlags.SMTO_ABORTIFHUNG,<br />        10000, out result);<br /><br />    Cursor = Cursors.Default;<br />    PrzyciskOdswiez.Enabled = true;<br />}[/syntax]<br /><br />Kod jak widać jest banalnie prosty i nie robi nic szczególnego czyli:<br />Pobiera aktualny rozmiar icon pulpitu z rejestru , następnie modyfikuje wartość klucza<br />dodając 1 do rozmiaru i zapisuje ją (widać powiększenie ikon) dzięki użyciu funkcji SendMessageTimeout  API , która jest dostarczana do wszystkich okien wyższego poziomu.  <br />Gdy wszystko zostanie dostosowane do nowej wartości następuje odwołanie czyli przywrócenie<br />rozmiaru ikon i ponowne poinformowanie Okien.<br /><br />Banalne można tej metody używać do modyfikacji dowolnych kluczy rejestru ale róbcie to z głową.<br />Jak coś w ferworze walki sobie popsujecie to znajdzie się kilku co chętnie wam naprawią <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />-----------------------------------------------------------------------------------------------<br /><br />2.0  Odczyt wartości z klucza w rejestrze <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Odczyt wartości jest bardzo podobny do powyższego zapisu dzięki metodom zdefiniowanym <br />w klasie RegistryTools, która jak wspomniałem zawiera statyczne metody służące do interakcji <br />Rejestrem. Podobnie jak wyżej i tu zapoznamy się z metodą tym razem GetRegistryValue, której <br />kod widzimy poniżej:<br /><br />[syntax=csharp]public static object GetRegistryValue(RegistryKey hive,<br />    string subkey_name, string value_name, object default_value)<br />{<br />    RegistryKey subkey = hive.OpenSubKey(subkey_name, false);<br />    object result = subkey.GetValue(value_name, default_value);<br />    subkey.Close();<br />    return result;<br />}[/syntax] <br /><br />wiele zmian tu niema w porównaniu z powyższym. Hive robi dokładnie to samo <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> operując <br />na tych samych metodach:<br /><br />Registry.ClassesRoot, <br />Registry.CurrentConfig, <br />Registry.CurrentUser, <br />Registry.DynData, <br />Registry.LocalMachine <br />Registry.PerformanceData<br /><br />Tak samo tworzony jest podklucz, ale metoda OpenSubKey tym razem wskazuje że metoda nie <br />wymaga zapisu do podklucza. Następnie wykorzystana jest metoda GetValue pozwalająca pobrac interesująca nas wartość z podklucza i warośc ta jest zwracana w wyniku, ale ....<br /><br />ale  ważne jest to i powinniście zwrócić uwagę na to że metoda GetValue zwraca wartość &quot;obiektu&quot;<br />Jest to istotne gdyż różne ustawienia rejestru mają różne typy danych przez co kod wywołujący<br />jest odpowiedzialny za konwersję &quot;obiektu&quot; do właściwego typu danych.<br /><br />Tymczasem zróbcie sobie nową aplikacje okienkową opartą o formularze CLR  gdzie umieścić <br />możecie jeden przycisk np. o nazwie Powierz Rozmiar  i  mały textbox gdzie będzie pobrana wartość<br />prezentowana <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />   <br /><br />No chyba tyle umiecie sami zrobic prawda ??   no to dobrze  a teraz suchy kod :<br /><br />[syntax=csharp]// Pobieranie rozmiaru ikon z rejestru<br />private void pobierzRozmiar_Click(object sender, EventArgs e)<br />{<br />    object size_string = RegistryTools.GetRegistryValue(<br />        Registry.CurrentUser,<br />        @&quot;Control Panel\Desktop\WindowMetrics&quot;,<br />        &quot;Shell Icon Size&quot;, -1);<br />    rozmiarIcon.Text = size_string.ToString();<br />}[/syntax] <br /><br />To wszystko .... ?? nie nie jeszcze pokrótce omówimy działanie podle skomplikowanego powyższego<br />kodu który to wykorzystuje metodę GetRegistryValude do uzyskania dostępu do wartości przechowywanej w gałęzi:<br /><br />HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics\Shell Icon Size<br /><br />oraz  metodę ToString do konwersji &quot;obiektu&quot; na łańcuch i wyświetlenie go w naszym textboxie:)<br /><br />Miłej Zabawy z rejestrem ..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 2 mar 2014, o 16:33</p><hr />
]]></content>
</entry>
</feed>