Csharp/C Sharp/Development Class/External API — различия между версиями

Материал из .Net Framework эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Версия 15:31, 26 мая 2010

Demonstrate compound modifiers and calls to external API

/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa
Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
//
//  GetUser.cs -- demonstratec compound modifiers and calls to external API
//
//                Compile this program with the following command line:
//                    C:>csc /unsafe GetUser.cs
//
namespace nsUser
{
    using System;
    using System.Runtime.InteropServices;
    
    public class GetUser
    {
        [DllImport ("user32.dll")]
        static extern public int MessageBox(int hWnd, string msg,
                                            string title, int type);
        [DllImport ("advapi32.dll")]
        static unsafe extern public bool GetUserName(byte [] User,
                                                     long *size);
        [DllImport ("advapi32.dll")]
        static unsafe extern public bool GetUserNameW(char [] User,
                                                     long *size);
        static public void Main ()
        {
            byte [] user = new byte[256];
            long size = (long) user.Length;
            unsafe
            {
                if (GetUserName (user, &size) == false)
                    Console.WriteLine ("Error getting user name");
            }
            string strUser = "";
            foreach (byte ch in user)
            {
                if (ch == 0)
                    break;
                strUser += (char) ch;
            }
            MessageBox (0, "The current user is " + strUser, "Howdy", 0);
            /*
            //********************************************
            // The following code uses the wide-character version GetUserNameW()
            //
            strUser = "";
            char [] cUser = new char[256];
            size = cUser.Length;
            unsafe
            {
                if (GetUserNameW (cUser, &size) == false)
                    Console.WriteLine ("Error getting user name");
            }
            foreach (char ch in user)
            {
                if (ch == 0)
                    break;
                strUser += ch;
            }
            MessageBox (0, "The current user is " + strUser, "Howdy", 0);
            */
        }
    }
}