Feed
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

Visual Studio 2005 - mitgelieferte Icon-Sammlung

by Roland Schumacher alias GENiALi 21. September 2007 -- 121 Wörter  -- 173 mal gelesen
Dieser Beitrag ist mir was wert:  

Ich lese zuhause gerade folgendes Buch.

Etwa in der Mitte, es geht um das Thema Windows Form, stiess ich auf
ein Hinweis der mich neugierig machte. :-D

Visual Studio 2005 liefert angeblich eine Icon-Sammlung mit.
Das musste ich mir natürlich mal ansehen.

Zu finden ist die Datei unter:
x:\programme\microsoft visual studio 8\common7\vs2005imagelibrary\
wobei x für das Laufwerk steht wo man Visual Studio 2005 installiert hat.

Die Datei VS2005ImageLibrary.zip muss nur noch entpackt werden.

Danach findet man Icons und Animationen, die in den Windows-Systemen
Verwendung finden. Echt Cool.

Zudem gibt es in jeder Kategorie noch eine HTML-Datei wo alle Icons
und Animationen des jeweiligen Ordner's angezeigt werden.

Ich habe so einige interessante Icons gefunden.

es läuft: Nightwish – Once – Planet Hell

Tags: , ,

Allerlei | Entwicklung | Software

Meine zwei neuesten Bücher

by Roland Schumacher alias GENiALi 18. August 2006 -- 181 Wörter  -- 59 mal gelesen
Dieser Beitrag ist mir was wert:  

Ich habe mir wieder mal zwei neue Fachbücher besorgt.
Kam in letzter Zeit nicht mehr ganz so oft vor.

Thema ist ASP.NET 2.0 und Winforms mit Visual C# 2005.
Grund: Meine Webseite läuft jetzt unter ASP.NET 2.0 und
das Coole Tool LiveWriter kann ich auch mit dem 2.0'er Framework
gebrauchen. Jetzt steht dem Umstieg nichts mehr im Weg.

Beim ASP.NET 2.0 Buch hätte ich aber wahrscheinlich zuerst
die einfachere Version nehmen sollen.



Gemäss der Einleitung hat Dino Esposito ein Buch über 1600 Seiten gemacht. Das ist nicht ganz so handlich wie man es sich vorstellt. Deshalb wurde es in zwei Teile aufgeteilt. Im ersten Teil geht es um Klassischen ASP.NET 2.0. In diesem Teil geht es vielfach um die Interna der 2'er Version. Deshalb vermute ich, dass das nicht ganz das Richtige für mich ist.

Allerdings finde ich den Teil 1 nicht. Wer den kennt soll es mir doch bitte mitteilen.


Zu dem Teil kann ich noch nichts sagen. Ich habe beim lesen mit dem ASP.NET 2.0 Buch begonnen. Aber über kurz oder lang wird auch dieses Buch gelesen. Dann mehr dazu.

Tags: , ,

Allerlei | Entwicklung

DataGridTableStyle Problem doch noch gelöst

by Roland Schumacher alias GENiALi 20. February 2006 -- 112 Wörter  -- 79 mal gelesen
Dieser Beitrag ist mir was wert:  

Daran habe ich jetzt lange gesucht.
Ich will einem DataGrid in einer WinForm App ein neues Aussehen verpassen.
Das kann man ja mit DataGridTableStyle machen.

public static DataGridTableStyle GetGridStyle()
{
     DataGridTableStyle tableStyle = 
new DataGridTableStyle();
     tableStyle.MappingName = "CATI_History";

     DataGridTextBoxColumn id = 
new DataGridTextBoxColumn();
     id.HeaderText = "DB ID";
     id.MappingName = "ID";
     id.Width = 2;
     id.ReadOnly = 
false;
     tableStyle.GridColumnStyles.Add(id);

     DataGridTextBoxColumn studNr = 
new DataGridTextBoxColumn();
     studNr.HeaderText = "Studien Nr.";
     studNr.MappingName = "StudienNummer";
     studNr.Width = 100;
     studNr.ReadOnly = 
false;
     tableStyle.GridColumnStyles.Add(studNr);

     
return tableStyle;
}

Das Ding muss man ja noch an das DataGrid binden.

if(dgCatiLzData.TableStyles.Count == 0)
{
     dgCatiLzData.TableStyles.Clear();
     dgCatiLzData.TableStyles.Add(Helper.GetGridStyle());
}

Leider brachte das kein Erfolg. Das Problem lag bei der Zeile

tableStyle.MappingName = "CATI_History";

Ich habe hier die Tabelle der SQL DB angegeben. Gebunden an das DataGrid
habe ich aber eine Collection vom Typ Records. Gesucht wie blöd.
Die Lösung:

tableStyle.MappingName = "Records";
Ich muss also die Klasse angeben und nicht die Tabelle aus der DB. Irgend wie logisch. :-)

Tags: ,

Entwicklung

Identität bei einer Applikation wechseln

by Roland Schumacher alias GENiALi 6. October 2005 -- 435 Wörter  -- 105 mal gelesen
Dieser Beitrag ist mir was wert:  

Das kann man immer wieder gebrauchen. Man hat ein Programm, dass unter einem
anderen Benutzer als dem angemeldeten, ausgeführt werden soll.
Dazu habe ich bei MS einen Link gefunden der zeigt, wie man es macht, allerdings
in einer Konsolenanwendung.

 
Im Prinzip funktioniert das auch. Ich habe mir jetzt eine Klasse gemacht, die
mir das ganze einwenig einfacher zur Verfügung stellt.
Sie hat zwei öffentliche statische Methoden. Eine zum ändern der Identität, die
andere um zur alten zurück zu kehren.
Hier der Code.

/*
Original habe ich bei MS gefunden.
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpref/html/frlrfSystemSecurityPrincipalWindowsIdentityClassImpersonateTopic.asp
*/


using System;
using System.Runtime.InteropServices;
using System.Security.Principal;

namespace Test
{
    /// <summary>
    /// Zusammenfassung für ChangeIdentity.
    /// </summary>
    publicclass ChangeIdentity
    {
        #region Variabeln

        /****************************************************************************/
        /***** Variablen                                                        *****/
        /****************************************************************************/
        privatestatic IntPtr tokenHandle =new IntPtr(0);
        privatestatic IntPtr dupeTokenHandle =new IntPtr(0);
        //Deklaration benötigter API-Funktionen und Konstanten
        privateconstint LOGON32_PROVIDER_DEFAULT = 0;
        privateconstint LOGON32_LOGON_INTERACTIVE = 2;
        privateconstint SecurityImpersonation = 2;

        [DllImport("advapi32.dll", SetLastError=true)]
        privatestaticexternbool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

        [DllImport("kernel32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]
        privatestaticexternunsafeint FormatMessage(int dwFlags, ref IntPtr lpSource, int dwMessageId, int dwLanguageId, ref String lpBuffer, int nSize, IntPtr* Arguments);

        [DllImport("kernel32.dll", CharSet=CharSet.Auto)]
        privatestaticexternbool CloseHandle(IntPtr handle);

        [DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
        privatestaticexternbool DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);

        //Das wird benötigt um die Personifizierung wieder rückgängig zu machen.
        privatestatic WindowsImpersonationContext impersonatedUser =null;
        /****************************************************************************/
        /***** Ende Variablen                                                    *****/
        /****************************************************************************/

        #endregion

        #region Methoden

        /****************************************************************************/
        /***** Methoden                                                            *****/
        /****************************************************************************/

        /// <summary>
        /// Wechselt den Benutzer, unter dem das Programm ausgeführt werden soll.
        /// </summary>
        /// <param name="Domain">Name der Domäne</param>
        /// <param name="UserName">User Name, unter dem das Programm laufen soll</param>
        /// <param name="Passwort">Das passende Passwort</param>
        publicstaticvoid ImpersonateUser(string Domain, string UserName, string Passwort)
        {
            tokenHandle = IntPtr.Zero;
            dupeTokenHandle = IntPtr.Zero;
            
            //Mit dem gewünschten User anmelden.
            bool returnValue = LogonUser(UserName, Domain, Passwort, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
            
            //Bei einem Fehler, z.b. falschen Namen, falsches Passwort, soll eine Exception geworfen werden.
            if(false == returnValue)
            {
                int ret = Marshal.GetLastWin32Error();
                string fehler = GetErrorMessage(ret);
                string f ="Errorcode: "+ ret.ToString() + Environment.NewLine;
                f += fehler;
                thrownew Exception(f);
            }

            //Für was??? Weiss ich nicht so genau. :-)s
            bool retVal = DuplicateToken(tokenHandle, SecurityImpersonation, ref dupeTokenHandle);
            
            if(false == retVal)
            {
                CloseHandle(tokenHandle);
                thrownew Exception("Fehler beim Dublizieren des Token.");
            }
            
            //Die Intentität wechseln.
            WindowsIdentity newId =new WindowsIdentity(dupeTokenHandle);
            impersonatedUser = newId.Impersonate();
            
            //Die Token wieder freigeben.
            if(tokenHandle != IntPtr.Zero)
                CloseHandle(tokenHandle);
            if(dupeTokenHandle != IntPtr.Zero)
                CloseHandle(dupeTokenHandle);
        }

        /*----------------------------------------------------------------------------------------------*/
        /// <summary>
        /// Die Identität wieder zurücksetzen.
        /// </summary>
        publicstaticvoid UndoImpersonateUser()
        {
            if(impersonatedUser !=null)
            {
                impersonatedUser.Undo();
            }
        }
        /*----------------------------------------------------------------------------------------------*/
        /// <summary>
        /// Gibt den letzten Win32Error zurück.
        /// Habe ich 1:1 aus dem Beispiel übernommen.
        /// </summary>
        privatestaticunsafestring GetErrorMessage(int errorCode)
        {
            int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
            int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
            int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
            //int errorCode = 0x5; //ERROR_ACCESS_DENIED
            //throw new System.ComponentModel.Win32Exception(errorCode);
            int messageSize = 255;
            String lpMsgBuf ="";
            int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
            IntPtr ptrlpSource = IntPtr.Zero;
            IntPtr prtArguments = IntPtr.Zero;
            int retVal = FormatMessage(dwFlags, ref ptrlpSource, errorCode, 0, ref lpMsgBuf, messageSize, &prtArguments);
            if(0 == retVal)
            {
                thrownew Exception("Failed to format message for error code "+ errorCode +". ");
            }
            return lpMsgBuf;
        }

        /****************************************************************************/
        /***** Ende Methoden                                                    *****/
        /****************************************************************************/

        #endregion
    }
}

Anwenden kann man sie wie folgt. Gemacht habe ich es bei einer WinForm Anwendung.

/// <summary>

/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
staticvoid Main()
{
    Application.ThreadException+=new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);

    try
    {
        ChangeIdentity.ImpersonateUser("DOMAIN", "USERNAME", "PASSWORT");
    }
    catch(Exception ex)
    {
        MessageBox.Show(ex.Message, "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }

    Application.Run(new FrmMain());

    ChangeIdentity.UndoImpersonateUser();
}
 
Zu beachten ist, dass es, so viel ich mitbekommen habe, nur mit Windows XP und Windows Server 2003 so einfach funktioniert.
Unter Windows 2000 und NT4 muss der Benutzer, der das Programm ausführt, das Privileg SE_TCP_NAME besitzen.

Tags: ,

Entwicklung

Bei einer Textbox auf das Enter reagieren

by Roland Schumacher alias GENiALi 4. May 2005 -- 42 Wörter  -- 104 mal gelesen
Dieser Beitrag ist mir was wert:  
Das kann man auch immer wieder gebrauchen.
Man hat eine Textbox, wo man beim drücken der Entertaste
eine aktion auslösen möchte.
 
Für das nutzt man das KeyPress Event der Textbox

private void tbPasswort_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    if(e.KeyChar == '\r')
    {
        e.Handled =true;
        //Weitere Logik, z.B: Methode für das Login aufrufen
    }
}

Tags: ,

Entwicklung

Übersetzen

Diverses

Seitwert

Locations of visitors to this page

Rating
Excellent - 97%overlay Icon

Statistik