Bonsoir Kwai chang caine,
J'avais vu le post sur le forum anglais et j'avais testé la fonctionnalité MTP
Elle est incomplète dans le sens ou toute les fonctionnalités ne sont pas implémentées.
Je suis arrivé a faire des choses avec un vieux smartphone Willeyfox et une vieille tablette Lenovo
Je remet ici le code légèrement modifié et commenté qui fonctionne pour moi.
Code : Tout sélectionner
;;; https://www.purebasic.fr/english/viewtopic.php?p=604773
;;; https://www.purebasic.fr/english/viewtopic.php?t=72815
;;; https://www.purebasic.fr/english/viewtopic.php?t=77556
;;;
;;; http://forums.purebasic.com/german/viewtopic.php?t=31465
EnableExplicit
SetCurrentDirectory(GetPathPart(ProgramFilename()))
Global PBEx_MTP
#PBEx_MTP_Type_File = 1
#PBEx_MTP_Type_Directory = 2
#PBEx_MTP_DeviceType_Generic = 0
#PBEx_MTP_DeviceType_Camera = 1
#PBEx_MTP_DeviceType_MediaPlayer = 2
#PBEx_MTP_DeviceType_Phone = 3
#PBEx_MTP_DeviceType_Video = 4
#PBEx_MTP_DeviceType_PersonalInformationManager = 5
#PBEx_MTP_DeviceType_AudioRecorder = 6
;;; http://www.rsbasic.de/downloads/download.php?file=PB.Ex_MTP.zip
;;; https://disk.yandex.ru/d/fDOjETCZVANSGw
;;; https://www.upload.ee/files/14617724/Synchronization.7z.html
;;; Télécharger les librairies:
;;; http://www.rsbasic.de/downloads/download.php?file=PB.Ex_MTP.zip
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
PBEx_MTP = OpenLibrary(#PB_Any, "PB.Ex_MTP_x86.dll")
If Not PBEx_MTP
Debug #CRLF$+"La DLL PB.Ex_MTP_x86.dll est absente du dossier "+GetPathPart(ProgramFilename())
End
EndIf
CompilerElseIf #PB_Compiler_Processor = #PB_Processor_x64
PBEx_MTP = OpenLibrary(#PB_Any, "PB.Ex_MTP_x64.dll")
If Not PBEx_MTP
Debug #CRLF$+"La DLL PB.Ex_MTP_x64.dll est absente du dossier "+GetPathPart(ProgramFilename())
End
EndIf
CompilerEndIf
If PBEx_MTP
Prototype ExamineMTP(ErrorOutput)
Global ExamineMTP.ExamineMTP = GetFunction(PBEx_MTP, "ExamineMTP")
Prototype NextMTPEntry(ErrorOutput)
Global NextMTPEntry.NextMTPEntry = GetFunction(PBEx_MTP, "NextMTPEntry")
Prototype FinishMTP(ErrorOutput)
Global FinishMTP.FinishMTP = GetFunction(PBEx_MTP, "FinishMTP")
Prototype MTPEntryName(Output, ErrorOutput)
Global MTPEntryName.MTPEntryName = GetFunction(PBEx_MTP, "MTPEntryName")
Prototype OpenMTP(ID, DeviceName.p-Unicode, ErrorOutput)
Global OpenMTP.OpenMTP = GetFunction(PBEx_MTP, "OpenMTP")
Prototype CloseMTP(ID, ErrorOutput)
Global CloseMTP.CloseMTP = GetFunction(PBEx_MTP, "CloseMTP")
Prototype IsMTP(ID, ErrorOutput)
Global IsMTP.IsMTP = GetFunction(PBEx_MTP, "IsMTP")
Prototype ExamineMTPDirectory(ID, ErrorOutput)
Global ExamineMTPDirectory.ExamineMTPDirectory = GetFunction(PBEx_MTP, "ExamineMTPDirectory")
Prototype FinishMTPDirectory(ID, ErrorOutput)
Global FinishMTPDirectory.FinishMTPDirectory = GetFunction(PBEx_MTP, "FinishMTPDirectory")
Prototype NextMTPDirectoryEntry(ID, ErrorOutput)
Global NextMTPDirectoryEntry.NextMTPDirectoryEntry = GetFunction(PBEx_MTP, "NextMTPDirectoryEntry")
Prototype MTPDirectoryEntryName(ID, Output, ErrorOutput)
Global MTPDirectoryEntryName.MTPDirectoryEntryName = GetFunction(PBEx_MTP, "MTPDirectoryEntryName")
Prototype SetMTPDirectory(ID, DirectoryPath.p-Unicode, ErrorOutput)
Global SetMTPDirectory.SetMTPDirectory = GetFunction(PBEx_MTP, "SetMTPDirectory")
Prototype GetMTPDirectory(ID, Output, ErrorOutput)
Global GetMTPDirectory.GetMTPDirectory = GetFunction(PBEx_MTP, "GetMTPDirectory")
Prototype MTPDirectoryEntryType(ID, ErrorOutput)
Global MTPDirectoryEntryType.MTPDirectoryEntryType = GetFunction(PBEx_MTP, "MTPDirectoryEntryType")
Prototype ReceiveMTPFile(ID, RemoteFileName.p-Unicode, FileName.p-Unicode, ErrorOutput)
Global ReceiveMTPFile.ReceiveMTPFile = GetFunction(PBEx_MTP, "ReceiveMTPFile")
Prototype MTPDirectoryEntrySize(ID, ErrorOutput)
Global MTPDirectoryEntrySize.MTPDirectoryEntrySize = GetFunction(PBEx_MTP, "MTPDirectoryEntrySize")
Prototype MTPDirectoryEntryDate(ID, ErrorOutput)
Global MTPDirectoryEntryDate.MTPDirectoryEntryDate = GetFunction(PBEx_MTP, "MTPDirectoryEntryDate")
Prototype GetMTPDescription(ID, Output, ErrorOutput)
Global GetMTPDescription.GetMTPDescription = GetFunction(PBEx_MTP, "GetMTPDescription")
Prototype GetMTPDeviceID(ID, Output, ErrorOutput)
Global GetMTPDeviceID.GetMTPDeviceID = GetFunction(PBEx_MTP, "GetMTPDeviceID")
Prototype GetMTPDeviceType(ID, ErrorOutput)
Global GetMTPDeviceType.GetMTPDeviceType = GetFunction(PBEx_MTP, "GetMTPDeviceType")
Prototype GetMTPFirmwareVersion(ID, Output, ErrorOutput)
Global GetMTPFirmwareVersion.GetMTPFirmwareVersion = GetFunction(PBEx_MTP, "GetMTPFirmwareVersion")
Prototype GetMTPFriendlyName(ID, Output, ErrorOutput)
Global GetMTPFriendlyName.GetMTPFriendlyName = GetFunction(PBEx_MTP, "GetMTPFriendlyName")
Prototype GetMTPManufacturer(ID, Output, ErrorOutput)
Global GetMTPManufacturer.GetMTPManufacturer = GetFunction(PBEx_MTP, "GetMTPManufacturer")
Prototype GetMTPModel(ID, Output, ErrorOutput)
Global GetMTPModel.GetMTPModel = GetFunction(PBEx_MTP, "GetMTPModel")
Prototype GetMTPPnPDeviceID(ID, Output, ErrorOutput)
Global GetMTPPnPDeviceID.GetMTPPnPDeviceID = GetFunction(PBEx_MTP, "GetMTPPnPDeviceID")
Prototype GetMTPSerialNumber(ID, Output, ErrorOutput)
Global GetMTPSerialNumber.GetMTPSerialNumber = GetFunction(PBEx_MTP, "GetMTPSerialNumber")
EndIf
Global Output$ = Space(1024)
Global ErrorOutput$ = Space(128)
;;; Documentation : https://www.purebasic.fr/english/viewtopic.php?t=72815
;;; List all devices To determine the device name.
Global Appareil$
If ExamineMTP(@ErrorOutput$)
While NextMTPEntry(@ErrorOutput$)
MTPEntryName(@Output$, @ErrorOutput$)
Appareil$=Output$
Debug Appareil$
Wend
EndIf
;;; List all directories and files.
;If OpenMTP(1, "Canon IXUS 125 HS", @ErrorOutput$)
;If OpenMTP(1, "Wileyfox Spark +" , @ErrorOutput$)
;If OpenMTP(1, "Tab2A7-10F" , @ErrorOutput$)
If OpenMTP(1, Appareil$, @ErrorOutput$)
;Get device information
GetMTPFriendlyName(1, @Output$, @ErrorOutput$)
Debug "Friendly name: " + Output$
GetMTPManufacturer(1, @Output$, @ErrorOutput$)
Debug "Manufacturer: " + Output$
GetMTPFirmwareVersion(1, @Output$, @ErrorOutput$)
Debug "Firmware version: " + Output$
GetMTPPnPDeviceID(1, @Output$, @ErrorOutput$)
Debug "PnPDeviceID: " + Output$
GetMTPModel(1, @Output$, @ErrorOutput$)
Debug "Model: " + Output$
Debug "--------------------------------------------------"
;SetMTPDirectory(1, "\Internal Storage\DCIM\100APPLE", @ErrorOutput$)
;SetMTPDirectory(1, "\storage\emulated\0" , @ErrorOutput$) ; Non
;SetMTPDirectory(1, "\storage\C651-32AE\" , @ErrorOutput$) ; Non
;SetMTPDirectory(1, "\storage\C651-32AE" , @ErrorOutput$) ; Non
;;; Définitions qui fonctionnent pour moi.
;;; Correspondent ace que je vois dans l'explorateur Windows quand l'appareil est connecté en USB
;SetMTPDirectory(1, "Carte SD SanDisk" , @ErrorOutput$);;Carte SD SanDisk
;SetMTPDirectory(1, "Mémoire de stockage interne" , @ErrorOutput$);;Mémoire de stockage interne
SetMTPDirectory(1, "Mémoire de stockage USB", @ErrorOutput$)
If ExamineMTPDirectory(1, @ErrorOutput$)
While NextMTPDirectoryEntry(1, @ErrorOutput$)
MTPDirectoryEntryName(1, @Output$, @ErrorOutput$)
If MTPDirectoryEntryType(1, @ErrorOutput$) = #PBEx_MTP_Type_Directory
Debug "Folder: " + Output$
ElseIf MTPDirectoryEntryType(1, @ErrorOutput$) = #PBEx_MTP_Type_File
Debug "File: " + Output$
Debug Str(MTPDirectoryEntrySize(1, @ErrorOutput$)) + " Bytes"
Debug FormatDate("%dd.%mm.%yyyy %hh:%ii:%ss", MTPDirectoryEntryDate(1, @ErrorOutput$))
EndIf
Wend
EndIf
CloseMTP(1, @ErrorOutput$)
Else
Debug ErrorOutput$
EndIf
CloseLibrary(PBEx_MTP)
La documentation est disponible dans ce post de RSBasic
https://www.purebasic.fr/english/viewtopic.php?t=72815
Pour adb, je vais mettre a jour le site avec les dernières sources et exécutables.
J'ai pas mal avancé et j'ai tout testé en USB et en Wifi sans soucis.
Voici la procédure qui documente le combo avec les commandes
Code : Tout sélectionner
Procedure.a documenter_app_combo_gadget()
ClearGadgetItems(#GadgetCombo)
AddGadgetItem(#GadgetCombo, -1,"--------------- Sélectionnez une commande (* nécessite les droits admin) ---------------")
AddGadgetItem(#GadgetCombo, -1,"arp -a")
AddGadgetItem(#GadgetCombo, -1,"getmac /v /fo list")
AddGadgetItem(#GadgetCombo, -1,"ipconfig")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /all")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /displaydns")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /flushdns")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /registerdns *")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /release")
AddGadgetItem(#GadgetCombo, -1,"ipconfig /renew")
AddGadgetItem(#GadgetCombo, -1,"net share")
AddGadgetItem(#GadgetCombo, -1,"netstat -rn")
AddGadgetItem(#GadgetCombo, -1,"ping %IP%")
AddGadgetItem(#GadgetCombo, -1,"route print")
AddGadgetItem(#GadgetCombo, -1,"set")
AddGadgetItem(#GadgetCombo, -1,"PATH")
AddGadgetItem(#GadgetCombo, -1,"------------------- ADB via Ethernet, Wifi ou USB -----------------------------------------")
AddGadgetItem(#GadgetCombo, -1,"adb help | affiche l'aide d'adb")
AddGadgetItem(#GadgetCombo, -1,"adb version | affiche la version d'adb")
AddGadgetItem(#GadgetCombo, -1,"adb start-server | active le serveur adb")
AddGadgetItem(#GadgetCombo, -1,"adb tcpip 5555 | écoute une connexion sur le port 5555")
AddGadgetItem(#GadgetCombo, -1,"adb kill-server | arrête le serveur adb")
AddGadgetItem(#GadgetCombo, -1,"adb connect %IP% | se connecte a l'adresse %IP%[:5555]")
AddGadgetItem(#GadgetCombo, -1,"adb devices -l | affiche la liste des appareils connectés")
AddGadgetItem(#GadgetCombo, -1,"adb disconnect | se déconnecte de l'adresse %IP%[:5555], ou de toutes")
AddGadgetItem(#GadgetCombo, -1,"adb install %APK% | installe le paquet %APK%")
AddGadgetItem(#GadgetCombo, -1,"adb shell id | identifie l'utilisateur courant uid=0(root) gid=0(root)")
AddGadgetItem(#GadgetCombo, -1,"adb logcat | affiche le journal de l'appareil Android (Terminer par CRTL+C)")
AddGadgetItem(#GadgetCombo, -1,"adb logcat -c | efface le journal")
AddGadgetItem(#GadgetCombo, -1,"adb logcat -d > %LOG%| sauvegarde le journal dans %LOG%")
AddGadgetItem(#GadgetCombo, -1,"adb reboot | effectue un reboot de l'appareil")
AddGadgetItem(#GadgetCombo, -1,"-------------------------------------------------------------------------------------------")
AddGadgetItem(#GadgetCombo, -1,"")
SetGadgetState(#GadgetCombo, 0)
EndProcedure
Il y a déjà plus de commande adb
Je vais tester dans la foulée le backup/sauvegarde de l'appareil Android sur le PC et si je ne rencontre pas de soucis, je tenterais la restauration du PC vers l'appareil Android.
A priori, tous les bons logiciels que je connais pour s'interfacer avec Android a partir du PC semblent utiliser adb (mais pas que, peut-être)
cage