2016-08-30 6 views
1

J'ai été sans cesse à la recherche d'une solution à mon problème, mais je n'ai rien trouvé d'utile !! Donc j'espère que quelqu'un ici pourra aider ma situation spécifique ... Merci d'avance! J'ai donc un scanner de codes à barres qui stocke l'inventaire dans sa mémoire interne en tant que fichier texte. Grâce à Windows Mobile Device Center 6.1, je suis capable, sur mon PC, de naviguer dans les dossiers des scanners et d'ouvrir ce fichier texte pour voir les éléments que j'ai scannés. J'écris une macro Excel qui va ouvrir ce fichier texte, lire chaque ligne de l'inventaire, puis faire d'autres choses avec elle. J'ai réussi jusqu'à présent si je copiais ce fichier texte sur le scanner dans des endroits comme 'Mes documents'. Cependant, je veux le rendre facile et être capable d'ouvrir ce fichier texte directement à partir du scanner.problème référençant les fichiers Windows Portable Device dans VBA?

Mon problème est de référencer le chemin vers le scanner. Parce que c'est un appareil portable, il n'a pas de lecteur comme C: ou quelque chose. Au lieu de cela, le chemin ressemble à 'Computer \ MT2070-ML416147 \ Application \ Inventory \ export.txt'. Cependant quand j'essaye d'ouvrir ce chemin pour l'entrée j'obtiens une erreur disant "le chemin non trouvé".

Si quelqu'un peut aider je serais très reconnaissant !! Si quelqu'un nécessite des extraits de code de ce que j'ai, s'il vous plaît faites le moi savoir.

Répondre

2

Il n'existe aucun moyen d'accéder au contenu du système de fichiers du périphérique Windows CE connecté via l'API du système de fichiers Windows, car il ne s'agit pas de volumes montés. Votre appareil apparaît dans l'Explorateur Windows car WMDC installe un gestionnaire d'espace de noms Shell qui crée des dossiers shell représentant le périphérique connecté - de la même manière que fonctionnent les dossiers Panneau de configuration et Emplacements réseau, même s'ils ne sont pas de véritables répertoires système de fichiers. Pensez-y comme Windows main-agitant sur l'abstraction du système de fichiers.

Tout est cependant, vous avez pas perdu, quelques options:

  1. utiliser l'API de connectivité Smart Device pour explorer l'appareil et obtenir des fichiers de données sur ce: https://msdn.microsoft.com/en-us/library/bb384093.aspx - c'est la même API que l'Explorateur utilise quand il vous montre les dossiers shell de l'appareil.
  2. Retirez le volume de stockage (par exemple, une carte SD) de l'appareil et connectez-le à un lecteur de carte SD sur votre ordinateur afin de pouvoir parcourir et manipuler directement le système de fichiers.
  3. Ecrivez un programme qui s'exécute sur l'appareil lui-même pour transférer les données de l'appareil vers un emplacement partagé.

L'option 1 obtiendra les meilleurs résultats mais nécessitera probablement un codage dans C++/Win32. VBA n'est pas le meilleur environnement pour programmer des systèmes. Vous pouvez toujours écrire en C++ et exposer votre couche en tant qu'objet COM que vous pouvez ensuite utiliser via VBA. Bien que vous rencontrerez des problèmes avec 32/64-bitness d'Office, et probablement des problèmes de bac à sable aussi.

L'option 3 sera légèrement difficile car le dernier SDK pour la version "Windows Mobile" de Windows CE a été publié pour Visual Studio 2008 - il n'y a pas de support pour les versions plus récentes de VS. Cela signifie utiliser l'anémique Compact Framework 3.5 ou C++ 03 par rapport à l'API WinCE. Par coïncidence, je crois que cela fait partie de la raison pour laquelle Windows Mobile a été condamné à la sortie de l'iPhone: l'environnement était trop négligé et il ne pouvait pas suivre.

0

Vérifiez si votre appareil est accessible via Shell.Application ActiveX.Ci-dessous l'exemple qui montre tous les éléments de localisation "Imprimantes et télécopieurs":

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 

La sortie pour moi est comme suit:

CLSID:
:: {2227A280-3AEA-1069- A2DE-08002B30309D}

nom du dossier:
Imprimantes

Fax
Microsoft XPS Document Writer
PDFCreator
Envoyer à OneNote 2013
...- P0086 sur ...- S0002
...- P0087 sur ...- S0002
...- P0049 sur .. .-S0002
...- P0068 sur ...- S0002
...- P0067 sur ...- S0002

Essayez une autre CLSID, comme:

::{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 

Regardez par exemple here, here et here. Si vous trouvez le nom du périphérique dans l'un des éléments affichés, vous pourrez apparemment récupérer le fichier.