标签: wpd

在C#中枚举Windows便携设备

我试图使用Windows Portable Devices API和此API提供的PortableDeviceManager在Windows上枚举连接的便携式设备.

我已经在MSDN文档链接和各种博客链接之后实现了设备ID的枚举,但它们都导致了同样的问题 - 我只能在有几个连接的时候给我一个设备的ID .

这是我正在使用的C#代码片段:

PortableDeviceManagerClass deviceManager = new PortableDeviceManagerClass();
deviceManager.RefreshDeviceList();  

uint numberOfDevices = 1;            
deviceManager.GetDevices(null, ref numberOfDevices);

if (numberOfDevices == 0)
{
    return new string[0];
}

string [] deviceIds = new string[numberOfDevices];
deviceManager.GetDevices(ref deviceIds[0], ref numberOfDevices);

return deviceIds;
Run Code Online (Sandbox Code Playgroud)

我有两台设备连接到我的电脑,一台可拆卸USB记忆棒和一台数码相机.当两者都处于活动状态时,将仅返回我的相机的设备ID.当我关闭相机时,将返回可移动USB记忆棒的设备ID.

是否有任何有此API经验的人可以指出我做错的方向?

.net c# wpd

13
推荐指数
1
解决办法
2万
查看次数

WPD API检测设备是否是电话?

编辑:请求完整的源代码.下面是一个准系统实现,以便复制该错误.删除内容枚举,但无论如何崩溃都会在第一个对象调用上发生.在这种情况下,WPD_DEVICE_OBJECT_ID对象.

链接到CPP(Bug从第103行开始)

链接到QMAKE.PRO(我正在使用Qt)


在我的项目中,我使用WPD API来读取移动设备的内容.我遵循API到tee并成功实现了内容枚举.

但是,如果连接了USB驱动器,WPD API有时也会将其检测为设备.无论如何,我的程序将继续进行内容枚举.我不希望这样.我只想枚举移动设备.

问题是在内容枚举期间,当我的程序试图检索USB驱动器上的对象的属性时,它会崩溃.以下是崩溃详情:

Problem Event Name: BEX
Application Name:   UniversalMC.exe
Application Version:    0.0.0.0
Application Timestamp:  5906a8a3
Fault Module Name:  MSVCR100.dll
Fault Module Version:   10.0.40219.325
Fault Module Timestamp: 4df2be1e
Exception Offset:   0008af3e
Exception Code: c0000417
Exception Data: 00000000
OS Version: 6.1.7601.2.1.0.768.3
Locale ID:  1033
Additional Information 1:   185e
Additional Information 2:   185ef2beb7eb77a8e39d1dada57d0d11
Additional Information 3:   a852
Additional Information 4:   a85222a7fc0721be22726bd2ca6bc946
Run Code Online (Sandbox Code Playgroud)

此次调用发生崩溃:

hr = pObjectProperties->GetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, &objectName);
Run Code Online (Sandbox Code Playgroud)

hr 返回FAILED然后我的程序崩溃.

经过一些研究,我发现异常代码c0000417意味着发生了缓冲区溢出?如果我错了,请纠正我,但这是WPD …

c++ debugging exception buffer-overflow wpd

13
推荐指数
1
解决办法
433
查看次数

通过MTP C#/ VB.net将文件写入WPD设备

我想写一个将MP3文件复制到SanDisk Sansa M240的应用程序.SanDisk没有驱动器号并使用MTP进行文件传输.我偶然发现了连接到设备的示例:http://blogs.msdn.com/dimeby8/archive/2006/09/27/774259.aspx

但一旦连接,我无法弄清楚如何在设备上实际复制文件/创建文件夹.

我很惊讶这个COM库没有任何.Net包装器.

.net usb wpd

11
推荐指数
1
解决办法
9594
查看次数

WPD对象文件名在'.'处截断

在我的项目中,我使用Windows便携设备(WPD)API来枚举移动设备的内容.WPD API枚举指南.我能够枚举每个对象并查看其属性,如API编程指南中所示.WPD API属性指南

但是,当我尝试获取名称中包含对象名称的对象.名称时,返回的值将被截断.

HRESULT hr = objectProperties->GetStringValue(WPD_OBJECT_NAME, &strOriginalFileName);
if(FAILED(hr))
    return false;

PWSTR wideStr = strOriginalFileName;
char buffer[20];
wcstombs(buffer, wideStr, 20);

qDebug() << buffer;
Run Code Online (Sandbox Code Playgroud)

因此,例如,com.example返回名称为的对象(设备上的文件夹)com.当我试图在设备上找到特定的文件路径时,这成为一个明显的问题.

我似乎无法弄清楚出了什么问题.我误解了文件名实际上是怎么回事?对象example内是另一个属性还是其他东西com?我很困惑.

编辑:所以我使用WPD API示例软件来检索com.example对象的所有对象属性,您可以看到WPD本身无法获取完整的文件夹名称. 在此输入图像描述

谢谢你的时间!

c++ qt wpd mtp

11
推荐指数
1
解决办法
420
查看次数

包括Netbeans中的本地库

我正在尝试从java签名的applet中读取便携式设备....我在http://code.google.com/p/jmtp/w/list上找到了一个jmtp库 来访问便携式设备,但是当我运行它时netbeans它给出了错误

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no jmtp in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
        at java.lang.Runtime.loadLibrary0(Runtime.java:845)
        at java.lang.System.loadLibrary(System.java:1084)
        at jmtp.PortableDeviceManagerImplWin32.(PortableDeviceManagerImplWin32.java:38)
        at jmtp.PortableDeviceManager.(PortableDeviceManager.java:34)
        at jmtp.Jmtp.main(Jmtp.java:23)
    Java Result: 1
    

我搜索并发现我必须在.jmtp项目中包含.dll文件作为本机库...我右键单击项目并导航到属性,然后选择"运行"和选择的VM选项为

-Djava.library.path="c:\jmtp\native\windows"
并将该jmtp.dll文件放在c:\ jmtp文件夹中

但是我的代码不断出现同样的错误

    package jmtp;

import jmtp.PortableDevice;
import jmtp.PortableDeviceManager;
import jmtp.PortableDeviceObject;
import jmtp.PortableDeviceStorageObject;

public class Jmtp {

    public static void main(String[] args) {
        PortableDeviceManager manager = new PortableDeviceManager();
        PortableDevice device = manager.getDevices()[0]; 

        // Connect to my mp3-player
        device.open();
        System.out.println(device.getModel());
        System.out.println("---------------");

        // Iterate over deviceObjects
        for(PortableDeviceObject object : device.getRootObjects()) {

            // …
Run Code Online (Sandbox Code Playgroud)

java wpd netbeans-7 java.library.path unsatisfiedlinkerror

10
推荐指数
2
解决办法
3万
查看次数

从Windows C#Canon SDK与PTP或MTP对齐图片

我希望得到一些关于实现看似简单目标的一般指导.我有一个数码单反相机(佳能EOS 50D),需要编写一个应用程序,告诉相机拍照.我还需要将图片传输到计算机,并可能将其从相机的存储中删除.奖励将是在我的应用程序中从相机获得实时预览.我的环境将是Windows(XP Pro或Vista Enterprise)和.Net 3.5(C#).

我做了一些研究,发现了几个选择.我知道一个会工作,但限制我将来只使用佳能相机.我找到并从佳能下载了一个SDK,它提供了很多这方面的功能.我查看了SDK,虽然它很广泛并且用C语言编写,但它确实有C#包装器,可以加快开发速度.

我发现的另一个选项叫做Windows便携设备.显然,它是一个API,可以与实现PTP和MTP标准的设备进行通信.它是基于COM的,据我所知,它没有.Net包装器.然而,这不是一个节目塞子.我可以P/Invoke我需要的功能或编写托管C++ DLL在我的应用程序中使用与摄像头通信.

我正在寻找有WPD经验的人给我指点.我仔细阅读了文档并看到了传输图像和删除图像的参考.但是,我没有看到提取照片,获取预览图像或说焦点/自动对焦的命令.

c# camera automation wpd

8
推荐指数
1
解决办法
1万
查看次数

将文件从Android WPD设备传输到PC

我的Android应用程序生成一些文件,我需要与我的主PC程序同步,反之亦然.我这样做的常用方法是使用一个FTP帐户,我的Android应用程序和我的PC程序都获取最新版本的文件,这很好用.我的一些客户在他们的Android设备上没有互联网访问权限,因此必须通过USB电缆连接到PC来与我的程序同步.为此,我在我的电脑程序中的程序将在Android设备上的指定文件夹中的文件同步.问题是此方法仅在Android设备可以作为驱动器安装时才有效,因此可以通过Windows为其分配驱动器号.

某些设备,尤其是运行Honeycomb的平板电脑(我在三星Galaxy 10.1标签和联想Thinkpad平板电脑上经历过这种设备)不会作为驱动器安装,而是作为Windows便携设备(WPD)连接.在这种情况下,我无法从我的程序(用Delphi编写)访问设备,因此我的同步文件的例程不起作用.

我的例程必须知道要同步的文件夹的特定位置才能工作,所以如果我可以将文件从设备传输到PC上的临时文件夹,同步它们并可能将文件传回设备,这将解决我的问题.

任何人都可以建议一种方法,我可以将文件从WPD设备传输到我的PC上的文件夹,然后再返回?它必须自动化,因为我的客户端无法手动传输文件.或者,有没有办法强制WPD设备作为普通外部驱动器运行并分配驱动器号?

delphi android wpd

8
推荐指数
1
解决办法
4166
查看次数

如何获取CD/DVD驱动器上的文件更改通知?

我是C#的新手,必须在C#中开发Windows Form应用程序.此应用程序应跟踪以下内容.

  • 监控外部和内部的CD/DVD驱动器.
  • 监视在CD/DVD驱动器上创建,修改和删除的文件.

我可以RegisterNotification通过跟踪方法中的WM_DEVICECHANGE消息来获取CD/DVD驱动器插入的系统通知WndProc.

以上实现让我知道何时将新设备连接到PC.

我面临的问题是如何跟踪CD/DVD上发生的文件更改(写入/修改).一种选择是将CD/DVD中的文件轮询为后台作业.但是,这将是最后一个选择.

我发现IMAPI我们可以通过它写入CD/DVD但我只需要监视文件更改以进行审计.

请指点我如何在我的程序中接收CD/DVD通知上的文件更改?

我试过FileSystemWatcher但它似乎不适用于CD/DVD驱动器.

更新于2018年2月7日:

我能找到的另一种方法是通过WMI附加的查询WMI Events.我找到了一个Best way to detect dvd insertion in drive c#也可以得到答案的问题.我想知道在WMI中是否可以检测到DVD文件系统修改,以及是否有任何专家可以共享查询.我希望阿尔沙德能够在这方面提供帮助.

c# wmi wmi-query wpd imapi

8
推荐指数
1
解决办法
455
查看次数

WinAPI调用访问没有驱动器号的USB存储?

我注意到,有些USB存储设备没有在Windows中注册为常规驱动器,因为它们甚至没有分配驱动器号.因此,我无法使用标准文件操作C API显然访问它们.

我可以使用什么WinAPI调用在这些奇怪的设备上执行一些正常的文件操作 - 所以:

  • 查找/枚举这些设备,
  • 浏览设备上的文件/目录树并获取一些文件统计信息(大小,修改日期等),
  • 读/写文件内容,
  • 创建/删除文件/目录?

此外,已知/调用这些类型的设备/协议的一般关键字是什么?

windows winapi usb-drive wpd

7
推荐指数
2
解决办法
3767
查看次数

与Android设备的Windows MTP/WPD通信

我正在开发一个在Windows上运行的PC c ++应用程序.应用程序应使用MTP与通过USB连接的Android手机通信.该idée是不安装存储卡.我发现Windows有一些他们称之为支持MTP的WPD(Windows便携设备).它看起来还不错,但它要求安装WMP11.我想知道的是:

  • 您可以使用其他任何替代库吗?
  • 有没有人对使用WPD有任何提示或经验?
  • 是否有任何"更精简"的依赖项可以安装而不是WMP11 for xp?

任何帮助将不胜感激.

c++ windows usb wpd

6
推荐指数
1
解决办法
7036
查看次数