Windows Mobile检索手机扩展卡

原创 2007年09月21日 10:52:00

#region 检索手机扩展卡类

 public class EnumFlashCard
 {
  public EnumFlashCard()
  {
   //
   // TODO: Add constructor logic here
   //
  }

  // Flash-card search functions.
  [DllImport("note_prj.dll", EntryPoint="FindFirstFlashCard")]
  public static extern IntPtr YD_FindFirstFlashCard (IntPtr lpFindFlashData);
  [DllImport("note_prj.dll", EntryPoint="FindNextFlashCard")]
  public static extern int YD_FindNextFlashCard (IntPtr hFlashCard, IntPtr lpFindFlashData);
  [DllImport("coredll.dll", EntryPoint="FindClose")]
  public static extern int YD_FindClose (IntPtr hFindFile);

  const int MAX_PATH = 260;

  public struct FILETIME
  {
   public int dwLowDateTime;
   public int dwHighDateTime;
  };
     
  public struct WIN32_FIND_DATA
  {
   public int dwFileAttributes;
   public FILETIME ftCreationTime;
   public FILETIME ftLastAccessTime;
   public FILETIME ftLastWriteTime;
   public int nFileSizeHigh;
   public int nFileSizeLow;
   public int dwOID;
   public String cFileName;
  };

  // Memory allocation functions.
  public const int LMEM_FIXED = 0x0000;
  [DllImport("coredll.dll")]
  public static extern IntPtr LocalAlloc (int uFlags, int uBytes);
  [DllImport("coredll.dll")]
  public static extern IntPtr LocalFree (IntPtr hMem);

  public static int INVALID_HANDLE_VALUE = -1;

  //--------------------------------------------------------
  // Buffer needed for find-flash-card functions
  //--------------------------------------------------------
  static IntPtr pFindData = IntPtr.Zero;

  private static void CopyIntPtr_to_WIN32_FIND_DATA(IntPtr pIn, ref WIN32_FIND_DATA pffd)
  {
   // Handy values for incrementing IntPtr pointer.
   int i = 0;
   int cbInt = Marshal.SizeOf(i);
   FILETIME ft = new FILETIME();
   int cbFT = Marshal.SizeOf(ft);

   // int dwFileAttributes
   pffd.dwFileAttributes = Marshal.ReadInt32(pIn);
   pIn = (IntPtr)((int)pIn + cbInt);

   // FILETIME ftCreationTime;
   Marshal.PtrToStructure(pIn, pffd.ftCreationTime);
   pIn = (IntPtr)((int)pIn + cbFT);

   // FILETIME ftLastAccessTime;
   Marshal.PtrToStructure(pIn, pffd.ftLastAccessTime);
   pIn = (IntPtr)((int)pIn + cbFT);

   // FILETIME ftLastWriteTime;
   Marshal.PtrToStructure(pIn, pffd.ftLastWriteTime);
   pIn = (IntPtr)((int)pIn + cbFT);

   // int nFileSizeHigh;
   pffd.nFileSizeHigh = Marshal.ReadInt32(pIn);
   pIn = (IntPtr)((int)pIn + cbInt);

   // int nFileSizeLow;
   pffd.nFileSizeLow = Marshal.ReadInt32(pIn);
   pIn = (IntPtr)((int)pIn + cbInt);

   // int dwOID;
   pffd.dwOID = Marshal.ReadInt32(pIn);
   pIn = (IntPtr)((int)pIn + cbInt);

   // String cFileName;
   pffd.cFileName = Marshal.PtrToStringUni(pIn);
  }

  // FindFirstFlashCard
  public static IntPtr FindFirstFlashCard (ref WIN32_FIND_DATA pffd)
  {
   IntPtr hFF = new IntPtr(INVALID_HANDLE_VALUE);

   // Allocate a block large enough for WIN32_FIND_DATA
   pFindData = LocalAlloc(LMEM_FIXED,560);
   if (pFindData == IntPtr.Zero)
    goto ErrorExit;

   hFF = YD_FindFirstFlashCard(pFindData);
   if (hFF.ToInt32() != INVALID_HANDLE_VALUE)
   {
    CopyIntPtr_to_WIN32_FIND_DATA(pFindData, ref pffd);
   }

   ErrorExit:          
    return hFF;
  }

  // FindNextFlashCard
  public static bool  FindNextFlashCard (IntPtr hFlashCard, ref WIN32_FIND_DATA pffd)
  {
   bool bRet = false;

   if (pFindData == IntPtr.Zero)
    goto ErrorExit;

   int bMore = YD_FindNextFlashCard(hFlashCard, pFindData);
   if (bMore != 0)
   {
    CopyIntPtr_to_WIN32_FIND_DATA(pFindData, ref pffd);
    bRet = true;
   }

   ErrorExit:          
    return bRet;
  }

  //FindClose
  public static bool FindClose (IntPtr hFindFile)
  {
   bool bRet = (YD_FindClose(hFindFile) != 0);

   // Free the memory we allocated.
   if (pFindData != IntPtr.Zero)
   {
    LocalFree(pFindData);
    pFindData = IntPtr.Zero;
   }
        
   return bRet;
  }

 }

 #endregion

 //调用实例

      IntPtr hffc = new IntPtr(EnumFlashCard.INVALID_HANDLE_VALUE);
      EnumFlashCard.WIN32_FIND_DATA wfd = new EnumFlashCard.WIN32_FIND_DATA();

      string firstcardname="";//手机内存卡名,可能为空
      string nextcardname="";//扩展卡名

      hffc = EnumFlashCard.FindFirstFlashCard (ref wfd);
      if(hffc.ToInt32() != EnumFlashCard.INVALID_HANDLE_VALUE)
       firstcardname=wfd.cFileName;

      if(EnumFlashCard.FindNextFlashCard(hffc, ref wfd))
       nextcardname=wfd.cFileName;

     //关闭非托管代码,释放内存
      if(hffc.ToInt32() != EnumFlashCard.INVALID_HANDLE_VALUE)
      {
       EnumFlashCard.FindClose(hffc);
       hffc = new IntPtr(EnumFlashCard.INVALID_HANDLE_VALUE);
      }

Windows Mobile WM 手机安装和删除软件 教程方法 新手必看

1、Windows Mobile手机如何安装软件Windows Mobile作为一个开放式的操作系统,在为我们提供了无限的扩展能力的同时,也让很多Windows Mobile手机用户对如何安装所需的软...

手机软件游戏安装方法(详细图文教程)-windows mobile系统PPC也通用

1、CAB格式3 M+ S5 c$ p; `# V- v" U" K1 y4 s$ a7 T* A$ e: {# ^* c “.cab”是PPC 上使用的一种安装程序 格式,类似PC上的.ex...

关于Windows Mobile手机视听电脑视音频的程序实现(一)

心情不好,突然想写博客了,嘿嘿!其实这一个程序是差不多一年前实现的,那时正好着手一个项目,同时后来也因为这一个项目买了一款多普达手机,呵呵!     这一个项目大概实现这么一个功能:电脑(服务器端)...

Windows mobile 下读取手机SIM卡信息

IMSI码、IMSI码、Windows mobile 下读取手机SIM卡信息2008年11月19日 星期三 10:34IMSI的全称是International Mobile Subscriber I...

Windows mobile 下读取手机SIM卡信息

IMSI码、IMSI码、Windows mobile下读取手机SIM卡信息 IMSI的全称是International Mobile Subscriber Identificatio...

Windows Mobile手机连接GPRS或者CDMA网络(用C# .NET开发)

我在进行手机应用程序客户端的SebService开发时,遇到了一个问题:程序始终不能从网络获得数据,而且提示无网络连接。原来程序要在连接网络后才能进行网络通信。于是我上google搜了一下,费了好大的...
  • nnsword
  • nnsword
  • 2011年08月22日 15:28
  • 988

Windows mobile 下读取手机SIM卡信息

Windows mobile 下读取手机SIM卡信息 收藏 最近在忙一个移动警务的项目,需要获取SIM卡的信息,来做身份的验证。考虑到获取:国际移动设备识别码(IMEI:International M...
  • qqxinxi
  • qqxinxi
  • 2011年05月03日 11:04
  • 492

Windows Mobile Test Framework实现手机软件自动化测试的介绍

摘要:本文就Windows Mobile Test Framework(WMTF)自动化测试做了比较详细的介绍,它介绍了WMTF的由来,获取,测试环境的搭建,以及如何创建软件自动化测试工程的Abstr...

Windows Mobile智能手机方便实用的电脑端控制软件PocketController

一直在用一个很方便的控制软件,自己懒得写教程了,就从口袋那里抄了一个过来,呵呵 下载地址百度一下吧,很多的,我给个:http://download.csdn.net/source/794564  ...

Windows Mobile手机连接GPRS或者CDMA网络(用C# .NET开发)

http://hi.baidu.com/csuhkx/item/c8a5b8cc2984ee25e80f2e1b   我在进行手机应用程序客户端的SebService开发时,遇到了一个问题:程序始...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows Mobile检索手机扩展卡
举报原因:
原因补充:

(最多只允许输入30个字)