Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Tomas1982 en 17 Mayo 2017, 15:55 pm



Título: Ayuda con Backup de celulares en VB.net.
Publicado por: Tomas1982 en 17 Mayo 2017, 15:55 pm
Me disculpan de antemano si este no es el mejor sitio para realizar esta pregunta, especialmente con Elektro que siempre está pendiente  de los errores que cometemos. La cuestión es que estoy tratando de hacer un programa que me haga un Backup de los dispositivos externos que coloque en mi PC de forma automatica, lo cual ya he avanzado en ello con la ayudas de ustedes, el problema que tengo y que no he encontrado  nada al respecto buscando en  google,  es con la copia de los celulares, ya que este no se reconoce de la misma manera que las memorias o discos externos. Si me pudieran dar una idea de cómo hacerlo  se los agradecería.
Les argumento que ya lo he hecho con memoria y disco externo. (VB.net)


Título: Re: Ayuda con Backup de celulares en VB.net.
Publicado por: MCKSys Argentina en 17 Mayo 2017, 17:59 pm
Hola!

Revisa ésto: http://stackoverflow.com/questions/26514869/accessing-an-mtp-device-in-visual-basic-net (http://stackoverflow.com/questions/26514869/accessing-an-mtp-device-in-visual-basic-net)

Saludos!


Título: Re: Ayuda con Backup de celulares en VB.net.
Publicado por: Eleкtro en 17 Mayo 2017, 21:48 pm
Es un tema complicado, apenas existe información de como usar la API de WPD que no sea para C/C++, incluyendo los samples oficiales en la referencia de la MSDN. Y aparte de eso, yo nunca he intentado hacer este tipo de cosas, bueno, si, una vez, pero más que por necesidad era por curiosidad, para aprender algo nuevo, pero me di en las narices con el follón de implementar los miembros de WPD y me desanimé xD: https://stackoverflow.com/questions/42606459/which-win32-function-must-i-use-to-copy-a-file-to-a-smartphone-folder



Si buscas la opción más eficiente y sofisticada, pero al mismo tiempo la más compleja, entonces debes intentar usar la API de WPD. El compañero ya te pasó un enlace a una implementación en C# que a simple vista parece funcional, pero notarás que los enlaces del blog de ese programador están caidos, así que te tendrás que descargar el código fuente modificado que publicó el usuario @Plutonix en su respuesta en StackOverflow: https://www.dropbox.com/s/8hfctmxsy0j75ft/Windows%20Portable%20Devices.zip?dl=0 (https://www.dropbox.com/s/8hfctmxsy0j75ft/Windows%20Portable%20Devices.zip?dl=0) o bien el código fuente original subido GitHub: https://github.com/geersch/WPD

Si buscas una solución más llevadera, que sea más abstracta y sencillo pero practicamente igual de eficiente, y solo en caso de que tu dispositivo sea Android, entonces te recomiendo utilizar la librería AndroidLib: https://github.com/regaw-leinad/AndroidLib/releases
Es una librería sencilla de usar y bien documenttada, con algunos ejemplos básicos online. En su día la utilicé para leer información del dispositivo y poco más.
He estado analizando un poco el código fuente y, para copiar directorios y archivos (a modo de backup), presuntamente deberías poder usar los métodos "PullDirectory()" y "PullFile()" que están expuestos en la clase AndroidController.Device: https://github.com/regaw-leinad/AndroidLib/blob/master/AndroidLib/Classes/AndroidController/Device.cs

Si quieres algo todavía más sencillo, sin necesidad de recurrir a la API WPD, entonces simplemente puedes recurrir a los objetos COM de la Shell de Windows para acceder al directorio y copiarlo usando el método Folder.CopyHere(): https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787866(v=vs.85).aspx)
Sin embargo, esta opción es la más engorrosa y también limitada, puesto que no permite forma alguna de poder enumerar los dispositivos conectados de forma automatizada, tendrás que conocer de antemano la ruta "interna" del directorio del dispositivo conectado (algo similar a esto: ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_04e8&pid_6860&ms_comp_mtp&samsung_android#6&612ff8b&1&0000#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\), o como ya explico en la pregunta que formulé en StackOverflow, puedes obtenerlo usando el método Shell.BrowseForFolder: https://msdn.microsoft.com/en-us/library/windows/desktop/bb774065(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/bb774065(v=vs.85).aspx) el cual abrirá un diálogo de directorios para seleccionar tu dispositivo, y entonces en el objeto devuelto de tipo FolderItem puedes obtener la ruta interna del directorio del dispositivo seleccionado comprobando el valor de la propiedad FolderItem.Path: https://msdn.microsoft.com/en-us/library/windows/desktop/bb787844(v=vs.85).aspx (https://msdn.microsoft.com/en-us/library/windows/desktop/bb787844(v=vs.85).aspx)

No creo que pueda ayudarte más al respecto.

¡Saludos!