Category Archives: DotNet

TNS: lost contact !

Primo “vero” momento di “crisi” per KOS. L’applicazione va in eccezione – con tempistica o azione del tutto causale – con “ORA-03113 end-of-file on communication channel”.

Vengono fatte tutte le analisi e le ipotesi del caso, risultato: nulla!, il problema continua a persistere.

E’ qui che comincia la crisi, non si riesce a capire quale sia il problema e quindi nemmeno a trovare una soluzione. L’unica cosa di cui siamo certi – analizzando i log – è che il problema è iniziato il giorno 13 Dicembre alle 13 circa. Quindi azzardiamo qualsiasi ipotesi:

Pensiamo che sia KOS:

Anche se non ci crediamo molto, l’ultima release è stata fatta giorno 12 con una release note veramente scarna: solo qualche minor bug fixing.In quanto, concentrati sulla release del nuovo modulo di MAGAZZINO/FARMACIA. Facciamo tutti i controlli del caso, risultato: nulla!

Pensiamo che sia il nuovo SERVER PACS :

Hanno da poco installato un nuovo server che fungerà da PACS. Ipotizziamo che non sia stato configurato bene oppure che il transfer di immagini sia troppo oneroso e provochi problemi. Abbiamo provato a staccarlo, risultato: nada!

Pensiamo che sia ORACLE:

Attiviamo tutti i log possibili ed immaginabili e consultiamo tutti i tips del caso, i vari forum, e quant’altro ci possa dare una mano. Devo dire che oracle permettere di indagare veramente a fondo, al punto di poter “tracciare” i singoli pacchetti inviati nella comunicazione client-server.

Qui di seguito alcuni link di riferimento:

http://www.orafaq.com/wiki/Sqlnet.ora

http://www.orafaq.com/faqnet.htm

http://www.oracle-base.com/articles/misc/OracleNetworkConfiguration.php

http://download.oracle.com/docs/cd/B14117_01/network.101/b10775/troublestng.htm

http://forums.oracle.com/forums/thread.jspa?messageID=2256122

Ma senza nessun risultato.

Pensiamo che sia il SERVER che ospita ORACLE:

Ma non troviamo alcun log che possa indicarci qualche malfunzionamento. Risutato: buio completo!

Pensiamo che sia lo SWITCH che collega i SERVER alla rete:

Ma anche qui facciamo “quasi” un buco nell’acqua, troviamo un cavo difettoso (per una scheda secondaria di un altro server). Risultato: nulla di che!

Oramai siamo in preda alla follia, azzardiamo qualsiasi ipotesi anche senza senso, torniamo a pensa che sia ORACLE:

Magari qualche query errata, o comunque qualcosa che impegni il db cosi tanto da far cadere le connessioni. Un corruzione di indici. Risultato: ancora niente.

Torniamo a pensare che sia un problema di rete:

Attiviamo ethereal, pensiamo che qualche macchina mandi pacchetti anomali provocando disconnessioni o che le workstation del pacs dia problemi. Risultato: boh!

Giorno 20 Dicembre, siamo distrutti, facciamo ipotesi che potrebbero essere definite ‘fantasiose’: “attacco DOS”:

Stacchiamo firewall, e quant’altro, siamo esclusi dal mondo esterno. Sono le 19.03, oramai c’è solo silenzio. Quando all’improvviso: “drin! drin!”. Il telefono!… direte voi! Non può essere! … abbiamo scaricato i cordless a furia di telefonate da parte degli operatori e dei medici che non riuscivano lavorare. Allora cosa ?… una cosa che ci ha inquietati tutti! Squillava un contatto skype di un collega! Tutti in coro: ma come !?! siamo scollegati da internet. A me viene i mente scene di un film come “the ring”. Un collega ha scritto come topic sul suo contatto skype:”una chiamata dall’aldilà“.

Veniamo a scoprire tramite un tracert dell’esistenza di un router “sconosciuto”. Indagando, scopriamo che tale router è stato proprio installato in concomitanza con l’inizio dei nostri problemi. Come potete intuire, è un router che non dovrebbe proprio essere presente nella nostra rete e ci collegava in “malomodo” ad un’altra rete che non ha nulla a vedere con la nostra.

Risultato: Scollegandoci da quel router maledetto si è risolto il problema.

Fletto i muscoli e sono nel vuoto !

ps. Buon Natale a tutti 😀

VS 2005 Design.ExceptionCollection

If when you open – at design time – a form in visual studio 2005 and raise exception: System.ComponentModel.Design. ExceptionCollection.

You can try to fix error with this tips:

Start a second VS2005, go to tools, the first option is ‘attach to process’.  The process is called devenv.exe.  For good measure, you could click on ‘attach to’ and make it report any sort of error, but managed code is what it comes up with, and what you want.

Now try to open the designer again, and the second VS2005 should break on the line th at is causing the error.  At least, that’s what happened to me when the IDE was both displaying an error dialog, and then crashing out.

Good luck.

Tips Source: msdn forum

Modellazione UML gratis per Visual Studio.NET

La Tangible Architect ha deciso di mettere a disposizione gratuitamente il proprio tool di modellazione UML integrabile in Visual Studio.

fonte: www.programmazione.it

VS 2005 Design.ExceptionCollection

Se aprendo una form a design time si apre una popup con la scritta:

Generata eccezione tipo

‘System.ComponentModel.Design. ExceptionCollection’.

Per scoprire la causa dell’eccezione aprite una nuova istanza di visual studio ed utilizzate la funzione “Connetti a processo” presente nel menu “Strumenti”.

Una volta eseguita l’operazione “Connetti a processo”. Provate a riaprire in design la form che ha generato l’errore e troverete il punto che ha generato l’eccezione.

Fletto i muscoli e sono nel vuoto.

Star Wars Credits Control [C# porting]

Sulle esempio di Pablo van der Meer, ho fatto il porting del suo codice c++ in c#.

E’ stato fatto un porting molto basilare, può essere sicuramente migliorato.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsApplication3
{
    public partial class AboutScrollText : Control
    {
        private int m_Active = 0;
        const int NUM_STARS = 100;
        private Random r = new Random();
        private int m_nStarsSpeed = 30;
        private int m_nScrollSpeed = 2;
        private int m_nScrollPos;
        private Timer m_Timer;
 
        CStar[] m_StarArray;
        String[] m_TextLines;
 
        private struct CStar
        {
            public int x;
            public int y;
            public int z;
        };
 
        public AboutScrollText()
        {
            InitializeComponent();
 
            this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
 
            m_StarArray = new CStar[NUM_STARS];
 
            m_Timer = new Timer();
            m_Timer.Interval = 75;
            m_Timer.Tick += new EventHandler(m_Timer_Tick);
 
            m_TextLines = new string[8];
            m_TextLines[0] = "A long time ago";
            m_TextLines[1] = "";
            m_TextLines[2] = "in a galaxy far far away";
            m_TextLines[3] = "";
            m_TextLines[4] = "this application";
            m_TextLines[5] = "was programmed by";
            m_TextLines[6] = "";
            m_TextLines[7] = "...?...";
            // initialize stars
            for (int i = 0; i < NUM_STARS; i++)
            {
                m_StarArray[i].x = r.Next(0, 1024);
                m_StarArray[i].x -= 512;
                m_StarArray[i].y = r.Next(0, 1024);
                m_StarArray[i].y -= 512;
                m_StarArray[i].z = r.Next(0, 512);
                m_StarArray[i].z -= 256;
            }
 
            m_nScrollSpeed = 2; // (m_nScrollSpeed * 100) / 50;
        }
 
        void m_Timer_Tick(object sender, EventArgs e)
        {
            if (m_Active == 0)
            {
                m_Active = 1;
                this.Invalidate();
            }
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            if (this.DesignMode)
            {
                base.OnPaint(e);
            }
            else
            {
                Graphics g = e.Graphics;
                DoStars(g);
                DoScrollText(g);
                m_Active = 0;
            }
        }
 
        void DoScrollText(Graphics g)
        {
            int nPosX = 0;
            int nPosY = 0;
            Bitmap b = new Bitmap(this.Width, this.Height);
            Graphics bitmap = Graphics.FromImage(b);
 
            // black
            Font f = new Font("Tahoma", 24, FontStyle.Regular);
            // draw Credits on the hidden Picture
            for (int i = 0; i < m_TextLines.Length; i++)
            {
                // set position for this line
                SizeF size = bitmap.MeasureString(m_TextLines[i], f);
                nPosY = m_nScrollPos + (i * (int)size.Height);
 
                if ((nPosY) > 0)
                {
                    nPosX = (this.Width / 2) - ((int)size.Width / 2);
 
                    if (nPosY > 255)
                    {
                        bitmap.DrawString(m_TextLines[i], f, new SolidBrush(Color.FromArgb(255, 255, 255)), nPosX, nPosY);
                    }
                    else
                    {
                        // set fade color
                        bitmap.DrawString(m_TextLines[i], f, new SolidBrush(Color.FromArgb(nPosY, nPosY, nPosY)), nPosX, nPosY);
                    }
                }
                else
                {
                    // start all over ...
                    if (i == (m_TextLines.Length - 1))
                    {
                        m_nScrollPos = this.Height;
                    }
                }
            }
 
            int nWidth = this.Width;
            int nHeight = this.Height;
 
            //MemoryStream memStream = new MemoryStream();
            //bitmap.Save(memStream, ImageFormat.Gif);
            //bitmap.Flush();
 
            double nScale;
            int nOffset;
            // shrink text from bottom to top to create Star Wars effect
            Rectangle rDest = new Rectangle();
            Rectangle rSrc = new Rectangle();
            Bitmap s = new Bitmap(this.Width, this.Height);
            Graphics sbitmap = Graphics.FromImage(s);
 
            for (int y = 0; y < nHeight; y += 3)
            {
                nScale = (double)y / (double)nHeight;
                nOffset = (int)(nWidth - nWidth * nScale) / 2;
                rDest.X = nOffset;
                rDest.Y = y;
                rDest.Width = (int)(nWidth * nScale);
                rDest.Height = 3;
 
                rSrc.X = 0;
                rSrc.Y = y;
                rSrc.Width = nWidth;
                rSrc.Height = 3;
 
                sbitmap.DrawImage(b, rDest, rSrc, GraphicsUnit.Pixel);
            }
 
            g.DrawImageUnscaled(s, 0, 0);
            // move text up one pixel
            m_nScrollPos = m_nScrollPos - m_nScrollSpeed;
        }
 
        void DoStars(Graphics g)
        {
            g.Clear(Color.Black);
 
            int nFunFactor = 100;
            int x, y, z;
            for (int i = 0; i < NUM_STARS; i++)
            {
                m_StarArray[i].z = m_StarArray[i].z - m_nStarsSpeed;
                if (m_StarArray[i].z > 255)
                {
                    m_StarArray[i].z = -255;
                }
                if (m_StarArray[i].z < -255)
                {
                    m_StarArray[i].z = 255;
                }
 
                z = m_StarArray[i].z + 256;
                x = (m_StarArray[i].x * nFunFactor / z) + (this.Width / 2);
                y = (m_StarArray[i].y * nFunFactor / z) + (this.Height / 2);
 
                // create a white pen which luminosity depends on the z position (for 3D effect!)
                int nColor = 255 - m_StarArray[i].z;
                if (nColor < 0) nColor = 0;
                if (nColor > 255) nColor = 255;
                g.DrawEllipse(new Pen(Color.FromArgb(nColor, nColor, nColor), 1), x, y, 2, 2);
            }
        }
 
        public void Start()
        {
            m_nScrollPos = this.Height;
            m_Timer.Enabled = true;
        }
 
        public void Stop()
        {
            m_Timer.Enabled = false;
        }
 
    }
}

Un esempio in c++ che usa Win32 OpenGL Framework lo trovate qui.

Fletto i muscoli e sono nel vuoto.

Capture shift key status on mouse click

You can know shift key state using:

[DllImport(“user32.dll”)]
static extern short GetKeyState(VirtualKeyStates nVirtKey);

You can know state of keys, as follows:

public enum VirtualKeyStates : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
VK_CANCEL = 0x03,
VK_MBUTTON = 0x04,
//
VK_XBUTTON1 = 0x05,
VK_XBUTTON2 = 0x06,
//
VK_BACK = 0x08,
VK_TAB = 0x09,
//
VK_CLEAR = 0x0C,
VK_RETURN = 0x0D,
//
VK_SHIFT = 0x10,
VK_CONTROL = 0x11,
VK_MENU = 0x12,
VK_PAUSE = 0x13,
VK_CAPITAL = 0x14,
//
VK_KANA = 0x15,
VK_HANGEUL = 0x15,
/* old name – should be here for compatibility */
VK_HANGUL = 0x15,
VK_JUNJA = 0x17,
VK_FINAL = 0x18,
VK_HANJA = 0x19,
VK_KANJI = 0x19,
//
VK_ESCAPE = 0x1B,
//
VK_CONVERT = 0x1C,
VK_NONCONVERT = 0x1D,
VK_ACCEPT = 0x1E,
VK_MODECHANGE = 0x1F,
//
VK_SPACE = 0x20,
VK_PRIOR = 0x21,
VK_NEXT = 0x22,
VK_END = 0x23,
VK_HOME = 0x24,
VK_LEFT = 0x25,
VK_UP = 0x26,
VK_RIGHT = 0x27,
VK_DOWN = 0x28,
VK_SELECT = 0x29,
VK_PRINT = 0x2A,
VK_EXECUTE = 0x2B,
VK_SNAPSHOT = 0x2C,
VK_INSERT = 0x2D,
VK_DELETE = 0x2E,
VK_HELP = 0x2F,
//
VK_LWIN = 0x5B,
VK_RWIN = 0x5C,
VK_APPS = 0x5D,
//
VK_SLEEP = 0x5F,
//
VK_NUMPAD0 = 0x60,
VK_NUMPAD1 = 0x61,
VK_NUMPAD2 = 0x62,
VK_NUMPAD3 = 0x63,
VK_NUMPAD4 = 0x64,
VK_NUMPAD5 = 0x65,
VK_NUMPAD6 = 0x66,
VK_NUMPAD7 = 0x67,
VK_NUMPAD8 = 0x68,
VK_NUMPAD9 = 0x69,
VK_MULTIPLY = 0x6A,
VK_ADD = 0x6B,
VK_SEPARATOR = 0x6C,
VK_SUBTRACT = 0x6D,
VK_DECIMAL = 0x6E,
VK_DIVIDE = 0x6F,
VK_F1 = 0x70,
VK_F2 = 0x71,
VK_F3 = 0x72,
VK_F4 = 0x73,
VK_F5 = 0x74,
VK_F6 = 0x75,
VK_F7 = 0x76,
VK_F8 = 0x77,
VK_F9 = 0x78,
VK_F10 = 0x79,
VK_F11 = 0x7A,
VK_F12 = 0x7B,
VK_F13 = 0x7C,
VK_F14 = 0x7D,
VK_F15 = 0x7E,
VK_F16 = 0x7F,
VK_F17 = 0x80,
VK_F18 = 0x81,
VK_F19 = 0x82,
VK_F20 = 0x83,
VK_F21 = 0x84,
VK_F22 = 0x85,
VK_F23 = 0x86,
VK_F24 = 0x87,
//
VK_NUMLOCK = 0x90,
VK_SCROLL = 0x91,
//
VK_OEM_NEC_EQUAL = 0x92, // ‘=’ key on numpad
//
VK_OEM_FJ_JISHO = 0x92, // ‘Dictionary’ key
VK_OEM_FJ_MASSHOU = 0x93, // ‘Unregister word’ key
VK_OEM_FJ_TOUROKU = 0x94, // ‘Register word’ key
VK_OEM_FJ_LOYA = 0x95, // ‘Left OYAYUBI’ key
VK_OEM_FJ_ROYA = 0x96, // ‘Right OYAYUBI’ key
//
VK_LSHIFT = 0xA0,
VK_RSHIFT = 0xA1,
VK_LCONTROL = 0xA2,
VK_RCONTROL = 0xA3,
VK_LMENU = 0xA4,
VK_RMENU = 0xA5,
//
VK_BROWSER_BACK = 0xA6,
VK_BROWSER_FORWARD = 0xA7,
VK_BROWSER_REFRESH = 0xA8,
VK_BROWSER_STOP = 0xA9,
VK_BROWSER_SEARCH = 0xAA,
VK_BROWSER_FAVORITES = 0xAB,
VK_BROWSER_HOME = 0xAC,
//
VK_VOLUME_MUTE = 0xAD,
VK_VOLUME_DOWN = 0xAE,
VK_VOLUME_UP = 0xAF,
VK_MEDIA_NEXT_TRACK = 0xB0,
VK_MEDIA_PREV_TRACK = 0xB1,
VK_MEDIA_STOP = 0xB2,
VK_MEDIA_PLAY_PAUSE = 0xB3,
VK_LAUNCH_MAIL = 0xB4,
VK_LAUNCH_MEDIA_SELECT = 0xB5,
VK_LAUNCH_APP1 = 0xB6,
VK_LAUNCH_APP2 = 0xB7,
//
VK_OEM_1 = 0xBA, // ‘;:’ for US
VK_OEM_PLUS = 0xBB, // ‘+’ any country
VK_OEM_COMMA = 0xBC, // ‘,’ any country
VK_OEM_MINUS = 0xBD, // ‘-‘ any country
VK_OEM_PERIOD = 0xBE, // ‘.’ any country
VK_OEM_2 = 0xBF, // ‘/?’ for US
VK_OEM_3 = 0xC0, // ‘`~’ for US
//
VK_OEM_4 = 0xDB, // ‘[{‘ for US
VK_OEM_5 = 0xDC, // ‘\|’ for US
VK_OEM_6 = 0xDD, // ‘]}’ for US
VK_OEM_7 = 0xDE, // ””‘ for US
VK_OEM_8 = 0xDF,
//
VK_OEM_AX = 0xE1, // ‘AX’ key on Japanese AX kbd
VK_OEM_102 = 0xE2, // “<>” or “\|” on RT 102-key kbd.
VK_ICO_HELP = 0xE3, // Help key on ICO
VK_ICO_00 = 0xE4, // 00 key on ICO
//
VK_PROCESSKEY = 0xE5,
//
VK_ICO_CLEAR = 0xE6,
//
VK_PACKET = 0xE7,
//
VK_OEM_RESET = 0xE9,
VK_OEM_JUMP = 0xEA,
VK_OEM_PA1 = 0xEB,
VK_OEM_PA2 = 0xEC,
VK_OEM_PA3 = 0xED,
VK_OEM_WSCTRL = 0xEE,
VK_OEM_CUSEL = 0xEF,
VK_OEM_ATTN = 0xF0,
VK_OEM_FINISH = 0xF1,
VK_OEM_COPY = 0xF2,
VK_OEM_AUTO = 0xF3,
VK_OEM_ENLW = 0xF4,
VK_OEM_BACKTAB = 0xF5,
//
VK_ATTN = 0xF6,
VK_CRSEL = 0xF7,
VK_EXSEL = 0xF8,
VK_EREOF = 0xF9,
VK_PLAY = 0xFA,
VK_ZOOM = 0xFB,
VK_NONAME = 0xFC,
VK_PA1 = 0xFD,
VK_OEM_CLEAR = 0xFE
}

The GetKeyState function retrieves the status of the specified virtual key. The status specifies whether the key is up, down, or toggled (on, off-alternating each time the key is pressed).

The return value specifies the status of the specified virtual key, as follows:

– If the high-order bit is 1, the key is down; otherwise, it is up.
– If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key’s indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.Example:

//
// True is L-SHIFT is down
//
bool lshift = ((GetKeyState(VirtualKeyStates.VK_LSHIFT) & 256)==256);
//
// True is R-SHIFT is down
//
bool rshift = ((GetKeyState(VirtualKeyStates.VK_RSHIFT) & 256)==256); short x = GetKeyState(VirtualKeyStates.VK_SHIFT); if ((x & 0x80) != 0)
{
// A shift key is down (right or left)
}
else
{
// A shift keys are up.
}
//

Fletto i muscoli e sono nel vuoto.

Catturare lo stato del tasto SHIFT durante il click del mouse

E’ possibile conoscere lo stato del tasto shift (e non solo) utilizzando la funzione

[DllImport(“user32.dll”)]
static extern short GetKeyState(VirtualKeyStates nVirtKey);

Grazie a questa funzione possiamo conoscere lo stato di uno dei seguenti tasti:

public enum VirtualKeyStates : int
{
VK_LBUTTON = 0x01,
VK_RBUTTON = 0x02,
VK_CANCEL = 0x03,
VK_MBUTTON = 0x04,
//
VK_XBUTTON1 = 0x05,
VK_XBUTTON2 = 0x06,
//
VK_BACK = 0x08,
VK_TAB = 0x09,
//
VK_CLEAR = 0x0C,
VK_RETURN = 0x0D,
//
VK_SHIFT = 0x10,
VK_CONTROL = 0x11,
VK_MENU = 0x12,
VK_PAUSE = 0x13,
VK_CAPITAL = 0x14,
//
VK_KANA = 0x15,
VK_HANGEUL = 0x15,
/* old name – should be here for compatibility */
VK_HANGUL = 0x15,
VK_JUNJA = 0x17,
VK_FINAL = 0x18,
VK_HANJA = 0x19,
VK_KANJI = 0x19,
//
VK_ESCAPE = 0x1B,
//
VK_CONVERT = 0x1C,
VK_NONCONVERT = 0x1D,
VK_ACCEPT = 0x1E,
VK_MODECHANGE = 0x1F,
//
VK_SPACE = 0x20,
VK_PRIOR = 0x21,
VK_NEXT = 0x22,
VK_END = 0x23,
VK_HOME = 0x24,
VK_LEFT = 0x25,
VK_UP = 0x26,
VK_RIGHT = 0x27,
VK_DOWN = 0x28,
VK_SELECT = 0x29,
VK_PRINT = 0x2A,
VK_EXECUTE = 0x2B,
VK_SNAPSHOT = 0x2C,
VK_INSERT = 0x2D,
VK_DELETE = 0x2E,
VK_HELP = 0x2F,
//
VK_LWIN = 0x5B,
VK_RWIN = 0x5C,
VK_APPS = 0x5D,
//
VK_SLEEP = 0x5F,
//
VK_NUMPAD0 = 0x60,
VK_NUMPAD1 = 0x61,
VK_NUMPAD2 = 0x62,
VK_NUMPAD3 = 0x63,
VK_NUMPAD4 = 0x64,
VK_NUMPAD5 = 0x65,
VK_NUMPAD6 = 0x66,
VK_NUMPAD7 = 0x67,
VK_NUMPAD8 = 0x68,
VK_NUMPAD9 = 0x69,
VK_MULTIPLY = 0x6A,
VK_ADD = 0x6B,
VK_SEPARATOR = 0x6C,
VK_SUBTRACT = 0x6D,
VK_DECIMAL = 0x6E,
VK_DIVIDE = 0x6F,
VK_F1 = 0x70,
VK_F2 = 0x71,
VK_F3 = 0x72,
VK_F4 = 0x73,
VK_F5 = 0x74,
VK_F6 = 0x75,
VK_F7 = 0x76,
VK_F8 = 0x77,
VK_F9 = 0x78,
VK_F10 = 0x79,
VK_F11 = 0x7A,
VK_F12 = 0x7B,
VK_F13 = 0x7C,
VK_F14 = 0x7D,
VK_F15 = 0x7E,
VK_F16 = 0x7F,
VK_F17 = 0x80,
VK_F18 = 0x81,
VK_F19 = 0x82,
VK_F20 = 0x83,
VK_F21 = 0x84,
VK_F22 = 0x85,
VK_F23 = 0x86,
VK_F24 = 0x87,
//
VK_NUMLOCK = 0x90,
VK_SCROLL = 0x91,
//
VK_OEM_NEC_EQUAL = 0x92, // ‘=’ key on numpad
//
VK_OEM_FJ_JISHO = 0x92, // ‘Dictionary’ key
VK_OEM_FJ_MASSHOU = 0x93, // ‘Unregister word’ key
VK_OEM_FJ_TOUROKU = 0x94, // ‘Register word’ key
VK_OEM_FJ_LOYA = 0x95, // ‘Left OYAYUBI’ key
VK_OEM_FJ_ROYA = 0x96, // ‘Right OYAYUBI’ key
//
VK_LSHIFT = 0xA0,
VK_RSHIFT = 0xA1,
VK_LCONTROL = 0xA2,
VK_RCONTROL = 0xA3,
VK_LMENU = 0xA4,
VK_RMENU = 0xA5,
//
VK_BROWSER_BACK = 0xA6,
VK_BROWSER_FORWARD = 0xA7,
VK_BROWSER_REFRESH = 0xA8,
VK_BROWSER_STOP = 0xA9,
VK_BROWSER_SEARCH = 0xAA,
VK_BROWSER_FAVORITES = 0xAB,
VK_BROWSER_HOME = 0xAC,
//
VK_VOLUME_MUTE = 0xAD,
VK_VOLUME_DOWN = 0xAE,
VK_VOLUME_UP = 0xAF,
VK_MEDIA_NEXT_TRACK = 0xB0,
VK_MEDIA_PREV_TRACK = 0xB1,
VK_MEDIA_STOP = 0xB2,
VK_MEDIA_PLAY_PAUSE = 0xB3,
VK_LAUNCH_MAIL = 0xB4,
VK_LAUNCH_MEDIA_SELECT = 0xB5,
VK_LAUNCH_APP1 = 0xB6,
VK_LAUNCH_APP2 = 0xB7,
//
VK_OEM_1 = 0xBA, // ‘;:’ for US
VK_OEM_PLUS = 0xBB, // ‘+’ any country
VK_OEM_COMMA = 0xBC, // ‘,’ any country
VK_OEM_MINUS = 0xBD, // ‘-‘ any country
VK_OEM_PERIOD = 0xBE, // ‘.’ any country
VK_OEM_2 = 0xBF, // ‘/?’ for US
VK_OEM_3 = 0xC0, // ‘`~’ for US
//
VK_OEM_4 = 0xDB, // ‘[{‘ for US
VK_OEM_5 = 0xDC, // ‘\|’ for US
VK_OEM_6 = 0xDD, // ‘]}’ for US
VK_OEM_7 = 0xDE, // ””‘ for US
VK_OEM_8 = 0xDF,
//
VK_OEM_AX = 0xE1, // ‘AX’ key on Japanese AX kbd
VK_OEM_102 = 0xE2, // “<>” or “\|” on RT 102-key kbd.
VK_ICO_HELP = 0xE3, // Help key on ICO
VK_ICO_00 = 0xE4, // 00 key on ICO
//
VK_PROCESSKEY = 0xE5,
//
VK_ICO_CLEAR = 0xE6,
//
VK_PACKET = 0xE7,
//
VK_OEM_RESET = 0xE9,
VK_OEM_JUMP = 0xEA,
VK_OEM_PA1 = 0xEB,
VK_OEM_PA2 = 0xEC,
VK_OEM_PA3 = 0xED,
VK_OEM_WSCTRL = 0xEE,
VK_OEM_CUSEL = 0xEF,
VK_OEM_ATTN = 0xF0,
VK_OEM_FINISH = 0xF1,
VK_OEM_COPY = 0xF2,
VK_OEM_AUTO = 0xF3,
VK_OEM_ENLW = 0xF4,
VK_OEM_BACKTAB = 0xF5,
//
VK_ATTN = 0xF6,
VK_CRSEL = 0xF7,
VK_EXSEL = 0xF8,
VK_EREOF = 0xF9,
VK_PLAY = 0xFA,
VK_ZOOM = 0xFB,
VK_NONAME = 0xFC,
VK_PA1 = 0xFD,
VK_OEM_CLEAR = 0xFE
}

Lo stato del tasto può essere: up, down oppure toggled. Infatti, la funzione ritorna:

Рstato up, se il primo bit (high-bit) ̬ uguale a 1, stato down altrimenti.

– stato toggled on, se l’ultimo bit (lower-bit) è uguale a 1, toggle off altrimenti. Questo stato è usato per i pulsanti come CAPS LOCK, ed indica se attivo o meno.

Il seguente esempio permette di conoscere lo stato SHIFT, lo stato del tasto R-SHIFT e lo stato del tasto L-SHIFT.

//
// Vero se L-SHIFT è premuto
//
bool lshift = ((GetKeyState(VirtualKeyStates.VK_LSHIFT) & 256)==256);
//
// Vero se R-SHIFT è premuto
//
bool rshift = ((GetKeyState(VirtualKeyStates.VK_RSHIFT) & 256)==256); short x = GetKeyState(VirtualKeyStates.VK_SHIFT); if ((x & 0x80) != 0)
{
// E’ stato premuto uno shift
}
else
{
// Non è stato premuto uno shift
}
//

Fletto i muscoli e sono nel vuoto.

Controllare gli eventi di sistema

Potrebbe capitavi di dover controllare gli eventi di sistema come (la disconnessione o la sospensione della sessione) per evitare perdite di dati.

Per C# qui trovate un ottimo articolo per la loro gestione

Fletto i muscoli e sono nel vuoto.

Reflector 5.0.1.0

Qui potete trovare la nuova release di Reflector.

Un utile strumento per lo studio di assembly scritti in C#, VB e IL

Mentre qui potete trovare una vasta serie di addins

powered by IMHO 1.3

ADO Connection Strings

Hai bisogno di connettere la tua applicazione dotnet ad un db3 ma non ti ricordi la sintassi della stringa di connessione ?

Non c’è problema con ConnectionString.com