יום ראשון, 25 בדצמבר 2016

יצירת תיקיה זמנית בקבצי המערכת
כאשר נעשה שימוש בקבצים שנשמרים בתור Resources של התוכנה, ויש צורך להעתיק אותם אל הכונן בשביל שימוש - תמונות למשל – קיימת כמובן האפשרות ליצור תיקיית-בת בתוך תיקיית התוכנה, אך ניתן גם לעשות שימוש נוח יותר ולפרוס את הקבצים אל תוך קבצי המערכת.
ראשית יש לשים לב להגדרות הבאות לקבצים:
-          Build Action: Embedded Resources
-          Copy To Output Directory: Do Not Copy
שלבי הביצוע:
1.   יצירת תיקיה עם שם אקראי כדי לשמור בתוכה את הקבצים
// Create a temp dirctory to save the images in:
string tempDirName = Path.Combine( Path.GetTempPath(), 
                      System.Guid.NewGuid().ToString());
Directory.CreateDirectory(tempDirName);


2.  חילוץ הקבצים מתוך האסמבלי
//Extract the images from the assembly resources
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
// You can get the images path in embedded resources by watching:
string file = myAssembly.GetManifestResourceNames()[0];


3. שמירת  כל קובץ (תמונה) בתיקיה הזמנית שיצרנו
using (Stream myStream = myAssembly.GetManifestResourceStream(file))
{
   using (Stream file_stream = File.Create(file)) {
      CopyStream(myStream, file_stream);
   }
}

private static void CopyStream(Stream input, Stream output)
{
   byte[] buffer = new byte[8 * 1024];
   int len;
   while ((len = input.Read(buffer, 0, buffer.Length)) > 0) {
      output.Write(buffer, 0, len);
   }
}

4. לא נשכח למחוק את הקבצים ביציאה מהתוכנה

private static void Form1_Closing(object sender, FormClosingEventArgs e)
{
   try {
      Directory.Delete(tempDirName, true);
   }
   catch(Exception ex) { MessageBox.Show(ex.Message); }
}

יום שלישי, 15 בנובמבר 2016

כיצד להיות מנהל מערכת קבוע

UAC-הגדרת חשבון משתמש.
uac קובע את רמת הבטיחות של הרצת תוכנות במחשב.
נשמע טוב, אך זה בעיקר מטריד עם הודעות "האם רתה בטוח שברצונך להריץ תוכנה זו".

גם אם מכבים את האפשרות הזו דרך ההגדרות הרגילות של ווינדוס (חפשו UAC בלוח הבקרה),
עדיין התוכניות רצות בתור משתמש רגיל ולא בתור מערכת.
על מנת להריץ תוכנה בתור מנהל מערכת יש ללחוץ לחיצת עכבר  ימנית על הקובץ > הרץ בתור מנהל מערכת.
מעייף, נכון?
אז להלן הדרך לגרום למחשב להריץ הכל באופן קבוע כמנהל מערכת:
*. יש להריץ PowerShell בתור מנהל מערכת, להעתיק את הפקודות הבאות ולהריץ אותן שם:

Set-ItemProperty -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System" -Name "EnableLUA" -Value "0"

shutdown -r -t 0

יום שני, 31 באוקטובר 2016

הצג את כל כתובות IP ברשת הפנימית

כיצד להציג את כתובות כל המחשבים המחוברים לרשת הפנימית
1. יש לשמור את הקוד המופיע למטה בקובץ show-ip.bat
2. יש להפעיל את דוס (תפריט התחל > הפעלה > CMD) ולהריץ את הקובץ הזה.


@echo off
echo Snir Show Ip Address
echo ---
echo This file shows a list of all computers that are 
echo connected to the local network, 
echo the same like 'net view' does,
echo but this shows thier IP Address as well
echo .
echo -------------- Press any key to continue... --------------

pause > nul

setlocal EnableDelayedExpansion
set "xNext="
set "xComputer="
for /f %%A in ('net view /all') do (
    set "xComputer=%%~A"
    if "!xComputer:~0,2!"=="\\" for /f "tokens=2,* delims=. " %%X in ('nslookup %%A') do (
        if "!xNext!"=="1" (
            echo.!xComputer! = %%X.%%Y
            set "xNext=0"
        )
        if "!xComputer:~2!"=="%%~X" set "xNext=1"
    )
)
endlocal
pause

עריכת קבצים מתוך DOS בפנקס הרשימות של ווינדוס

שימוש:
כאשר הנך משתמש ב-DOS וברצונך לערוך קובץ,
בעזרת סקריפט זה תוכל להשתמש ב-notepad של ווינדוס, במקום בעורך הישן של DOS.

יש לשמור את הסקריפט הזה בקובץ edit.vbs בכל ספריה שכלולה במשתנה PATH של ווינדוס,
כלומר ספריה שנגישה מכל מקום אחר בספריית הקבצים של המחשב.

' This script must be placed in a PATH folder
' (which has access from everywhere in the computer file system).
' The use of this script: 
'     When you use 'dos' and want to edit a file
'     but with 'notepad' instead of the old dos  editor
' ------

Set oShell = CreateObject ("Wscript.Shell")
Dim strArgs
strArgs = "notepad " + Wscript.Arguments.Item(0)
oShell.Run strArgs ', 0, true

יום ראשון, 21 באוגוסט 2016

שינוי גודל דינמי של פנל - תכנות C#

לאחר חיפושים מצאתי פנל שניתן לשלוט על הגודל שלו - תוך כדי ריצה (כמו תיבת טקסט בוורד, עם עיצוב קצת שונה)
public class SizeablePanel : ContainerControl {
    const int WS_SIZEBOX = 0x00040000;
    protected override CreateParams CreateParams {
        get {
            CreateParams cp = base.CreateParams;
            cp.Style |= WS_SIZEBOX;
            return cp;
        }
    }
}

יש ליצור מחלקה (class) שתכיל את הקוד הזה ולמקם אותה בפרויקט.
הפקד (control) יופיע בתיבת הפקדים (Toolbox)

מקור:
http://forums.codeguru.com/showthread.php?480500-RESOLVED-User-resizable-container

יום שלישי, 3 במאי 2016

קונסול בחלון נפרד עבור תוכנת סי-שארפ

כיצד ליצור קונסול בחלון נפרד עבור תוכנת סי-שארפ 
הקוד מצורף להלן מדרג את ביצועי המחשב:

public partial class Form1 : Form
{
    // console - Allows the command line to be seen during normal execuation
    [DllImport("kernel32.dll", SetLastError = true)]
    [returnMarshalAsAttribute(UnmanagedType.Bool)]
    static extern bool AllocConsole();

    Thread trd;
    public Form1()
    {
        InitializeComponent();
        AllocConsole();
        trd = new Thread(new ThreadStart(render));
        trd.Start();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        trd.Abort();
    }

    private void render()
    {
        int framesRendered = 0;
        long startTime = Environment.TickCount;

        while (true)
        {
            //Benchmarking
            framesRendered++;
            if (Environment.TickCount > startTime + 1000)
            {
                Console.WriteLine("Snir's Computer Benchmarking: " + framesRendered + " fps");
                framesRendered = 0;
                startTime = Environment.TickCount;
            }
        }
    }
}

יום ראשון, 3 בינואר 2016

קביעת מסך פתיחת חלון

כאשר מחוברים למחשב יותר ממסך אחד, ניתן לקבוע באיזה מסך ירוץ חלון c# שפותחים:
Form f = new Form();
f.StartPosition = FormStartPosition.Manual;
f.Location = Screen.AllScreens[0].WorkingArea.Location;
f.Show();

נשים לב שצריך לשנות את מיקום StartPosition ל-Manual (ידני).
לאחר מכן קובעים את מספר המסך ע"פ מספר.

צל CSS באינטרנט אקספלורר 7 - WebBrowser בתוך c#

השמשתי בקונטרול WebBrowser בתוך תוכנת c# והיה צורך להציג צל (Shadow) ע"י CSS.
הבעיה היא שקונטרול כזה של סישארפ הוא גרסה 7 - ולא תומך CSS-3
אז:
איך להציג צל באינטרנט אקספלורר 7 (דפדפן של קונטרול webbrowser בתוך c#):
לצורך העניין, השתמשתי בטבלה <table> אותה מיקמתי בתוך span.

ראה הפניה:

קוד:

<html>
<head>
<style>
.shadow_class{
  border: 1px solid red;
   box-shadow: 0 0 55px #cccccc;
   -webkit-box-shadow: 0 0 55px #cccccc;
   -moz-box-shadow: 0 0 55px #cccccc;
}

body.ie6 .shadow_classbody.ie7 .shadow_classbody.ie8 .shadow_class {
   zoom: 1;
   filter: /*progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=15, Direction=0),*//*top*/
           progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=15, Direction=90),/*right*/
           progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=25, Direction=180),/*bottom*/
           progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=15, Direction=270);/*left*/
}

table{
  background-color: white;
}
</style>
</head>
<body class="ie7">
<span class="shadow_class">
  <table border="1">
    <tr><th>Header 1</th><th>Header 2</th></tr>
    <tr><td>row 1 col 1</td><td>row 1 col 2</td></tr>
  </table>
</span>
</body>
</html>