Archiv rubriky: Informační technologie

Hrátky s barvami a pohybem objektů

Pro svoji potřebu jsem vytvořil skript v powershellu, který zobrazí okno a v něm barvy podle definovaných jmen. Je zde možnost si barvy ručně přesouvat pro lepší provnání barev mezi sebou. Ve skriptu je použito několik neběžných postupů. Snad to někomu pomůže. Skript lze stáhnout zde

Barvy1

void][System.Reflection.Assembly]::LoadWithPartialName(„System.Windows.Forms“)
[void][System.Reflection.Assembly]::LoadWithPartialName(„System.Drawing“)

# při nastavení proměnné $Debug na $true se budou vypisovat ladící informace
#$Debug=$true;
$Debug=$false;

$JmVyst = „C:\PSS\pokus.txt“; # nastavení jména a umístění logovacího souboru

# vytvoříme prázdný logovací soubor $JmVyst -použijeme jen v Debug režimu
if ($Debug) { echo “ > $JmVyst;}

#$TextHnedy1 = [System.Drawing.Color]::FromArgb(0xFF00744C)
$i=10
$PocetRadkuBarev=29;
$velikostPopisu = New-Object System.Drawing.Size(240, 18)

# velikost barevneho prouzku
#
$PodkladHnedy1 = [System.Drawing.Color]::FromArgb(0x7FF0D090)
$PodkladHnedy2 = [System.Drawing.Color]::FromArgb(0x70E0D0A0)

$script:Stisknuto = $false
$script:RelativneL = New-Object System.Drawing.Point(0, 0)

$mujFont = New-Object System.Drawing.Font(„Courier New“, 10, 0, 3, 0)

# pokud Stiskneme tlacitko nad barevným páskem – Label – zjistime souradnice mysi relativne uvnitr Label
function lblMouseDown($OBJ)
{
# nejprve absolutní hodnota na screenu
$curzor = [System.Windows.Forms.Cursor]::Position
# relativne k pasku
$script:RelativneL = $OBJ.PointToClient($curzor)
# $Labelx.Text = [string]$cursor.x
# $Labely.Text = [string]$cursor.y
# [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point(0, 0)
$script:Stisknuto = $true # nastavime stav stisknuto
# – neumim to zjistit jinak

$OBJ.BringToFront() # dáme si náš pásek do popředí
}

function lblMouseUp { $script:Stisknuto = $false } # až uvolnime tlačítko – změníme status

# Pohyb myši
function lblMouseMove($OBJ)
{
# aktualní pozice
$curzor = [System.Windows.Forms.Cursor]::Position
# relativni pozice vzhledem k oknu formulaře – odečtený posun v rámci proužku
$RelativneF = $frmColor.PointToClient($curzor)-$script:RelativneL

if ($script:Stisknuto)
{
$OBJ.Location = $RelativneF # změníme pozici poroužku v okně
#- proužek se zobrazí na novém místě – hýbe se
}
}

# Ovládací rutina na srovnání ručně posunutých barevných proužků
function btnSrovnat_OnClick
{
$vx=[int]$VelikostPopisu.width

# nejprve si projedeme pole $lblColor a vypočítáme pořadí podle aktualních souřadnic jednotlivých proužků
for($i=0; $i -lt $lblColor.Count; $i++) {
$a=$lblColor[$i]
$x=($a.Location.x+$Vx+10)/$Vx ; $x=[math]::round($x) ;
$y = $a.Location.y
$poradi = $x*1000 + $y
# Vypočítané nové pořadí uloříme do pole xColor
$xColor[$i][3] = $poradi
# pro další účely si zapíšeme do logovacího souboru $JmVyst
if ($Debug) {
$mytmp=[string]$x +‚ | ‚+[string]$y +‚ | ‚+$xColor[$i][0] +‘ | ‚+$xColor[$i][1]+ ‚ | ‚ +[string]$xColor[$i][2]+ ‚ | ‚ + [string]$xColor[$i][3]
echo $mytmp >> $JmVyst
# $lblINFO.Text = $mytmp
} # If Debug
} # konec FOR lblColor

# Podle nového pořadí setřídíme pole xColor
$xColor = $xColor | Sort-Object @{ Expression = { $_[3] } ; Ascending = $true }

# —- provedeme nové přepsání podle setříděného pole xColor
$x = 10 ; $y = 10 ; # x,y souřadnice proužků
for($i=0;$i -lt $xColor.Count;$i++){
$a=$xColor[$i]
if ($Debug) {
# Zde si přepíšeme do logovacího souboru jednotlivé řádky, které lze použít pro ruční přepsání inicializace xColor v tomto skriptu
$radek = ‚$xColor += ‚ + „“;“ + ‚ $xColor[-1] = @(„‚ + $xColor[$i][0] + ‚“, „‚ + $xColor[$i][1] + ‚“,‘  + [string]$i + ‚,‘+[string]$xColor[$i][3]+‚);‘
echo $radek >> $JmVyst
}
#
# nastavíme proužku nové – normalizované – souřadnice
$lblColor[$a[2]].Location = New-Object System.Drawing.Point($x, $y)

if ($Debug) {
$Trideni=[string]$xColor[$i][3]
$lblColor[$a[2]].Text = $i.ToString().PadLeft(3) +‚ ‚+ $Trideni.Padleft(6)+‚ | ‚+ $a[1].Substring(4,6)+‚ ‚+$a[0]
}

$y += $velikostPopisu.Height; # posuneme na další řádek
if ((($i+1)%$PocetRadkuBarev) -eq 0) {$x += $velikostPopisu.Width ; $y = 10;} # po dosažení $PocetRadkuBarev pujdeme na další sloupec
}

#$frmColor.close();
# [System.Windows.Forms.Application]::Exit($null);

}

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$frmColor = New-Object System.Windows.Forms.Form
$frmColor.ClientSize = New-Object System.Drawing.Size(1224, 600)
$frmColor.font = $mujFont ; # Nastavíme pro okno $frmColor svůj font
$frmColor.Text = „Barvy“;

$xColor = @( );
# v této sekci naplníme pole xColor –
# [0] pojmenovanými barvami
# [1] popisem v
# [2] vazba na pole lblColor – naplněno později
# [3] vypočítané pořadí
# !!! pole se musí tak, že nejprve vytvoříme prázdnou buňku a do ní pak vložíme pole @, aby vzniklo dvojroměrné pole
# [-1] je poslední, právě přidaná, buňka pole
# $xColor += @(,.,…) provede vytvoření jednorozměrného pole – pěkná schiza
# tuto sekci můžeme přepsat odpovídajícím výstupem v logovacím souboru
#—————–
$xColor += “; $xColor[-1] = @(„Transparent“, „0x00FFFFFF“,0,1010);
$xColor += “; $xColor[-1] = @(„WhiteSmoke“, „0xFFF5F5F5“,1,1028);
$xColor += “; $xColor[-1] = @(„Gainsboro“, „0xFFDCDCDC“,2,1046);
$xColor += “; $xColor[-1] = @(„LightGray“, „0xFFD3D3D3“,3,1064);
$xColor += “; $xColor[-1] = @(„Silver“, „0xFFC0C0C0“,4,1082);
$xColor += “; $xColor[-1] = @(„DarkGray“, „0xFFA9A9A9“,5,1100);
$xColor += “; $xColor[-1] = @(„Gray“, „0xFF808080“,6,1118);
$xColor += “; $xColor[-1] = @(„DimGray“, „0xFF696969“,7,1136);
$xColor += “; $xColor[-1] = @(„Black“, „0xFF000000“,8,1154);
$xColor += “; $xColor[-1] = @(„DarkSlateGray“, „0xFF2F4F4F“,9,1172);
$xColor += “; $xColor[-1] = @(„SlateGray“, „0xFF708090“,10,1190);
$xColor += “; $xColor[-1] = @(„LightSlateGray“, „0xFF778899“,11,1208);
$xColor += “; $xColor[-1] = @(„DarkSlateBlue“, „0xFF483D8B“,12,1226);
$xColor += “; $xColor[-1] = @(„SlateBlue“, „0xFF6A5ACD“,13,1244);
$xColor += “; $xColor[-1] = @(„MediumSlateBlue“, „0xFF7B68EE“,14,1262);
$xColor += “; $xColor[-1] = @(„MediumPurple“, „0xFF9370DB“,15,1280);
$xColor += “; $xColor[-1] = @(„Magenta“, „0xFFFF00FF“,16,1298);
$xColor += “; $xColor[-1] = @(„Fuchsia“, „0xFFFF00FF“,17,1316);
$xColor += “; $xColor[-1] = @(„MediumVioletRed“, „0xFFC71585“,18,1334);
$xColor += “; $xColor[-1] = @(„DeepPink“, „0xFFFF1493“,19,1352);
$xColor += “; $xColor[-1] = @(„HotPink“, „0xFFFF69B4“,20,1370);
$xColor += “; $xColor[-1] = @(„Pink“, „0xFFFFC0CB“,21,1388);
$xColor += “; $xColor[-1] = @(„LightPink“, „0xFFFFB6C1“,22,1406);
$xColor += “; $xColor[-1] = @(„Thistle“, „0xFFD8BFD8“,23,1424);
$xColor += “; $xColor[-1] = @(„Plum“, „0xFFDDA0DD“,24,1442);
$xColor += “; $xColor[-1] = @(„Violet“, „0xFFEE82EE“,25,1460);
$xColor += “; $xColor[-1] = @(„Orchid“, „0xFFDA70D6“,26,1478);
$xColor += “; $xColor[-1] = @(„MediumOrchid“, „0xFFBA55D3“,27,1496);
$xColor += “; $xColor[-1] = @(„DarkOrchid“, „0xFF9932CC“,28,1514);
$xColor += “; $xColor[-1] = @(„BlueViolet“, „0xFF8A2BE2“,29,2010);
$xColor += “; $xColor[-1] = @(„DarkViolet“, „0xFF9400D3“,30,2028);
$xColor += “; $xColor[-1] = @(„DarkMagenta“, „0xFF8B008B“,31,2046);
$xColor += “; $xColor[-1] = @(„Purple“, „0xFF800080“,32,2064);
$xColor += “; $xColor[-1] = @(„Indigo“, „0xFF4B0082“,33,2082);
$xColor += “; $xColor[-1] = @(„MidnightBlue“, „0xFF191970“,34,2100);
$xColor += “; $xColor[-1] = @(„DarkBlue“, „0xFF00008B“,35,2118);
$xColor += “; $xColor[-1] = @(„Navy“, „0xFF000080“,36,2136);
$xColor += “; $xColor[-1] = @(„MediumBlue“, „0xFF0000CD“,37,2154);
$xColor += “; $xColor[-1] = @(„Blue“, „0xFF0000FF“,38,2172);
$xColor += “; $xColor[-1] = @(„RoyalBlue“, „0xFF4169E1“,39,2190);
$xColor += “; $xColor[-1] = @(„SteelBlue“, „0xFF4682B4“,40,2208);
$xColor += “; $xColor[-1] = @(„CornflowerBlue“, „0xFF6495ED“,41,2226);
$xColor += “; $xColor[-1] = @(„DodgerBlue“, „0xFF1E90FF“,42,2244);
$xColor += “; $xColor[-1] = @(„DeepSkyBlue“, „0xFF00BFFF“,43,2262);
$xColor += “; $xColor[-1] = @(„DarkTurquoise“, „0xFF00CED1“,44,2280);
$xColor += “; $xColor[-1] = @(„MediumTurquoise“, „0xFF48D1CC“,45,2298);
$xColor += “; $xColor[-1] = @(„Turquoise“, „0xFF40E0D0“,46,2316);
$xColor += “; $xColor[-1] = @(„Cyan“, „0xFF00FFFF“,47,2334);
$xColor += “; $xColor[-1] = @(„Aqua“, „0xFF00FFFF“,48,2352);
$xColor += “; $xColor[-1] = @(„Aquamarine“, „0xFF7FFFD4“,49,2365);
$xColor += “; $xColor[-1] = @(„SkyBlue“, „0xFF87CEEB“,50,2370);
$xColor += “; $xColor[-1] = @(„LightSkyBlue“, „0xFF87CEFA“,51,2388);
$xColor += “; $xColor[-1] = @(„LightSteelBlue“, „0xFFB0C4DE“,52,2406);
$xColor += “; $xColor[-1] = @(„LightBlue“, „0xFFADD8E6“,53,2424);
$xColor += “; $xColor[-1] = @(„PowderBlue“, „0xFFB0E0E6“,54,2442);
$xColor += “; $xColor[-1] = @(„PaleTurquoise“, „0xFFAFEEEE“,55,2460);
$xColor += “; $xColor[-1] = @(„Lavender“, „0xFFE6E6FA“,56,2478);
$xColor += “; $xColor[-1] = @(„LightCyan“, „0xFFE0FFFF“,57,2496);
$xColor += “; $xColor[-1] = @(„Azure“, „0xFFF0FFFF“,58,2514);
$xColor += “; $xColor[-1] = @(„AliceBlue“, „0xFFF0F8FF“,59,3010);
$xColor += “; $xColor[-1] = @(„LightSeaGreen“, „0xFF20B2AA“,60,3028);
$xColor += “; $xColor[-1] = @(„CadetBlue“, „0xFF5F9EA0“,61,3046);
$xColor += “; $xColor[-1] = @(„DarkCyan“, „0xFF008B8B“,62,3064);
$xColor += “; $xColor[-1] = @(„Teal“, „0xFF008080“,63,3082);
$xColor += “; $xColor[-1] = @(„MediumAquamarine“, „0xFF66CDAA“,64,3100);
$xColor += “; $xColor[-1] = @(„MediumSpringGreen“, „0xFF00FA9A“,65,3136);
$xColor += “; $xColor[-1] = @(„SpringGreen“, „0xFF00FF7F“,66,3154);
$xColor += “; $xColor[-1] = @(„DarkSeaGreen“, „0xFF8FBC8F“,67,3172);
$xColor += “; $xColor[-1] = @(„LightGreen“, „0xFF90EE90“,68,3190);
$xColor += “; $xColor[-1] = @(„PaleGreen“, „0xFF98FB98“,69,3208);
$xColor += “; $xColor[-1] = @(„MediumSeaGreen“, „0xFF3CB371“,70,3226);
$xColor += “; $xColor[-1] = @(„SeaGreen“, „0xFF2E8B57“,71,3244);
$xColor += “; $xColor[-1] = @(„DarkGreen“, „0xFF006400“,72,3262);
$xColor += “; $xColor[-1] = @(„Green“, „0xFF7f6042“,73,3280);
$xColor += “; $xColor[-1] = @(„ForestGreen“, „0xFF228B22“,74,3298);
$xColor += “; $xColor[-1] = @(„LimeGreen“, „0xFF32CD32“,75,3316);
$xColor += “; $xColor[-1] = @(„Lime“, „0xFF00FF00“,76,3334);
$xColor += “; $xColor[-1] = @(„LawnGreen“, „0xFF7CFC00“,77,3352);
$xColor += “; $xColor[-1] = @(„Chartreuse“, „0xFF7FFF00“,78,3370);
$xColor += “; $xColor[-1] = @(„YellowGreen“, „0xFF9ACD32“,79,3388);
$xColor += “; $xColor[-1] = @(„GreenYellow“, „0xFFADFF2F“,80,3406);
$xColor += “; $xColor[-1] = @(„DarkOliveGreen“, „0xFF556B2F“,81,3424);
$xColor += “; $xColor[-1] = @(„OliveDrab“, „0xFF6B8E23“,82,3442);
$xColor += “; $xColor[-1] = @(„Olive“, „0xFF808000“,83,3460);
$xColor += “; $xColor[-1] = @(„DarkKhaki“, „0xFFBDB76B“,84,3478);
$xColor += “; $xColor[-1] = @(„Khaki“, „0xFFF0E68C“,85,3496);
$xColor += “; $xColor[-1] = @(„PaleGoldenrod“, „0xFFEEE8AA“,86,3514);
$xColor += “; $xColor[-1] = @(„Yellow“, „0xFFFFFF00“,87,4010);
$xColor += “; $xColor[-1] = @(„Gold“, „0xFFFFD700“,88,4028);
$xColor += “; $xColor[-1] = @(„Goldenrod“, „0xFFDAA520“,89,4046);
$xColor += “; $xColor[-1] = @(„DarkGoldenrod“, „0xFFB8860B“,90,4064);
$xColor += “; $xColor[-1] = @(„SaddleBrown“, „0xFF8B4513“,91,4082);
$xColor += “; $xColor[-1] = @(„Sienna“, „0xFFA0522D“,92,4100);
$xColor += “; $xColor[-1] = @(„Tan“, „0xFFD2B48C“,93,4118);
$xColor += “; $xColor[-1] = @(„BurlyWood“, „0xFFDEB887“,94,4136);
$xColor += “; $xColor[-1] = @(„NavajoWhite“, „0xFFFFDEAD“,95,4154);
$xColor += “; $xColor[-1] = @(„Moccasin“, „0xFFFFE4B5“,96,4172);
$xColor += “; $xColor[-1] = @(„Wheat“, „0xFFF5DEB3“,97,4190);
$xColor += “; $xColor[-1] = @(„Bisque“, „0xFFFFE4C4“,98,4208);
$xColor += “; $xColor[-1] = @(„PeachPuff“, „0xFFFFDAB9“,99,4226);
$xColor += “; $xColor[-1] = @(„LemonChiffon“, „0xFFFFFACD“,100,4244);
$xColor += “; $xColor[-1] = @(„LightGoldenrodYellow“, „0xFFFAFAD2“,101,4262);
$xColor += “; $xColor[-1] = @(„BlanchedAlmond“, „0xFFFFEBCD“,102,4280);
$xColor += “; $xColor[-1] = @(„AntiqueWhite“, „0xFFFAEBD7“,103,4298);
$xColor += “; $xColor[-1] = @(„Cornsilk“, „0xFFFFF8DC“,104,4316);
$xColor += “; $xColor[-1] = @(„Beige“, „0xFFF5F5DC“,105,4334);
$xColor += “; $xColor[-1] = @(„PapayaWhip“, „0xFFFFEFD5“,106,4352);
$xColor += “; $xColor[-1] = @(„SeaShell“, „0xFFFFF5EE“,107,4370);
$xColor += “; $xColor[-1] = @(„FloralWhite“, „0xFFFFFAF0“,108,4388);
$xColor += “; $xColor[-1] = @(„OldLace“, „0xFFFDF5E6“,109,4406);
$xColor += “; $xColor[-1] = @(„Linen“, „0xFFFAF0E6“,110,4424);
$xColor += “; $xColor[-1] = @(„Snow“, „0xFFFFFAFA“,111,4442);
$xColor += “; $xColor[-1] = @(„LightYellow“, „0xFFFFFFE0“,112,4460);
$xColor += “; $xColor[-1] = @(„Ivory“, „0xFFFFFFF0“,113,4478);
$xColor += “; $xColor[-1] = @(„GhostWhite“, „0xFFF8F8FF“,114,4496);
$xColor += “; $xColor[-1] = @(„Honeydew“, „0xFFF0FFF0“,115,4514);
$xColor += “; $xColor[-1] = @(„MintCream“, „0xFFF5FFFA“,116,5010);
$xColor += “; $xColor[-1] = @(„White“, „0xFFFFFFFF“,117,5028);
$xColor += “; $xColor[-1] = @(„MistyRose“, „0xFFFFE4E1“,118,5046);
$xColor += “; $xColor[-1] = @(„LavenderBlush“, „0xFFFFF0F5“,119,5064);
$xColor += “; $xColor[-1] = @(„RosyBrown“, „0xFFBC8F8F“,120,5082);
$xColor += “; $xColor[-1] = @(„PaleVioletRed“, „0xFFDB7093“,121,5100);
$xColor += “; $xColor[-1] = @(„IndianRed“, „0xFFCD5C5C“,122,5118);
$xColor += “; $xColor[-1] = @(„Salmon“, „0xFFFA8072“,123,5136);
$xColor += “; $xColor[-1] = @(„LightSalmon“, „0xFFFFA07A“,124,5154);
$xColor += “; $xColor[-1] = @(„LightCoral“, „0xFFF08080“,125,5172);
$xColor += “; $xColor[-1] = @(„DarkSalmon“, „0xFFE9967A“,126,5190);
$xColor += “; $xColor[-1] = @(„Coral“, „0xFFFF7F50“,127,5208);
$xColor += “; $xColor[-1] = @(„Tomato“, „0xFFFF6347“,128,5226);
$xColor += “; $xColor[-1] = @(„DarkOrange“, „0xFFFF8C00“,129,5244);
$xColor += “; $xColor[-1] = @(„Orange“, „0xFFFFA500“,130,5262);
$xColor += “; $xColor[-1] = @(„SandyBrown“, „0xFFF4A460“,131,5280);
$xColor += “; $xColor[-1] = @(„Peru“, „0xFFCD853F“,132,5298);
$xColor += “; $xColor[-1] = @(„Chocolate“, „0xFFD2691E“,133,5316);
$xColor += “; $xColor[-1] = @(„OrangeRed“, „0xFFFF4500“,134,5334);
$xColor += “; $xColor[-1] = @(„Brown“, „0xFFA52A2A“,135,5352);
$xColor += “; $xColor[-1] = @(„Firebrick“, „0xFFB22222“,136,5370);
$xColor += “; $xColor[-1] = @(„Maroon“, „0xFF800000“,137,5388);
$xColor += “; $xColor[-1] = @(„DarkRed“, „0xFF8B0000“,138,5406);
$xColor += “; $xColor[-1] = @(„Red“, „0xFFFF0000“,139,5424);
$xColor += “; $xColor[-1] = @(„Crimson“, „0xFFDC143C“,140,5442);
#—————–

$x = 10 ; $y = 10 ;
# setřídíme pole xColor podle čtvrté buňky tj [3], začínáme nulou
$xColor = $xColor | Sort-Object @{ Expression = { $_[3] } ; Ascending = $true }

# pole lblColor bude uchovávat vlastní objekty label
$lblColor = @( );

#~ ~ < lblColor1 > ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
#foreach ($bColor in $xColor) # raději jsem volil cyklus FOR – vím přesně, který prvek pole zpracovávám
for ($i=0;$i -lt $xColor.Count; $i++)
{
$bColor=$xColor[$i]; # jeden prvek pole xColor, z kterého si budeme brát odpovídající parametry
$lblColor += “ ;
$lblColor[$i] = New-Object System.Windows.Forms.Label
$lblColor[$i].Location = New-Object System.Drawing.Point($x, $y)
$lblColor[$i].Size = $velikostPopisu
$lblColor[$i].TabIndex = $i;
# zobrazovaný text na proužku
if ($Debug) {
$Trideni=[string]$bcolor[3]
$lblColor[$i].Text = $i.Tostring().PadLeft(3) +‘ ‚+ $Trideni.Padleft(6)+‘ | ‚+ $bcolor[1].Substring(4,6)+‘ ‚+$bcolor[0]
} else {
$lblColor[$i].Text = $bcolor[1].Substring(4,6)+‘ ‚+$bcolor[0]
}

# zobrazovaná barva
$lblColor[$i].BackColor = [System.Drawing.Color]::FromName($bcolor[0])

# jednotlivé složky Barvy 0xA-R-G-B-)
$bA = [int](‚0x‘ + $bcolor[1].Substring(2,2) )
$bR = [int](‚0x‘ + $bcolor[1].Substring(4,2) )
$bG = [int](‚0x‘ + $bcolor[1].Substring(6,2) )
$bB = [int](‚0x‘ + $bcolor[1].Substring(8,2) )
$bRGB = [int]( ‚0x‘ + $bcolor[1].Substring(4,6) )

$bSuma = ($bB + $bG + $bR) # pro určení světlosti – pisma na proužku
$y += $velikostPopisu.Height ;
# barva buď černá nebo bílá
if ($bSuma -lt 300) { $lblColor[-1].ForeColor = [System.Drawing.Color]::white }
else { $lblColor[-1].ForeColor = [System.Drawing.Color]::black }
if ((($i+1)%$PocetRadkuBarev) -eq 0) {$x += 240 ; $y = 10;} # kreslit na další sloupec

# ulozime vazbu mezi lblColor a xColor – pro případné překreslování tlačítkem Setrid
$xColor[$i][2]=$i
# a tady je to potřebné navázání pro pohyb proužku – LABELu Add_XXXXX, kde XXXXX je potřebná událost a následně rutina, která ji obslouží
# $this je aktualní objekt tj $lblColor[$i],
# pokud bychom napsali např { lblMouseDown $lblColor[$i] }, pak se bude používat nasposledy zpracovaný objekt pro všechna volání na všech objektech (Labelech)
# $lblColor[5].Add_MouseDown({ lblMouseDown $lblColor[5] }) už bude správně používat odpovídající objekt

$lblColor[$i].Add_MouseDown({ lblMouseDown $this })
$lblColor[$i].Add_MouseUp({ lblMouseUp })
$lblColor[$i].Add_MouseMove({ lblMouseMove $this })

$frmColor.Controls.Add($lblColor[$i])
}

# Teď přidáme tlačítko, které vyvolá nové seřazení
$x=10; $y= ($velikostPopisu.Height*$pocetRadkuBarev)+10 ;
$btnSrovnat = New-Object System.Windows.Forms.Button
$btnSrovnat.Location = New-Object System.Drawing.Point($x, $y)
$btnSrovnat.Size = New-Object System.Drawing.Size(135, 53)
$btnSrovnat.TabIndex = 0
$btnSrovnat.Text = „Srovnat“
$btnSrovnat.UseVisualStyleBackColor = $true
$btnSrovnat.add_Click({btnSrovnat_OnClick})
$frmColor.Controls.Add($btnSrovnat)

$lblINFO = New-Object System.Windows.Forms.Label
if ($debug) {
$Radek=‘ x=’+$x.ToString()+‘ y=’+$y.ToString()   + ‚  VelkostPopisu=‘ +$velikostPopisu.Height.ToString()+ ‚ pocetR=’+$pocetRadkuBarev.ToString()
} else {    $Radek=“
}
$lblINFO.Text = $Radek;
$lblINFO.Size = New-Object System.Drawing.Size(400, 80)
$lblINFO.Location = New-Object System.Drawing.Point(200, 550)
$frmColor.Controls.Add($lblINFO)

function Main
{
[System.Windows.Forms.Application]::EnableVisualStyles()
[System.Windows.Forms.Application]::Run($frmColor)
}

Main # This call must remain below all other event functions

Hromadná normalizace názvů souborů a adresářů pomocí powershelu

 

 

Potřeboval jsem provést normalizaci jmen souborů a adresářů, tak, abych je případně mohl použít pro webový přístup.  Skript není úplně optimalizovaný a chybí v něm ošetření neúspěšných přejmenování.
pozn: zase mě v powershelu dostalo volání a vracení hodnot funkce
funkce voláme: Jmeno_funce Parametr1 Parametr2 a nikoli
Jmeno_funce(Parametr1, Parametr2).
V druhém případě se poweshell snaží vyhodnotit výraz v závorce, který vloží jako jediný parametr.
Dále pokud pro testovací účely použiju příkaz echo místo funkce [System.Console]::WriteLine, pak se výstup z echa dostává do vrácené hodnoty.
Zkuste si pohrát s:

function pokus1 {
echo „AB“;
return „CD“;
}

function pokus2 {
echo „EF“;
return pokus1;
}

$A=pokus2 ;
echo $A;
echo „—„;
echo („Vysledek=“ + $A);
echo $(„Vysledek=“ + $A);

Docela zmatečné výsledky

Tady je vlastní zdroják:

# NormalizeDIRs

$ROOTdir=“V:\Zaznamy_ze_skoleni“;
# pole kam se budou ukládat plné jména přejmenovaných adresářů. Pokud tam není nalezena shoda, tak adresář přejmenuj
$script:APrejmenovano=@();

# Pokud je v poli APrejmenovano již uloženo plné jméno adresáře, není už třeba přejmenovávat
# v podstatě je to funkce navíc…
function NeedRename {
param ($CeleJmeno)

# [System.Console]::WriteLine(„NeedRename: “ + $CeleJmeno);
foreach ($B in $script:APrejmenovano){
     if ($B.FullName -eq $CeleJmeno) { return „NE“; }
   }
   return „ANO“;
}
#———————-

# odstraní diakritiku
function RemoveDiacritics {
param ($s)

#[System.Console]::WriteLine(„RemoveDiacritics=“ + $s);
$s = $s.Normalize([System.Text.NormalizationForm]::FormD);
   $sb = „“;
   for ($i = 0; $i -lt $s.Length; $i++) {
     if ([System.Globalization.CharUnicodeInfo]::GetUnicodeCategory($s[$i]) -ne [System.Globalization.UnicodeCategory]::NonSpacingMark) {
       $sb += $s[$i] ;
     }
   }
   return $sb;
}
#———————-

# tady se snažím pomocí záměn trochu učesat tvar. Zvláště takové zběsilosti jako je tečka mezera tečka před příponou (jmeno. .txt).
# Dalo by se tu vymyslet něco moudřejšího.
function NormalizujJmeno {
param ($Ret);

# [System.Console]::WriteLine(„Normalizuji: „+$Ret);
$vyst = (RemoveDiacritics $Ret);
$vyst = $vyst -replace „[=\s]“, „_“;
$vyst = $vyst -replace „[+;,\(\)]“, „-„;
#$vyst = $vyst -replace „\._“, „.“;
$vyst = $vyst -replace „_\.“, „.“;
$vyst = $vyst -replace „-_“, „-„;
$vyst = $vyst -replace „_-„, „-„;
$vyst = $vyst -replace „_+“, „_“;
$vyst = $vyst -replace „-+“, „-„;
$vyst = $vyst -replace „\.+“, „.“;
$vyst = $vyst -replace „\.-„, „-„;
$vyst = $vyst -replace „\.-„, „-„;

return $vyst ;
}
#———————-

# Tady je vlastní přejmenování adresáře. Pokud po normalizaci názvu dojde ke kolizi jmen, přidám na konec -00n „-{0:D3}“
function jbRenameDIR {
param ($Jmeno,$Rodic)

$Rozliseni=“;
   $i=0;
   $NoveJmeno = NormalizujJmeno $Jmeno;
   $OldFullName = $Rodic+’\’+$Jmeno;
   $NewFullName = $Rodic+’\’+$NoveJmeno+$Rozliseni ;
# pokud jsme narazili na adresář, kde se po normalizaci normalizaci nic nemění, nesnažíme se o rename-item – padá to na chybu
if ($OldFullName -ne $NewFullName) {
# pokud uz nazev existuje , dam priponu -ddd napr -001)
while (Test-Path $NewFullName) {
       $i++;
       $Rozliseni = „-{0:D3}“ -f $i;
       $NewFullName = $Rodic+’\’+$NoveJmeno+$Rozliseni;
     }
    $NoveJmeno = $NoveJmeno+$Rozliseni ;
# [System.Console]::WriteLine(„Rename : “ +$OldFullName +“ -> „+$NoveJmeno);
rename-item „$OldFullName“ „$NoveJmeno“ -force ;
   }
# tady ukládám do porovnávacího pole nové plné jméno
   $script:APrejmenovano += $NewFullName;
   return $script:APrejmenovano[-1] ;
}
#———————-

# Prejmenovani Souboru. Tady v případě kolize jmen dam rozlišovaci řetězec -00n před příponu
function jbRenameFile {
param ($Jmeno,$Rodic)

$Rozliseni=“;
   $i=0;

if ($Jmeno -match „(.*)\.(.*)“) {
     $Basename=$matches.1;
     $extension=‘.’+$matches.2;
   } else {
     $Basename=$Jmeno;
     $extension=“;
   }
   $NoveJmeno = NormalizujJmeno $BaseName;
   $OldFullName = $Rodic+’\’+$Jmeno;
$NewFullName = $Rodic+’\’+$NoveJmeno+$Rozliseni+$extension ;
if ($OldFullName -ne $NewFullName) {
# pokud uz nazev existuje , dam priponu -ddd napr -001)
while (Test-Path $NewFullName) {
       $i++; $Rozliseni = „-{0:D3}“ -f $i;
       $NewFullName = $Rodic+’\’+$NoveJmeno+$Rozliseni+$extension;
      }
   $NoveJmeno = $NoveJmeno+$Rozliseni+$extension ;
# [System.Console]::WriteLine(„Rename : “ +$OldFullName +“ -> „+$NoveJmeno);
  rename-item „$OldFullName“ „$NoveJmeno“ -force ;
 }
return $NewFullName; ;
}
#———————-

function jbRenameDIRs {
param ($D)

$AD=Get-ChildItem -Path $D |where Attributes -eq Directory
   if ($AD.count -gt 0) {
     foreach ($pol in $AD) {
       $Rename = NeedRename $pol.Fullname ;
       If ($Rename -eq „ANO“) {
         $NJ = jbRenameDIR $pol.Name $pol.Parent.FullName ;
# [System.Console]::WriteLine( „Prejmenovano na „+ $NJ );
# rady je rekurzivní volání, ale s novým jmenem NJ
        jbRenameDIRs $NJ ;
       } else {
         echo „Sem nikdy nepujdu“;
         jbRenameDIRs $pol.FullName ;
       }
     }
   }
}
#———————-

function jbRenameFiles {
param ($D)

# tady volám Get-ChildItem zjednodušeně se switchem -recurse
   $AD=Get-ChildItem -Path $D -recurse|where Attributes -ne Directory
   if ($AD.count -gt 0) {
     foreach ($pol in $AD){
       $parent=split-path $pol.VersionInfo.FileName ;
       $NJ = jbRenameFile $pol.Name $parent ;
# [System.Console]::WriteLine( „Prejmenovano na „+ $NJ );
     }
   }
}
#—————–

# nejprve přejmenuji adresářovou strukturu
jbRenameDIRs($ROOTdir);
# a teď soubory
jbRenameFiles($ROOTdir);

Ještě pokud chceme, aby se okno powershellu zavřelo po dokončení akce
if ($Host.Name -eq ‚ConsoleHost‘) {Stop-Process $PID}

Skript volám v plánovači úloh powershell s parametrem

-command „& {. ‚c:\PSS\NormalizeDir.ps1‘}“

Snad tím někomu udělám radost

 

Windows 2012 – RRAS – error 13806

Při konfiguraci RRAS – v rámci Remote Access -na Windows serveru 2012 jsem neustále narážel na chybu 130806. Měl jsem konfiguraci VPN only. VPN typu PPTP a SSTP mi proběhly v pořádku, pokud jsem zkusil IKEv2 hned se objevila chyba 13806. Zkoušel jsem různé kombinace certifikátů, ale bez úspěchu.

Jednou jsem povolil i zakladní konfiguraci Dirrect Access, kde mimo jiné se nastavuje certifikát pro IP-HTTP a ejhle chyba zmizela a VPN se navázala.

RAS-1-640

Po zrušení Direct Access přes Remove Configuration Settings v Remote Access management Console a opětovném nastavení VPN – se chyba neobjevuje. Ale funguje to jen s tím certifikátem, který byl použit v Remote Access management Console – Remote Access Serveru.

Změnu lze – nebo já to jinak neumím – provádět jen při povoleném Direct Acessu. To pak lze i pomocí powershelu. Např:

 $C=( Get-ChildItem -Path cert:LocalMachine\my | Where-Object -FilterScript { $_.FriendlyName -Like „Custom-VPN-server-1“ } )

set-RemoteAccess –SslCertificate $C

 #Restart RRAS

restart-service RemoteAccess

Pokud Dirrect Access není aktivní, pak nefungují ani tyto skripty.

Snad to někomu ušetří nějaký čas.