首 页 | 新 闻 | Symbian | Android| Windows Mobile | J2ME | 下载中心 | 游戏策划招聘与求职 | 购书指南 | 视频教程
您现在的位置: 开发视界 >> Windows Mobile >> Windows Mobile联网 >> 正文
c#.net实现Smartphone,PocketPC进程启动
作者:wang8712    文章来源:csdn blog    更新时间:2007-9-25 10:53:03

using System;
using System.Runtime.InteropServices;
using System.Text;

namespace RDP
{
 /// <summary>
 /// Utility class for launch programs and files.
 /// </summary>
 public class ShellExecute
 {
    public static void Start(string fileName, string parameters)
    {
      int nSize;
      SHELLEXECUTEEX see;
      IntPtr pFile;
      IntPtr pParams;

      see = new SHELLEXECUTEEX();

      nSize = fileName.Length * 2 + 2;
      pFile = localAlloc(MemoryAllocFlags.LPtr, nSize);
      Marshal.Copy(Encoding.Unicode.GetBytes(fileName), 0, pFile, nSize - 2);

      nSize = parameters.Length * 2 + 2;
      pParams = localAlloc(MemoryAllocFlags.LPtr, nSize);
      Marshal.Copy(Encoding.Unicode.GetBytes(parameters), 0, pParams, nSize - 2);
   
      see.lpFile = pFile;
      see.lpParameters = pParams;
   
      ShellExecuteEx(see);

      LocalFree(pFile);
      LocalFree(pParams);
      //return see.hProcess;
    }

    public static void Start(string fileName)
    {
      Start(fileName, "");
    }

    private static IntPtr localAlloc(MemoryAllocFlags uFlags, int uBytes)
    {
      const int GMEM_FIXED = 0x0000;
      const int LMEM_ZEROINIT  = 0x0040;
      const int LPTR = (GMEM_FIXED | LMEM_ZEROINIT);

      IntPtr ptr = LocalAlloc(LPTR, (uint)uBytes);
      if (ptr == IntPtr.Zero)
        throw new Exception("Out of memory!");
      return ptr;
    }

    private enum MemoryAllocFlags : int
    {
      Fixed   = 0x00,
      ZeroInit = 0x40,
      LPtr     = ZeroInit | Fixed
    }

    #region APIs
    [DllImport("coredll.dll")]
    private static extern IntPtr LocalAlloc(uint uFlags, uint Bytes);

    [DllImport("coredll")]
    private static extern IntPtr LocalFree(IntPtr hMem);

    [DllImport("coredll")]
    private extern static int ShellExecuteEx( SHELLEXECUTEEX ex );

    private class SHELLEXECUTEEX
    {
      public UInt32 cbSize  = 60;
      public UInt32 fMask   = 0;
      public IntPtr hwnd   = IntPtr.Zero;
      public IntPtr lpVerb  = IntPtr.Zero;
      public IntPtr lpFile  = IntPtr.Zero;
      public IntPtr lpParameters = IntPtr.Zero;
      public IntPtr lpDirectory = IntPtr.Zero;
      public int nShow   = 0;
      public IntPtr hInstApp  = IntPtr.Zero;
      public IntPtr lpIDList  = IntPtr.Zero;
      public IntPtr lpClass  = IntPtr.Zero;
      public IntPtr hkeyClass  = IntPtr.Zero;
      public UInt32 dwHotKey  = 0;
      public IntPtr hIcon   = IntPtr.Zero;
      public IntPtr hProcess  = IntPtr.Zero;
    }
    #endregion
  }
}

相关文章:
没有相关文章
 

站点地图 | 加入收藏 | 联系站长 | 广告服务 |
QQ:280529124  Tel:0592-8271361 辽ICP备05021703号