天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 150|回复: 0

[每日一码] 实现磁盘驱动器相关(序列号等)信息返回给LISP使用

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-3-14 21:01:29 | 显示全部楼层 |阅读模式
    1. #include "StdAfx.h"
    2. #include "VolumeManagement.h"
    3. #pragma region //DriveTypeFlags
    4. struct // DriveType
    5. {
    6.   UINT type;                        // return code from GetDriveType
    7.   LPCTSTR name;                // ascii name
    8. }
    9. DriveTypeFlags [] =
    10. {
    11.   { DRIVE采用UNKNOWN,     采用T("Unknown") },
    12.   { DRIVE采用NO采用ROOT采用DIR, 采用T("Invalid path") },
    13.   { DRIVE采用REMOVABLE,   采用T("Removable") },
    14.   { DRIVE采用FIXED,       采用T("Fixed") },
    15.   { DRIVE采用REMOTE,      采用T("Network drive") },
    16.   { DRIVE采用CDROM,       采用T("CD-ROM") },
    17.   { DRIVE采用RAMDISK,     采用T("RAM disk") },
    18.   { 0, NULL}
    19. };
    20. #pragma endregion
    21. #pragma region //driveserialno
    22. //(crpdriveserialno "c")
    23. int DriveSerialNo(void)
    24. {
    25.   //Declare string variables
    26.   CString str;
    27.   struct resbuf *pArgs =acedGetArgs ();
    28.   if(pArgs == NULL)
    29.     str = 采用T("C");
    30.   else
    31.   {
    32.     if(pArgs->restype == RTSTR)
    33.       str = pArgs->resval.rstring;
    34.     else
    35.       str = 采用T("C");
    36.   }
    37.   str.Truncate(1);
    38.   str = str + 采用T(":\");
    39.   DWORD VolumeSerialNumber = 0;
    40.   GetVolumeInformation(str, NULL, 0, (DWORD *)&VolumeSerialNumber, NULL, NULL, NULL, 0 );
    41.   if (VolumeSerialNumber != 0)
    42.   {
    43.     TCHAR Result[10] = {0};
    44.     采用sntprintf(Result , sizeof(TCHAR)*10 , 采用T("%X") , VolumeSerialNumber );
    45.     acedRetStr(Result);
    46.   }
    47.   else
    48.     acedRetNil();
    49.   return (RSRSLT) ;
    50. }
    51. #pragma endregion
    52. #pragma region //filesystem
    53. //(crpfilesystem "c")
    54. int FileSystem(void)
    55. {
    56.   CString str;
    57.   struct resbuf *pArgs =acedGetArgs () ;
    58.   //get the resbuf from lisp, test validity
    59.   if(pArgs == NULL)
    60.     str = 采用T("C");
    61.   else
    62.   {
    63.     if(pArgs->restype == RTSTR)
    64.       str = pArgs->resval.rstring;
    65.     else
    66.       str = 采用T("C");
    67.   }
    68.   str.Truncate(1);
    69.   str = str + 采用T(":\");
    70.   TCHAR FileSystem[MAX采用PATH] = {0};
    71.   GetVolumeInformation(str, NULL, 0, NULL, NULL, NULL, FileSystem, sizeof(TCHAR)*MAX采用PATH);
    72.   if (采用tcsclen(FileSystem) != NULL)
    73.     acedRetStr(FileSystem);
    74.   else
    75.     acedRetNil();
    76.   return (RSRSLT) ;
    77. }
    78. #pragma endregion
    79. #pragma region //drivetype
    80. //(crpdrivetype "c")
    81. int DriveType(void)
    82. {
    83.   //
    84.   CString str;
    85.   CString DriveType;
    86.   //
    87.   struct resbuf *rb = NULL;
    88.   //
    89.   struct resbuf *pArgs =acedGetArgs () ;
    90.   if(pArgs == NULL)
    91.     str = 采用T("C");
    92.   else
    93.   {
    94.     if(pArgs->restype == RTSTR)
    95.       str = pArgs->resval.rstring;
    96.     else
    97.       str = 采用T("C");
    98.   };
    99.   //
    100.   str.Truncate(1);
    101.   str += 采用T(":\");
    102.   UINT uDriveType = GetDriveType(str);
    103.   for (int i=0; DriveTypeFlags<i>.name; i++)
    104.   {
    105.     if (uDriveType == DriveTypeFlags<i>.type)
    106.     {
    107.       DriveType = DriveTypeFlags<i>.name;
    108.       break;
    109.     }
    110.   }
    111.   //
    112.   if (!DriveType.IsEmpty())
    113.     acedRetStr(DriveType);
    114.   else
    115.     acedRetNil();
    116.   return (RSRSLT) ;
    117. }
    118. #pragma endregion
    119. #pragma region //drives
    120. //(crpdrives)
    121. int Drives(void)
    122. {
    123.   struct resbuf* pRbRet = acutNewRb(RTT);
    124.   struct resbuf* pRbTail;
    125.   pRbTail = pRbRet;
    126.   TCHAR szBuffer[1024] = {0};
    127.   GetLogicalDriveStrings(1024, szBuffer);
    128.   TCHAR *drv = szBuffer;
    129.   while (*drv)
    130.   {
    131.     pRbTail = pRbTail->rbnext = acutBuildList(RTSTR,drv,RTNONE);
    132.     drv = &drv[采用tcslen(drv) + 1];
    133.   }
    134.   acedRetList(pRbRet->rbnext);
    135.   acutRelRb(pRbRet);
    136.   return (RSRSLT) ;
    137. }
    138. #pragma endregion
    复制代码

     

     

     

     

    [每日一码] 实现磁盘驱动器相关(序列号等)信息返回给LISP使用
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 07:59 , Processed in 0.159447 second(s), 29 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表