⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumflash.cs

📁 windows mobile 开发实例wi ndows mobile 开发实例
💻 CS
字号:
// EnumFlash.cs - Enumeration of flash memory cards
//
// Code from _Programming the .NET Compact Framework with C#_
// and _Programming the .NET Compact Framework with VB_
// (c) Copyright 2002-2004 Paul Yao and David Durant. 
// All rights reserved.

using System;
using System.Runtime.InteropServices;

namespace FindMemoryCard
{
   /// <summary>
   /// Summary description for EnumFlashCards.
   /// </summary>
   public class EnumFlash
   {
      public EnumFlash()
      {
         //
         // 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);
      }

      //--------------------------------------------------------
      //--------------------------------------------------------
      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;
      } // FindFirstFlashCard

      //--------------------------------------------------------
      //--------------------------------------------------------
      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;
      } // FindNextFlashCard

      //--------------------------------------------------------
      //--------------------------------------------------------
      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;
      } // FindClose

   } // class
} // namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -