יום חמישי, 22 בנובמבר 2018

כתיבה וטעינה של קבצי XML - שפת c#

כתיבה וטעינה של קבצי XML בשפת c#
ניתן לכתוב/לקרוא XML לכל סוג של מחלקה/אובייקט, גם אם יהיה זה אובייקט בסיסי (לדוגמה string) או מחלקה שנוצרה על-ידי המשתמש:

public class SnirXmlHandler
{
   /// <summary>save xml</summary>
   public static void Save<T>(T t, string filename)
   {
      try 
      {
         XmlSerializer serializer = new XmlSerializer(typeof(T));
         using (TextWriter textWriter = new StreamWriter(filename)) 
         {
            serializer.Serialize(textWriter, t);
            textWriter.Close();
         }
      }
      catch (Exception ex) { throw; }
   }

   /// <summary>load xml file</summary>
   public static T Load<T>(string filename)
   {
      T t;
      try 
      {
         XmlSerializer deserializer = new XmlSerializer(typeof(T));
         using (TextReader textReader = new StreamReader(filename)) 
         {
            t = (T)deserializer.Deserialize(textReader);
            textReader.Close();
         }
      }
      catch (Exception ex) { throw; }
      return t;
   }
}

שימוש לדוגמה:
public class MyClass
{
    public string Name { get; set; }
    public int[] Age { get; set; }
    public MyClass2 Mc2 { get; set; }
}

public class MyClass2
{
    public int[] Num { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        MyClass myclass = new MyClass()
        {
            Name = "snir",
            Age = new int[] { 1, 2, },
            Mc2 = new MyClass2 
            {
                Num = new int[] { 10, 45 }
            }
        };
        SnirXmlHandler.Save(myclass, "snir.xml");
        MyClass mc = SnirXmlHandler.Load("snir.xml");
        }
    }



קובץ XML תוצאה:

  snir
  
    1
    2
  
  
    
      10
      45
    
  

קונטרול webbrowser לגרסת Internet Explorer הכי גבוהה

כיצד להשתמש בקונטרול C# webbrowser שישתמש בגרסת internet explorer גבוהה (ולא גרסה 7 - ברירת מחדל)

1. יש לגשת לתיקיה זו ברגיסטרי
ולשנות/להוסיף מפתח זה עבור כל תוכנה רצויה
>HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

לערכים הבאים עבור גרסאות ie (בהתאמה לי המספר)
  • 7000 , 8888, 9000, 10000, 11000 (standards-based !DOCTYPE directives)
  • 8888, 9999, 10001, 11001 (regardless of the !DOCTYPE directive)

2. לאחר מכן, צריך להגדיר את internet explorer 11, לפי התמונות להלן:
(אפשרות זו אינה קיימת ב-internet explorer edge)
תרגום לעברית: הגדרות של תצוגת תאימות


יש אפשרות לעשות שהתוכנה תרשום את עצמה ברגיסטרי עבור שימוש בגרסה IE גבוהה יותר:
/// <summary>
/// Set IE Version to registry.
/// Options: 8888, 9999, 10001, 11001 (regardless of the !DOCTYPE directive) 
/// 7000, 8000, 9000, 10000, 11000 (standards-based !DOCTYPE directives)
/// </summary>
private void SetIeVersionInRegistery(string version)
{
   try
   {
      string key_str = @"Software\Microsoft\Internet Explorer\
                                      Main\FeatureControl
                                      \FEATURE_BROWSER_EMULATION";
      string exe_name = System.AppDomain.CurrentDomain.FriendlyName;

      RegistryKey myKey = Registry.CurrentUser.OpenSubKey(key_str, true);

      using (RegistryKey key = myKey.OpenSubKey(key_str, true))
      {
         if (myKey != null)
         {
            myKey.SetValue(exe_name, version, RegistryValueKind.DWord);
         }
      }
   }
   catch (Exception ex)
   {
      throw ex;
   }
}

יום שני, 8 באוקטובר 2018

איך לדחוף dll לתוך קובץ exe


1. במאפיינים של קובץ ה-dll שנוסף בתור reference, יש לשנות את Copy Local=False
2. את אותו קובץ שהוספנו בתור reference יש לגרור אל תוך הפרויקט ב-solution explorer
3. יש לשנות את המאפיין של קובץ זה: Build Action=Embedded
4. יש להעתיק את הקוד הבא למקום שלפני Application.Run בתוך הקוד של exe:

static class Program
{
   /// <summary>
   /// The main entry point for the application.
   /// </summary>
   [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
            Application.Run(new Form1());
        }

   private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
   {
            string dllName = args.Name.Contains(',') 
                ? args.Name.Substring(0, args.Name.IndexOf(',')) 
                : args.Name.Replace(".dll", "");
            dllName = dllName.Replace(".", "_");
            if (dllName.EndsWith("_resources"))
                return null;

            using (var stream = Assembly.GetExecutingAssembly()
                .GetManifestResourceStream(GetCurrentNamespace() + "." + dllName + ".dll"))
            {
                byte[] assemblyData = new byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
   }

   [System.Runtime.CompilerServices.MethodImpl(MethodImplOptions.NoInlining)]
   public static string GetCurrentNamespace()
   {
            return 
    System.Reflection.Assembly.GetCallingAssembly().EntryPoint.DeclaringType.Namespace;
    }
 }

יום שישי, 20 באפריל 2018

שפת בסיס נתונים

יצרתי אתר אינטרנט וניסיתי להזין נתונים בעברית - אבל הכל נקלט כג'יבריש.
לאחר מעט שוטטיות באינטרנט התברר לי שהקולז'ן של בסיס הנתונים שלי הוא:
SQL_Latin1_General_CP1_CI_AS

כלומר לטינית.
כדי לשנות אותו עשיתי:

USE master;  
ALTER DATABASE SnirElgabsiDb;
COLLATE Hebrew_CI_AS;  


כדי לבדוק מה הקולזן של בסיס הנתונים:
Select name,collation_name From sys.databases

להלן מעט אתרים עם הפרטים, עד שאספיק לשבת ולכתוב הכל בצורה מסודרת:


יום שני, 20 בנובמבר 2017

כיצד לתקשר בין צד c# אל צד js בתוך WebBrowser ולהיפך

פרויקט דוגמה להורדה

יש להוסיף בראש הדף (לפני המחלקה הראשונה) את הקוד הבא:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
//[ComVisibleAttribute(true)]
public partial class Form1 : Form {   ... }

בחלק Load של הדף יש להגדיר את WebBrowser ולצורך הדוגמה נכתוב בתוכו את ה-html:
private void Form1_Load(object sender, EventArgs e)
{
  // 4. Set the ObjectForScripting property in the 
      // form's constructor or a Load event handler.
      // The following code uses the form class 
      // itself for the scripting object.
      // Component Object Model (COM) must be able 
      // to access the scripting object.
      // Use [ComVisible(true)] in order to make your 
      //form visible to COM 
      // (add the ComVisibleAttribute attribute to your form class).
  webBrowser1.ObjectForScripting = this;
webBrowser1.DocumentText =
  @"<html><head>
  <script>
  // the js function to call from the c# side:
  function myFoo(arg) { alert(arg); }   </script>   </head><body>
  send code to c# side: <br/>
  <input type='text' id='snir' value='snir send to c#'></input>
  <button onclick='window.external.Test(document.getElementById('snir').value)'>
  call client C# code from javscript code</button>
  </body>
  </html>";
}


נגדיר מתודה שתקבל את המיד מצד js:
// get message from the webpage's js
[ComVisible(true)]
public void Test(string arg)
{
  MessageBox.Show(argt, "C# side");
}

נגדיר מתודה שתשלח מידע אל צד js:
private void SendToWebpage()
{
  webBrowser1.Document.InvokeScript(
    "myFoo",
    new String[] { textBox1.Text }
  );
}

יום שני, 20 במרץ 2017

איך להעתיק webbrowser ל-pictureBox ומשם לקליפבורד בעזרת בחירה

איך להעתיק webbrowser ל-pictureBox ומשם לקליפבורד בעזרת בחירה

namespace WriteBraille
{
    public partial class WebbrowserToPanel : Form
    {
        public WebbrowserToPanel()  {      InitializeComponent();   }

        private void WebbrowserToPanel_Load(object sender, EventArgs e)
        {
            webBrowser1.Url = new Uri(textBox1.Text);
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
                webBrowser1.Url = new Uri(textBox1.Text);
        }

        private Point RectStartPoint;
        private Rectangle Rect = new Rectangle();
        private Brush selectionBrush = new SolidBrush(Color.FromArgb(128, 72, 145, 220));

        private void button1_Click(object sender, EventArgs e)
        {
            Control c = webBrowser1;
            Bitmap bmp = new Bitmap(c.Width, c.Height);
            c.DrawToBitmap(bmp, c.ClientRectangle);
            pictureBox1.Image = bmp;
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            // Determine the initial rectangle coordinates...
            RectStartPoint = e.Location;
            Invalidate();
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            // Draw the rectangle...
            if (pictureBox1.Image != null)
            {
                if (Rect != null && Rect.Width > 0 && Rect.Height > 0)
                {
                    e.Graphics.FillRectangle(selectionBrush, Rect);
                }
            }
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button != MouseButtons.Left)
                return;
            Point tempEndPoint = e.Location;
            Rect.Location = new Point(
                Math.Min(RectStartPoint.X, tempEndPoint.X),
                Math.Min(RectStartPoint.Y, tempEndPoint.Y));
            Rect.Size = new Size(
                Math.Abs(RectStartPoint.X - tempEndPoint.X),
                Math.Abs(RectStartPoint.Y - tempEndPoint.Y));
            pictureBox1.Invalidate();
        }

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                if (Rect.Contains(e.Location))
                {
                    selectionBrush.Dispose();
                    //Debug.WriteLine("Right click");
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Image img = (pictureBox1.Image as Bitmap).Clone(Rect, pictureBox1.Image.PixelFormat);
            Clipboard.SetImage(img);
        }
    }
}

יום ראשון, 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>

יום רביעי, 14 באוקטובר 2015

הצגת כל שמות המחשבים ברשת+כתובת IP

1. צרו קובץ בספריה הראשית של כונן C בשם snir.bat
ניתן לעשות זאת ע"י לחיצה על התחל>הפעלה (או רק לחיצה על המקשים ctrl+r)
ושם לכתוב
notepad c:\snir.bat

ניתן להכנס לספריה הראשית של כונן C ע"י פתיחה של התחל>הפעלה, כתיבת והפעלת
C:

2. בחלון של פנקס הרשימות שנפתח הדביקו את הטקסט הבא:

@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

בשביל להציג את הרשימה הפעילו את הפקודה
cmd /c c:\snir.bat

יום שלישי, 4 באוגוסט 2015

תמונה שהיא בעצם קובץ ZIP

ומכילה בתוכה קבצים נוספים

בשביל ליצור קובץ תמונה תקני שיתפקד כקובץ zip בשינוי סיומת הקובץ, יש לנקוט צעדים הבאים:
1. מקם את שני הקבצים , למשל - pic.jpg , elgabsi.zip - באותה תיקיה.

2. הכנס לתיקייה באמצעות cmd והקלד את הפקודה:
            copy /b pic.jpg + elgabsi.zip snir.jpg
    כאשר snir.jpg יהיה הקובץ הסופי שיכיל את שני הקבצים - המכווץ והתמונה - יחד .
    b/    הוא קיצור ל "בינארי" .
   סדר רישום הקבצים חשוב.

3. כעת נוצר הקובץ הסופי - snir.jpg
    שנה את סיומת הקובץ ל-zip ע"מ להשתמש בו במתכונת האחרת.
    אפשר גם ליצור קובץ סופי בפורמט zip,
    וניתן להשתמש באותה שיטה גם לסוגי קבצים אחרים (png, וכו')

יום שלישי, 5 במאי 2015

תאריך עברי בשפת C#

תאריך עברי בשפת c#
הקוד לקוח מכאן:

קוד:
public static string GetHebrewJewishDateString(DateTime anyDate, bool addDayOfWeek)
{
//http://csharpprogramming.blogspot.co.il/2005/03/c-hebrew-date.html
System.Text.StringBuilder hebrewFormatedString = new System.Text.StringBuilder();

// Create the hebrew culture to use hebrew (Jewish) calendar 
CultureInfo jewishCulture = CultureInfo.CreateSpecificCulture("he-IL");
jewishCulture.DateTimeFormat.Calendar = new HebrewCalendar();

#region Format the date into a Jewish format

if (addDayOfWeek)
{
// Day of the week in the format " " 
hebrewFormatedString.Append(anyDate.ToString("dddd", jewishCulture) + " ");
}

// Day of the month in the format "'" 
hebrewFormatedString.Append(anyDate.ToString("dd", jewishCulture) + " ");

// Month and year in the format " " 
hebrewFormatedString.Append("" + anyDate.ToString("y", jewishCulture));

#endregion

return hebrewFormatedString.ToString();
}


יום רביעי, 29 באוקטובר 2014

javascript: לחיצה על DIV בשביל להריץ פקודה בצד שרת - C#

כדי להריץ פקודה מצד השרת (server-side) באמצעות לחיצה על DIV
נציג דוגמה של יציאה מהאתר ומחיקת Cookies כך שלא נהיה עוד רשומים אליו כמחוברים:
aspx code:
<body>
   <form id="form1" runat="server">
      <div>
         ...
         <divonclick="logout_js()">
               Click Logout & Run ServerSide Code
         </div>

         <%-- btn in a hidden DIV: --%>
         <div style="display: none;">
               <asp:Button Text="LogOut" ID="bLogOut" runat="server"
                        OnClick="bLogOut_Click" />
          </div>
          ..........

Javascript Code:
<script>
      function logout_js() {
            var button = document.getElementById('bLogOut');
            button.click();
      }
</script>


C# Code:
protected void bLogOut_Click(object sender, EventArgs e)
{
Response.Cookies["LoggedUserName"].Expires = DateTime.Now.AddDays(-1);
Response.Redirect("Login.aspx");
}