无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 11720|回复: 76
打印 上一主题 下一主题

[求助] 有没有显示磁盘类型的命令行工具?

  [复制链接]
跳转到指定楼层
1#
发表于 2020-11-10 14:55:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuzhaoyzz 于 2020-11-10 15:02 编辑

有没有显示磁盘类型的命令行工具?
遍历所有的盘符,并且显示出其磁盘类型,磁盘类型有:
GetDriveType函数#
GetDriveType函数用于判断一个磁盘驱动器的类型。
函数声明如下

UINT WINAPI GetDriveType(

  _In_opt_ LPCTSTR lpRootPathName

);
参数lpRootPathName包含了根目录路径的字符串指针。
如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型
[td]
常数                          含义
DRIVE_UNKNOWN  未知的磁盘类型
DRIVE_NO_ROOT_DIR  说明lpRootPathName是无效的
DRIVE_REMOVABLE  可移动磁盘
DRIVE_FIXED  固定磁盘
DRIVE_REMOTE  网络磁盘
DRIVE_CDROM  光驱
DRIVE_RAMDISK  RAM映射磁盘

C++ 如何判断一个驱动卷是本地硬盘,还是USB接入的移动硬盘?
电脑机子上本来有C,D,E,F 四个盘,当USB接入一个移动硬盘后会增加 H ,I两个盘,我用GetDriveType()来获取各个盘的类型时,则得到返回值都是DRIVE_FIXED,无法区分这六个盘的类型。有什么办法可以区分H ,I盘属于USB接入的移动硬盘?我查了MSDN很久也无法解决,有人提出系统分区数+驱动卷判断,这个方法看似可行,然而我却不懂获取磁盘的分区表,请高手赐教。

有没有用c++或者pecmd之类写好的现成的,小巧的命令行工具?


2#
发表于 2020-11-10 15:33:10 | 只看该作者
百草的fbinstplus不是可以列出usb磁盘吗

点评

【Fbinst Plus V1.5.1703.13】Fbinst增强版,2017年重大更新 - USB启动区 - 无忧启动论坛 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=187865 果然是可以! --hdlist: 获取磁盘列表功能  详情 回复 发表于 2020-11-10 16:15
回复

使用道具 举报

3#
发表于 2020-11-10 15:36:41 | 只看该作者
  1. CALL $--ret:&&GetDriveTypeWRet Kernel32.dll,GetDriveTypeW,#0
  2. MESS. %&&GetDriveTypeWRet%
复制代码




lpRootPathName为空,A trailing backslash is required. If this parameter is NULL, the function uses the root of the current directory.
lpRootPathName怎么表示C:盘,不太明白

点评

你给的这段代码,怎么显示所有盘符?#0表示0号分区吗? 我在csdn上面还看到个例子:VC下获取各个驱动器路径,分类及其获取其信息的资料整理  详情 回复 发表于 2020-11-10 16:03
回复

使用道具 举报

4#
 楼主| 发表于 2020-11-10 16:03:57 | 只看该作者
红毛樱木 发表于 2020-11-10 15:36
lpRootPathName为空,A trailing backslash is required. If this parameter is NULL, the functio ...

        你给的这段代码,怎么显示所有盘符?#0表示0号分区吗?

我在csdn上面还看到个例子:
VC下获取各个驱动器路径,分类及其获取其信息的资料整理

点评

#0是PECMD里的NULL 我试着用 CALL $--ret:&&GetDriveTypeWRet Kernel32.dll,GetDriveTypeW,$C:// 不行,不知道怎么传盘符到这个里面,可能格式不对  详情 回复 发表于 2020-11-10 16:09
回复

使用道具 举报

5#
发表于 2020-11-10 16:09:56 | 只看该作者
liuzhaoyzz 发表于 2020-11-10 16:03
你给的这段代码,怎么显示所有盘符?#0表示0号分区吗?

我在csdn上面还看到个例子:VC下获取 ...
  1. CALL $--ret:&&GetDriveTypeWRet Kernel32.dll,GetDriveTypeW,#0
复制代码

#0是PECMD里的NULL

我试着用
CALL $--ret:&&GetDriveTypeWRet Kernel32.dll,GetDriveTypeW,$C://
不行,不知道怎么传盘符到这个里面,可能格式不对
回复

使用道具 举报

6#
发表于 2020-11-10 16:14:19 | 只看该作者
本帖最后由 CodeHz 于 2020-11-10 16:17 编辑

简单用c整了一个
  1. #include <windows.h>
  2. #include <stdio.h>

  3. char fetchbit(int mask, int idx) {
  4.         return mask & (1 << idx) ? 'A' + idx : 0;
  5. }

  6. char *showtype(int res) {
  7.         switch (res) {
  8. #define X(x) case DRIVE_##x: return #x
  9.                 X(UNKNOWN);
  10.                 X(NO_ROOT_DIR);
  11.                 X(REMOVABLE);
  12.                 X(FIXED);
  13.                 X(REMOTE);
  14.                 X(CDROM);
  15.                 X(RAMDISK);
  16. #undef X
  17.                 default: return "ERROR";
  18.         }
  19. }

  20. int main() {
  21.         int mask = GetLogicalDrives();
  22.         char buf[] = "?:\";
  23.         for (int i = 0; i < 26; i++) {
  24.                 char c = fetchbit(mask, i);
  25.                 if (!c) continue;
  26.                 buf[0] = c;
  27.                 char *type = showtype(GetDriveType(buf));
  28.                 printf("%c:\\ -> %s\n", c, type);
  29.         }
  30. }
复制代码
可以用我的tjs来调用或者编译它(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=422705
直接运行:
  1. <div>import { Compiler } from "builtin:c"</div><div>const compiler = new Compiler("memory");</div><div>compiler.link("kernel32");</div><div>compiler.compile(String.raw`
  2. <就上面那段C>
  3. `);
  4. compiler.run();</div>
复制代码


编译:
  1. <div>import { Compiler } from "builtin:c"</div><div>const compiler = new Compiler("exe");</div><div>compiler.link("kernel32");</div><div>compiler.compile(String.raw`
  2. <就上面那段C>
  3. `);
  4. compiler.output("listdrive.exe");</div>
复制代码
附带一个编译好的
test.exe (3.5 KB, 下载次数: 13)

点评

这个还需要进一步区分移动硬盘和固定硬盘才行啊。现在没有区分开来。  详情 回复 发表于 2020-11-10 16:24
回复

使用道具 举报

7#
 楼主| 发表于 2020-11-10 16:15:30 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-11-10 16:36 编辑
江南一根葱 发表于 2020-11-10 15:33
百草的fbinstplus不是可以列出usb磁盘吗

【Fbinst Plus V1.5.1703.13】Fbinst增强版,2017年重大更新 - USB启动区 - 无忧启动论坛
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=187865

果然是可以!多谢!

--hdlist: 获取磁盘列表功能
            fbinst --hdlist [输出格式] [磁盘类型] [是否是移动磁盘] [--UD]
            fbinst --hdlist          默认格式获取所有磁盘列表
            fbinst --hdlist  ""     默认格式获取所有磁盘列表

            fbinst --hdlist "(hd%N) %T_%R_%I (%P) %Sg %U"      按指定格式输出磁盘列表
                      得到类似结果:(hd1) SATA_FIXED_WDC-WD5000AAKX-001CA0 (C: D: E: L: ) 466 G
                                   其中:%N      表示磁盘号 (特别注意,命令行下直接输命令是%N,批处理中是%%N,下同)
                                             %T      表示磁盘类型,具体类型稍候给出
                                             %R      表示是否是移动磁盘,是显示为REMOVABLE,否则显示为固定磁盘FIXED
                                             %I       表示磁盘型号(ID),例如WDC-WD5000AAKX-001CA0
                                             %P      表示包含的分区
                                             %S      表示磁盘大小,单位G,小于1G的统一显示为0G
                                             %U      标识磁盘是否为ud盘,是ud盘标识为*号,不是为空。
                      不需要每次都显示所有项目,可以选择需要的项目显示,例如 fbinst --hdlist "(hd%N): %Sg"
           fbinst --hdlist "(hd%N): %Sg %U"  --USB --FIXED      按规定格式输出磁盘类型为USB的固定磁盘
           fbinst --hdlist ""  --USB                                               USB磁盘列表
           fbinst --hdlist "(hd%N): %Sg" --USB --REMOVABLE    U盘列表
           fbinst --hdlist "(hd%N): %Sg" --USB --FIXED              移动硬盘列表
           fbinst --hdlist "(hd%N): %Sg" --SATA                        SATA磁盘列表
           fbinst --hdlist "(hd%N): %Sg" --ALL --FIXED              所有硬盘列表(注意磁盘和硬盘的区别)
           fbinst --hdlist "(hd%N): %U" --ALL --ALL --UD           所有ud盘列表
           fbinst --hdlist "(hd%N): %U" --ALL --REMOVABLEL --UD    所有UD格式的U盘列表



如果用到 [磁盘类型] 参数,那么前面的 [输出格式]不可以省略,但可以为""
如果用到[是否是移动磁盘],那么前面的两个参数都不可以省略,[输出格式]可以为"",磁盘类型可以为--ALL

磁盘类型:(相应的参数为 --类型)
                 "Unknown","SCSI","Atapi","Ata","1394","Ssa","Fibre","USB","RAID","iSCSI",
                 "SAS","SATA","SD","MMC","Virtual","FileBackedVirtual","Max","MaxReserved"

QQ截图20201110163625.jpg (30.96 KB, 下载次数: 163)

QQ截图20201110163625.jpg

评分

参与人数 1无忧币 +3 收起 理由
holley2008 + 3 赞一个!

查看全部评分

回复

使用道具 举报

8#
 楼主| 发表于 2020-11-10 16:24:18 | 只看该作者
CodeHz 发表于 2020-11-10 16:14
简单用c整了一个
可以用我的tjs来调用或者编译它(http://bbs.wuyou.net/forum.php?mod=viewthread&tid=42 ...

这个还需要进一步区分移动硬盘和固定硬盘才行啊。现在没有区分开来。

QQ截图20201110162208.jpg (16.53 KB, 下载次数: 157)

QQ截图20201110162208.jpg

点评

大概这个可以检测了(  详情 回复 发表于 2020-11-10 16:39
回复

使用道具 举报

9#
发表于 2020-11-10 16:39:59 | 只看该作者
liuzhaoyzz 发表于 2020-11-10 16:24
这个还需要进一步区分移动硬盘和固定硬盘才行啊。现在没有区分开来。

test.exe (4 KB, 下载次数: 17) 大概这个可以检测了(

点评

大神就是大神!果然可以了!感谢!  详情 回复 发表于 2020-11-10 16:43
回复

使用道具 举报

10#
 楼主| 发表于 2020-11-10 16:43:36 | 只看该作者
CodeHz 发表于 2020-11-10 16:39
大概这个可以检测了(

大神就是大神!果然可以了!感谢!请把源代码传上来,谢谢!

QQ截图20201110164301.jpg (26.82 KB, 下载次数: 164)

QQ截图20201110164301.jpg
回复

使用道具 举报

11#
发表于 2020-11-10 16:47:12 | 只看该作者
本帖最后由 CodeHz 于 2020-11-10 16:53 编辑
  1. #include <windows.h>
  2. #include <stdio.h>

  3. char fetchbit(int mask, int idx) {
  4.         return mask & (1 << idx) ? 'A' + idx : 0;
  5. }

  6. char *showtype(int res) {
  7.         switch (res) {
  8. #define X(x) case DRIVE_##x: return #x
  9.                 X(UNKNOWN);
  10.                 X(NO_ROOT_DIR);
  11.                 X(REMOVABLE);
  12.                 X(FIXED);
  13.                 X(REMOTE);
  14.                 X(CDROM);
  15.                 X(RAMDISK);
  16. #undef X
  17.                 default: return "ERROR";
  18.         }
  19. }

  20. char *busType(char c) {
  21.         char volumeAccessPath[] = "\\\\.\\?:";
  22.         volumeAccessPath[4] = c;
  23.         HANDLE deviceHandle = CreateFileA(
  24.                 volumeAccessPath,
  25.                 0,
  26.                 FILE_SHARE_READ | FILE_SHARE_WRITE,
  27.                 NULL,
  28.                 OPEN_EXISTING,
  29.                 0,
  30.                 NULL
  31.         );
  32.         STORAGE_PROPERTY_QUERY query = {};
  33.         query.PropertyId = StorageDeviceProperty;
  34.         query.QueryType = PropertyStandardQuery;
  35.         
  36.         DWORD bytes;
  37.         STORAGE_DEVICE_DESCRIPTOR devd;
  38.         STORAGE_BUS_TYPE busType = BusTypeUnknown;
  39.         
  40.         if (DeviceIoControl(deviceHandle, IOCTL_STORAGE_QUERY_PROPERTY, &query, sizeof(query), &devd, sizeof(devd), &bytes, NULL)) {
  41.                 busType = devd.BusType;
  42.         } else {
  43.                 return "UNKNOWN";
  44.         }
  45.         
  46.         CloseHandle(deviceHandle);
  47.         switch (busType) {
  48. #define X(v, a) case v: return #a
  49.                 X(0x1, SCSI);
  50.                 X(0x2, ATAPI);
  51.                 X(0x3, ATA);
  52.                 X(0x4, 1394);
  53.                 X(0x5, SSA);
  54.                 X(0x6, FIBRE);
  55.                 X(0x7, USB);
  56.                 X(0x8, RAID);
  57.                 X(0x9, iSCSI);
  58.                 X(0xA, SAS);
  59.                 X(0xB, SATA);
  60.                 X(0xC, SD);
  61.                 X(0xD, MMC);
  62.                 X(0xE, VIRTUAL);
  63.                 X(0xF, FILE_BACKED_VIRTUAL);
  64.                 X(0x10, SPACES);
  65. #undef X
  66.                 default: return "UNKNOWN";
  67.         }
  68. }

  69. int main() {
  70.         int mask = GetLogicalDrives();
  71.         char buf[] = "?:\";
  72.         for (int i = 0; i < 26; i++) {
  73.                 char c = fetchbit(mask, i);
  74.                 if (!c) continue;
  75.                 buf[0] = c;
  76.                 char *type = showtype(GetDriveType(buf));
  77.                 char *usb = busType(c);
  78.                 printf("%c:\\ -> %s %s\n", c, type, usb);
  79.         }
  80. }
复制代码
源码在这里,顺便改进了下,把更多的细节属性都暴露了 test.exe (4.5 KB, 下载次数: 27)


评分

参与人数 1无忧币 +10 收起 理由
liuzhaoyzz + 10 很给力!

查看全部评分

回复

使用道具 举报

12#
发表于 2020-11-10 17:00:40 | 只看该作者
原来你是要这种效果 - -

  1. FORM ,&BUSNAME=C:
  2. MESS. %&BUSNAME%
复制代码




总线类型 BusTypeUnknown = 0   BusTypeScsi=1, BusTypeAtapi, BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID, BusTypeiScsi, BusTypeSas, BusTypeSata, BusTypeSd, BusTypeMmc, BusTypeVirtual,BusTypeFileBackedVirtual,BusTypeSpaces,BusTypeNvme,BusTypeSCM,BusTypeUfs,BusTypeMax,BusTypeMaxReserved

点评

不能遍历所有盘符,然后显示具体类型吗?  详情 回复 发表于 2020-11-10 17:04
回复

使用道具 举报

13#
 楼主| 发表于 2020-11-10 17:04:13 | 只看该作者
红毛樱木 发表于 2020-11-10 17:00
原来你是要这种效果 - -

不能遍历所有盘符,然后显示具体类型吗?

点评

自己再套代码呀。要搞全套吗?  详情 回复 发表于 2020-11-10 17:06
回复

使用道具 举报

14#
 楼主| 发表于 2020-11-10 17:05:58 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-11-10 17:07 编辑
CodeHz 发表于 2020-11-10 16:47
源码在这里,顺便改进了下,把更多的细节属性都暴露了

这个显示效果更好了,更加便于过滤!高手在民间啊!

QQ截图20201110170521.jpg (21.65 KB, 下载次数: 157)

QQ截图20201110170521.jpg
回复

使用道具 举报

15#
发表于 2020-11-10 17:06:33 | 只看该作者
liuzhaoyzz 发表于 2020-11-10 17:04
不能遍历所有盘符,然后显示具体类型吗?

自己再套代码呀。要搞全套吗?

点评

我是pecmd白痴啊  详情 回复 发表于 2020-11-10 17:06
回复

使用道具 举报

16#
 楼主| 发表于 2020-11-10 17:06:53 | 只看该作者
红毛樱木 发表于 2020-11-10 17:06
自己再套代码呀。要搞全套吗?

我是pecmd白痴啊,楼上的两个方案都能够达到目的。
回复

使用道具 举报

17#
发表于 2020-11-10 17:15:11 | 只看该作者
  1. ENVI^ EnviMode=1
  2. ENVI$ &NL=0d 0a
  3. ENVI$ &TAB=09
  4. ENVI &AllInfos=
  5. FDRV &AllDrvs=*:
  6. FORX *v &AllDrvs,&Drv,
  7. {*
  8.     FORM ,&BUSNAME=%&Drv%
  9.     CALL Translation_STORAGE_BUS_TYPE %&BUSNAME% &BUSNAMEType
  10.     ENVI< &ALLInfos=%&Drv%%&TAB%%&&BUSNAMEType%%&NL%
  11. }
  12. MESS. %&ALLInfos%

  13. _SUB Translation_STORAGE_BUS_TYPE
  14.     ^IFEX $%1=0, TEAM ENVI-ret %2=Unknown| EXIT _SUB
  15.     ^IFEX $%1=1, TEAM ENVI-ret %2=Scsi| EXIT _SUB
  16.     ^IFEX $%1=2, TEAM ENVI-ret %2=Atapi| EXIT _SUB
  17.     ^IFEX $%1=3, TEAM ENVI-ret %2=Ata| EXIT _SUB
  18.     ^IFEX $%1=4, TEAM ENVI-ret %2=1394| EXIT _SUB
  19.     ^IFEX $%1=5, TEAM ENVI-ret %2=Ssa| EXIT _SUB
  20.     ^IFEX $%1=6, TEAM ENVI-ret %2=Fibre| EXIT _SUB
  21.     ^IFEX $%1=7, TEAM ENVI-ret %2=Usb| EXIT _SUB
  22.     ^IFEX $%1=8, TEAM ENVI-ret %2=RAID| EXIT _SUB
  23.     ^IFEX $%1=9, TEAM ENVI-ret %2=iScsi| EXIT _SUB
  24.     ^IFEX $%1=10, TEAM ENVI-ret %2=Sas| EXIT _SUB
  25.     ^IFEX $%1=11, TEAM ENVI-ret %2=Sata| EXIT _SUB
  26.     ^IFEX $%1=12, TEAM ENVI-ret %2=Sd| EXIT _SUB
  27.     ^IFEX $%1=13, TEAM ENVI-ret %2=Mmc| EXIT _SUB
  28.     ^IFEX $%1=14, TEAM ENVI-ret %2=Virtual| EXIT _SUB
  29.     ^IFEX $%1=15, TEAM ENVI-ret %2=FileBackedVirtual| EXIT _SUB
  30.     ^IFEX $%1=16, TEAM ENVI-ret %2=Spaces| EXIT _SUB
  31.     ^IFEX $%1=17, TEAM ENVI-ret %2=Nvme| EXIT _SUB
  32.     ^IFEX $%1=18, TEAM ENVI-ret %2=SCM| EXIT _SUB
  33.     ^IFEX $%1=19, TEAM ENVI-ret %2=Ufs| EXIT _SUB
  34.     ^IFEX $%1=20, TEAM ENVI-ret %2=Max| EXIT _SUB
  35.     ^IFEX $%1=0x7F, TEAM ENVI-ret %2=MaxReserved| EXIT _SUB
  36. _END
复制代码
B站直播间地址:https://live.bilibili.com/22611892
B站帐号:系统总裁官方帐号
每天下午不定时直播,固定直播时间每周五晚八点
欢迎各位PECMD开发爱好者一起交流学习

点评

代码准确,谢谢!  详情 回复 发表于 2020-11-11 08:19
支持推广PECMD  详情 回复 发表于 2020-11-10 17:52
回复

使用道具 举报

18#
发表于 2020-11-10 17:52:34 | 只看该作者
红毛樱木 发表于 2020-11-10 17:15
B站直播间地址:https://live.bilibili.com/22611892
B站帐号:系统总裁官方帐号
每天下午不定时直播,固 ...

支持推广PECMD
回复

使用道具 举报

19#
发表于 2020-11-10 18:07:58 | 只看该作者
本帖最后由 9zhmke 于 2020-11-10 18:25 编辑

VBS也很简单,把里面查硬盘的DriveType从多换成1就是U盘了。

  1. Set colDrives = CreateObject("Scripting.FileSystemObject").Drives
  2. For Each objDrive in colDrives
  3.    if objDrive.DriveType=2 then '0:"未知"/1:"可移动"/2:"固定"/3:"网络"/4:"CD-ROM"/5:"RAM 磁盘"
  4.                 msgbox objDrive.DriveLetter
  5.    end if
  6. Next
复制代码


disk.7z (333 Bytes, 下载次数: 4)
如果想直接写到批处理中,这样写可以直接列出磁盘列表,前面是类型,后面字母是盘号:

  1. mshta VBScript:Execute("For Each objDrive in CreateObject(""Scripting.FileSystemObject"").Drives:msgbox objDrive.DriveType&objDrive.DriveLetter:Next:close")
复制代码

点评

VBS适用性不太好,有的PE里面没有。  详情 回复 发表于 2020-11-11 08:20
回复

使用道具 举报

20#
发表于 2020-11-10 21:15:38 | 只看该作者
本帖最后由 slore 于 2020-11-10 21:18 编辑

https://github.com/stevedonovan/ ... irectory-operations

  1. drives = winapi.get_logical_drives()
  2. for _, drive in ipairs(drives) do
  3.     print(drive .. '  ' .. winapi.get_drive_type(drive))
  4. end
复制代码





  1. C:\  fixed
  2. D:\  fixed
  3. E:\  fixed
  4. F:\  fixed
  5. H:\  cdrom
  6. I:\  cdrom
  7. K:\  removable
  8. Z:\  fixed
复制代码


lua可以自由扩展C函数,API, 封装。

https://github.com/stevedonovan/winapi/blob/master/winapi.c#L2228
回复

使用道具 举报

21#
发表于 2020-11-10 21:57:38 | 只看该作者
fbinst
回复

使用道具 举报

22#
 楼主| 发表于 2020-11-11 08:19:39 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-11-11 17:09 编辑
红毛樱木 发表于 2020-11-10 17:15
B站直播间地址:https://live.bilibili.com/22611892
B站帐号:系统总裁官方帐号
每天下午不定时直播,固 ...

代码准确,谢谢!

另外想问下,怎么搞成命令行的?

QQ截图20201111081727.jpg (6.38 KB, 下载次数: 153)

QQ截图20201111081727.jpg
回复

使用道具 举报

23#
 楼主| 发表于 2020-11-11 08:20:09 | 只看该作者
9zhmke 发表于 2020-11-10 18:07
VBS也很简单,把里面查硬盘的DriveType从多换成1就是U盘了。

VBS适用性不太好,有的PE里面没有。
回复

使用道具 举报

24#
 楼主| 发表于 2020-11-11 17:06:22 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-11-11 17:08 编辑

没有看明白,lua环境是怎么调用的?winapi怎么用?怎么运行?github上面,我没有看到release版本的exe文件啊?
回复

使用道具 举报

25#
发表于 2020-11-11 21:40:15 | 只看该作者
liuzhaoyzz 发表于 2020-11-11 17:06
没有看明白,lua环境是怎么调用的?winapi怎么用?怎么运行?github上面,我没 ...

>github上面,我没有看到release版本的exe文件啊?

github上面,通常要自己编译为 EXE.
回复

使用道具 举报

26#
发表于 2020-11-11 23:18:46 | 只看该作者
liuzhaoyzz 发表于 2020-11-11 17:06
没有看明白,lua环境是怎么调用的?winapi怎么用?怎么运行?github上面,我没 ...

lua.exe你可以从

https://sourceforge.net/projects/luabinaries/files/5.4.0/Tools%20Executables/

下载。

winpai.dll需要自己编译。。。

WinXShell.exe已经把lua和winapi.dll编译了,上面的代码可以 -script xxx.lua 执行,
但是WinXShell.exe是Windows程序,输出外部程序捕获不到,
lua中写文件,或者lua代码处理都可以。

给你个附件,你双击运行就可以了。

lua_winapi.7z (1.79 MB, 下载次数: 14)

最新版是5.4,但是我的winapi.dll是当时5.3版本,所以需要5.3的lua.exe
回复

使用道具 举报

27#
 楼主| 发表于 2020-11-12 07:25:49 | 只看该作者
本帖最后由 liuzhaoyzz 于 2020-11-12 08:22 编辑

代码还需要改进下,没有把本地硬盘和移动硬盘区分开来,都显示的是fixed。
complate拼写应该是complete吧。

QQ拼音截图20201112072447.png (9.56 KB, 下载次数: 158)

QQ拼音截图20201112072447.png

点评

complete是批处理(lua脚本)里面的,随便改不用编译。就是个例子可以写个Windows API的库封装,用脚本调用。做小工具比较方便。lua和lib是C语言,集成到任何程序都很容易,体积也不增加多少。 因为是C语言,只需要  详情 回复 发表于 2020-11-12 09:47
回复

使用道具 举报

28#
 楼主| 发表于 2020-11-12 07:27:38 | 只看该作者
plusv 发表于 2020-11-11 21:40
>github上面,我没有看到release版本的exe文件啊?

github上面,通常要自己编译为 EXE.

有时候搭建编译环境挺麻烦的,不同的Visual studio版本什么的。有时候出错挺麻烦。

点评

这也是我整tjs的一个目的,目前可以算是半个c语言开发环境了(当然兼容现有项目不是我的目标,这个整下去没完)  详情 回复 发表于 2020-11-12 08:40
说的没错. 通常 非必要 或 非常喜欢那个程序 我也是懒的去编译, 我的 10 余年老 PC 不给力这样大工程,老 PC 会归西.  详情 回复 发表于 2020-11-12 08:16
回复

使用道具 举报

29#
发表于 2020-11-12 08:16:38 | 只看该作者
liuzhaoyzz 发表于 2020-11-12 07:27
有时候搭建编译环境挺麻烦的,不同的Visual studio版本什么的。有时候出错挺麻烦。

说的没错.
通常 非必要 或 非常喜欢那个程序 我也是懒的去编译,
我的 10 余年老 PC 不给力这样大工程,老 PC 会归西.

回复

使用道具 举报

30#
发表于 2020-11-12 08:40:38 来自手机 | 只看该作者
liuzhaoyzz 发表于 2020-11-12 07:27
有时候搭建编译环境挺麻烦的,不同的Visual studio版本什么的。有时候出错挺麻烦。

这也是我整tjs的一个目的,目前可以算是半个c语言开发环境了(当然兼容现有项目不是我的目标,这个整下去没完)

点评

不明觉厉!  详情 回复 发表于 2020-11-12 09:00
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-5 08:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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