[DllImport("rasapi32.dll")]
public static extern int RasGetEntryDialParams(string pbook,IntPtr ipBuff,bool b);
/// <summary>
/// 枚举窗口
/// </summary>
[DllImport("user32.Dll")]
public static extern int EnumWindows(CallBack x, int y);  /// <summary>
/// 取窗口标题
/// </summary>
[DllImport("User32.Dll")]
public static extern void GetWindowText(IntPtr h, StringBuilder s, int nMaxCount);

解决方案 »

  1.   

    还有一个:
    //Declaring
    public class clsAPI
    {
    /// <summary>
    /// Shut down a XP
    /// </summary>
    #region
    [StructLayout(LayoutKind.Sequential, Pack=1)]
    public struct TokPriv1Luid
    {
    public int Count;
    public long Luid;
    public int Attr;
    } [DllImport("kernel32.dll", ExactSpelling=true) ]
    public static extern IntPtr GetCurrentProcess(); [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
    public static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok ); [DllImport("advapi32.dll", SetLastError=true) ]
    public static extern bool LookupPrivilegeValue( string host, string name, ref long pluid ); [DllImport("advapi32.dll", ExactSpelling=true, SetLastError=true) ]
    public static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall,
    ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen ); [DllImport("user32.dll", ExactSpelling=true, SetLastError=true) ]
    public static extern bool ExitWindowsEx( int flg, int rea ); public const int SE_PRIVILEGE_ENABLED = 0x00000002;
    public const int TOKEN_QUERY = 0x00000008;
    public const int TOKEN_ADJUST_PRIVILEGES = 0x00000020;
    public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
    public const int EWX_LOGOFF = 0x00000000;
    public const int EWX_SHUTDOWN = 0x00000001;
    public const int EWX_REBOOT = 0x00000002;
    public const int EWX_FORCE = 0x00000004;
    public const int EWX_POWEROFF = 0x00000008;
    public const int EWX_FORCEIFHUNG = 0x00000010;
    #endregion
    }//Calling
    bool ok;
    TokPriv1Luid tp;
    IntPtr hproc = clsAPI.GetCurrentProcess();
    IntPtr htok = IntPtr.Zero;
    ok = clsAPI.OpenProcessToken( hproc, 
    clsAPI.TOKEN_ADJUST_PRIVILEGES | clsAPI.TOKEN_QUERY, ref htok );
    tp.Count = 1;
    tp.Luid = 0;
    tp.Attr = clsAPI.SE_PRIVILEGE_ENABLED;
    ok = clsAPI.LookupPrivilegeValue( null, clsAPI.SE_SHUTDOWN_NAME, ref tp.Luid );
    ok = clsAPI.AdjustTokenPrivileges( htok, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero );
    ok = clsAPI.ExitWindowsEx(clsAPI.EWX_SHUTDOWN, 0 );
      

  2.   

    这儿是一个具体的例子:关机
    http://www.ccw.com.cn/htm/app/aprog/01_9_14_4.asp
    http://www.ccw.com.cn/htm/center/prog/02_10_9_6.asp
      

  3.   

    如果值是IntPtr类型,则可直接用"="
    如果是int或long,则可以有IntPtr强制转换.

    IntPtr p=new intPtr(1000);
    int i=2000;
    p=(IntPtr)i;
      

  4.   

    you look:
    http://www.ccw.com.cn/htm/center/prog/02_10_9_6.asp http://www.ccw.com.cn/htm/app/aprog/01_9_14_4.asp
    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=6956
    ---------------------------------------------
    using System; 
    using System.Runtime.InteropServices; 
    class Test 

        public enum DriveType 
        { 
            DRIVE_UNKNOWN = 0, 
            DRIVE_NO_ROOT_DIR = 1, 
            DRIVE_REMOVABLE = 2, 
            DRIVE_FIXED = 3, 
            DRIVE_REMOTE = 4, 
            DRIVE_CDROM = 5, 
            DRIVE_RAMDISK = 6 
        } 
         
        static public void Main(string[] args) 
        { 
            DriveType driveType = Test.GetDriveType(args[0]); 
            Console.WriteLine("Drive {0} is type {1}", args[0], driveType); 
        }     [DllImport("kernel32.dll")] 
        public static extern DriveType GetDriveType(string rootPathName); 
    }调用查看驱动器类型的API
    保存为 api.cs
    用命令 csc.exe api.cs 编译成api.exe
    执行   api.exe a:          就能显示驱动器A是Removable的
    ----------------------------------------------------
    using System;
    using System.Runtime.InteropServices; public class PinvokeApp
    { [DllImport("user32.dll",CharSet=CharSet.Unicode)]
    static extern int MessageBoxW(int hWnd,string msg,string caption,int type);
    //EntryPoint="MessageBoxA"
    public static void Main()
    {
    int x=MessageBoxW(0,"Hello,World!","This is called from a C# App",6);
    Console.Write(x); }
    }
    --------------------------------------------------------
    use P/Invoke, like[DllImport("user32.dll")]
    public static extern int GetClassName(int hwnd,
      [MarshalAs(UnmanagedType.LPStr)] StringBuilder buf,
      int nMaxCount);seehttp://msdn.microsoft.com/msdnmag/issues/02/08/CQA/