Files @ 65c134a3d619
Branch filter:

Location: seniordesign-ui/GMap.NET.WindowsMobile/GMap.NET.Internals/Native.cs - annotation

mkanning@CL-ENS241-10.cedarville.edu
Initial import of mapping source (huge commit)

namespace GMap.NET.Internals
{
   using System;
   using System.Runtime.InteropServices;

   public class Native
   {
      static readonly IntPtr INVALID_HANDLE_VALUE = (IntPtr) (-1);

      // The CharSet must match the CharSet of the corresponding PInvoke signature
      [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
      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;
         [MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]
         public string cFileName;
         [MarshalAs(UnmanagedType.ByValTStr, SizeConst=14)]
         public string cAlternateFileName;
      }

      [StructLayout(LayoutKind.Sequential)]
      struct FILETIME
      {
         public int dwLowDateTime;
         public int dwHighDateTime;
      };

      [DllImport("note_prj", EntryPoint="FindFirstFlashCard")]
      extern static IntPtr FindFirstFlashCard(ref WIN32_FIND_DATA findData);

      [DllImport("note_prj", EntryPoint="FindNextFlashCard")]
      [return: MarshalAs(UnmanagedType.Bool)]
      extern static bool FindNextFlashCard(IntPtr hFlashCard, ref WIN32_FIND_DATA findData);

      [DllImport("coredll")]
      static extern bool FindClose(IntPtr hFindFile);

      public static string GetRemovableStorageDirectory()
      {
         string removableStorageDirectory = null;
         IntPtr handle = IntPtr.Zero;
         try
         {
            WIN32_FIND_DATA findData = new WIN32_FIND_DATA();

            handle = FindFirstFlashCard(ref findData);

            if(handle != INVALID_HANDLE_VALUE)
            {
               do
               {
                  if(!string.IsNullOrEmpty(findData.cFileName))
                  {
                     removableStorageDirectory = findData.cFileName;
                     break;
                  }
               }
               while(FindNextFlashCard(handle, ref findData));
            }
         }
         catch
         {
            removableStorageDirectory = null;
         }
         finally
         {
            if(handle != INVALID_HANDLE_VALUE)
            {
               FindClose(handle);
            }
         }
         return removableStorageDirectory;
      }

      [DllImport("coredll.dll")]
      public static extern int ShowWindow(IntPtr hWnd, int nCmdShow);

      public const int SW_MINIMIZED = 6;

      public const int PPN_UNATTENDEDMODE = 0x0003;
      public const int POWER_NAME = 0x00000001;
      public const int POWER_FORCE = 0x00001000;

      [DllImport("coredll.dll")]
      public static extern bool PowerPolicyNotify(int dwMessage, bool dwData);

      [DllImport("coredll.dll", SetLastError=true)]
      public static extern IntPtr SetPowerRequirement(string pvDevice, CedevicePowerStateState deviceState, uint deviceFlags, string pvSystemState, ulong stateFlags);

      [DllImport("coredll.dll", SetLastError=true)]
      public static extern int ReleasePowerRequirement(IntPtr hPowerReq);

      public enum CedevicePowerStateState : int
      {
         PwrDeviceUnspecified=-1,
         D0=0,
         D1,
         D2,
         D3,
         D4,
      }

      [DllImport("coredll")]
      public static extern void SystemIdleTimerReset();
   }
}