首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在VBA中引用Windows便携设备文件有问题吗?

在VBA中引用Windows便携设备文件有问题吗?
EN

Stack Overflow用户
提问于 2016-08-30 01:41:55
回答 2查看 1.5K关注 0票数 2

我一直在不懈地寻找解决我的问题,但没有发现任何帮助!所以我希望这里有人能帮助我的具体情况..。提前感谢!

因此,我有一个条形码扫描仪,它将库存存储在其内部内存中,作为文本文件。通过使用6.1,我可以在我的PC上浏览扫描仪文件夹,打开文本文件,查看我扫描的项目。

我正在编写一个excel宏,它将打开文本文件,读取每一行清单,然后使用它做其他事情。到目前为止,如果我将扫描仪上的文本文件复制到“我的文档”这样的地方,我已经取得了成功。但是,我想让它变得简单,并且能够直接从扫描仪打开那个文本文件。

我的问题是引用到扫描仪的路径。因为它是一种便携式设备,所以它没有像C:之类的驱动器。相反,路径看起来像'Computer\MT2070-ML416147\Application\Inventory\export.txt'.然而,当我试图打开输入路径时,我会看到一个错误,上面写着“路径未找到”。

如果有人能帮忙,我会非常感激的!如果有人需要我所拥有的代码片段,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2016-08-30 02:03:43

无法通过Windows文件系统API访问附加的Windows设备的文件系统的内容,这是因为它们没有挂载卷。您的设备出现在Windows Explorer中,因为WMDC安装了Shell Namespace处理程序,该处理程序创建表示附加设备的shell文件夹--这与Control Panel和Network Place文件夹的工作方式相同,尽管它们也不是真正的文件系统目录。把它想象成Windows对文件系统抽象的挥手。

然而,并不是所有的东西都失去了,你有几种选择:

  1. 使用探索设备并从中获取数据文件:https://msdn.microsoft.com/en-us/library/bb384093.aspx --这与资源管理器在显示设备的shell文件夹时使用的API相同。
  2. 从设备中删除存储卷(例如SD卡),并将其插入计算机上的SD读卡器,这样您就可以直接浏览和操作文件系统。
  3. 编写在设备本身上运行的程序,将数据从设备推送到共享位置。

选项1将获得最好的结果,但可能需要在C++/Win32 32中对其进行编码。VBA不是进行系统编程的最佳环境。您可以始终使用C++编写,并将层公开为COM对象,然后您可以通过VBA使用该对象。尽管您会遇到32/64位Office的问题,而且可能也会遇到沙箱问题。

选项3将是稍微困难的,因为Windows的最后一个SDK是为Visual 2008发布的Windows版本--不支持最新版本的VS。这意味着对C++03 API使用贫血的CompactFramework3.5或WinCE。巧合的是,我认为这也是Windows在iPhone问世时注定失败的原因之一:环境被忽视了,其背后的环境也跟不上。

票数 3
EN

Stack Overflow用户

发布于 2016-08-30 09:18:02

检查您的设备是否可以通过Shell.Application ActiveX访问。下面是显示“打印机和传真”位置中所有项目的示例:

代码语言:javascript
复制
Sub Test()

    Set objShellApp = CreateObject("Shell.Application")
    Set objFolder = objShellApp.Namespace("::{2227a280-3aea-1069-a2de-08002b30309d}") ' Printers and Faxes

    Debug.Print "CLSID:" & vbCrLf & objFolder.Self.Path & vbCrLf
    Debug.Print "Folder name: " & vbCrLf & objFolder.Self.Name & vbCrLf
    For Each objItem In objFolder.Items()
        Debug.Print objItem.Name
    Next

End Sub

我的产出如下:

CLSID: *{2227A280-3AEA-1069-A2DE-08002B309D}文件夹名: 打印机传真 Microsoft XPS文档编写器 PDFCreator 发送至OneNote 2013年 -P 0086 on .-S 0002 -P 0087 on .-S 0002 -P 0049 on .-S 0002 -P 0068 on .-S 0002 -P 0067 on .-S 0002

尝试另一个CLSID,例如:

代码语言:javascript
复制
::{20D04FE0-3AEA-1069-A2D8-08002B30309D} - Computer
::{00f2886f-cd64-4fc9-8ec5-30ef6cdbe8c3} - Scanners and Cameras
::{fb0c9c8a-6c50-11d1-9f1d-0000f8757fcd} - Scanners and Cameras
::{e211b736-43fd-11d1-9efb-0000f8757fcd} - Scanners and Cameras
::{0c15d503-d017-47ce-9016-7b3f978721cc} - Portable Device Values
::{35786d3c-b075-49b9-88dd-029876e11c01} - Portable Devices

看看这里这里这里。如果在其中一个显示项中找到设备名称,那么显然可以从其中检索文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39217593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档