Table of Contents
MtpToolLib
Knihovna zajišťuje podporu pro přístup k MTP zařízením z pluginů GeoGetu.
Autor
Diskuse
Diskuse o pluginu najdete na geocaching.cz
Automatická instalace
|
Instalaci doplňku spustíte kliknutím na tlačítko vlevo. Následně budete v prostředí GeoGetu provedeni instalačním procesem. Pro zajištění této funkce je třeba mít na počítači již
nainstalovaný a
spuštěný program GeoGet
.
|
Pro správnou funkci knihovny může být potřeba doinstalovat, pokud ještě v systému nejsou, volně distribuované knihovny
- https://www.microsoft.com/en-us/download/details.aspx?id=8328 (po instalaci je třeba počítač restartovat)
Popis
Protože přístup k MTP zařízením není možné ve Windows nějak jednoduše obejít pomocí příkazové řádky nebo přímo funkcemi poskytovanými systémem, vznikla tato knihovna. Instalace obsahuje soubor MtpLib.dll
, který se stará o vlastní přístup k MTP zařízení, a knihovnu pro pluginy MtpToolLib.lib.pas
, která dělá prostředníka mezi pluginem a DLL knihovnou.
- všechny textové vstupní parametry nebo návratové hodnoty jsou typu
unicodestring
, zřejmě je možné je deklarujete i jakostring
- protože Android je v podstatě Unixový systém, všechny textové parametry jsou
case sensitive
(jen regulární výrazy jsou vyhodnocovány bez ohledu na velikost písmen) - všechny texty (např. jméno zařízení, jména souborů, …) jsou v
unicode
Součástí instalace knihovny jsou:
MtpLib.dll
- dynamická knihovna pro přímou obsluhu MTP zařízeníMtpToolLib.lib.pas
- modul s deklarací a voláním knihovních funkcí, modul vložte do svého pluginu příkazem{$include MtpToolLib.lib.pas}
MtpCmd.exe
- aplikace pro obsluhu MTP zařízení z příkazového řádku. Aplikace je zamýšlena zatím především pro ladění knihovny a obsahuje i funkce, které nejsou pomocíMtpToolLib.lib.pas
dostupné- testovací plugin TestDllUse, slouží také jako ukázka použití jednotlivých funkcí
Konstanty
Pro lepší přehlednost zdrojového kódu jsou v souboru MtpToolLib.dll.pas
, který je vložen do MtpToolLib.lib.pas
, definované konstanty:
ML_RECURSIVE_YES | true |
ML_RECURSIVE_NO | false |
ML_REWRITE_YES | true |
ML_REWRITE_NO | false |
ML_SHOWDEVICELIST_AUTO | false |
ML_SHOWDEVICELIST_ALWAYS | true |
a ještě konstanta pro definici maximální délky vráceného textu:
MAX_STRING_RESULT_LENGTH | 5000000 |
Funkce
Knihovna MtpToolLib.lib.pas
obsahuje funkce exportované z dynamicky linkované knihovny MtpLib.dll
. Funkce, které v MtpLib.dll
pracují s bufferem, jsou pro jednodušší použití v pluginech zapouzdřeny do funkcí tak, aby rovnou vracely string. U každé funkce je uvedeno, kde je definovaná:
procedure ML_SetBufferSize(nSize:integer); //MtpToolLib.lib.pas
- nastaví velikost bufferu pro získávání textových informací
- implicitní velikost je cca 3 MB a měla by stačit
- pokud některá funkce vrátí chybu -15 (např. výpis obsahu adresáře s velmi mnoha soubory), znamená to, že velikost bufferu není dostatečná. V textu chyby je zároveň uvedena minimální požadovaná velikost bufferu, kterou bude potřeba nastavit pro úspěšné provedení funkce
procedure ML_SetProgressBar(iShow:integer); //MtpToolLib.lib.pas i MtpLib.dll
- povoluje (iShow=1) nebo potlačuje (iShow=0) zobrazování progress baru při kopírování souborů
- implicitně je nastaveno zobrazení
- pokud je DLL knihovna použitá v konzolové aplikaci, postup je zobrazován textově v okně aplikace
- pokud je DLL knihovna použitá ve windowsí aplikaci, progress bar je zobrazen v samostatném okně
Verze knihovny a obsluha chyb
function ML_GetDllVersion(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_GetDllVersion:unicodestring; //MtpToolLib.lib.pas
- vrací verzi dll knihovny
- číslo verze je zapsané do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
function ML_GetErrorCode:integer;
- vrací číslo chyby, ke které došlo při posledním použití některé knihovní funkce
- 0 znamená bez chyby
function ML_GetErrorMessage(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_GetErrorMessage:unicodestring; //MtpToolLib.lib.pas
- vrací text chyby, resp. počet znaků textu chyby, ke které došlo při posledním použití některé knihovní funkce
- text chyby je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- pokud je vrácený text prázdný, k chybě nedošlo
Práce s MTP zařízením jako takovým
function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):unicodestring; //MtpToolLib.lib.pas
- vrací seznam připojených zařízení resp. počet znaků seznamu zařízení připojených k PC
- seznam je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- oddělovačem zařízení je CRLF
- v seznamu jsou i “pevné” šachty čtečky karet
procedure ML_SetDeviceName(sName:unicodestring);
- funkce nastavuje jméno zařízení, s kterým budou pracovat funkce, které pracují s konkrétním zařízením
function ML_DeviceInfo(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_DeviceInfo:unicodestring; //MtpToolLib.lib.pas
- vrací vlastnosti zařízení, resp. počet znaků všech vlastností zařízení zadaného funkcí
ML_SetDeviceName
- seznam vlastností je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- oddělovačem vlastností je CRLF
- prázdný seznam může znamenat chybu
function ML_SupportedCommands(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_SupportedCommands:unicodestring; //MtpToolLib.lib.pas
- vrací počet znaků všech podporovaných příkazů v zařízení zadaném funkcí
ML_SetDeviceName
- seznam příkazů je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- oddělovačem kategorií je CRLF
- seznam je řazen po kategoriích příkazů a jsou v něm jen ty kategorie, které obsahují alespoň jeden podporovaný příkaz
- prázdný seznam může znamenat chybu
function ML_FunctionalObjects(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_FunctionalObjects:unicodestring; //MtpToolLib.lib.pas
- vrací počet znaků všech funkčních objektů pro všechny podporované funkční kategorie zařízení zadaného funkcí
ML_SetDeviceName
- seznam podporovaných funkčních kategorií je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- každý řádek seznamu začíná identifikací kategorie, dvojtečkou a pak následuje čárkou oddělovaný seznam jmen funkčních objektů dané kategorie
- prázdný seznam může znamenat chybu
function ML_ContentTypes(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_ContentTypes():unicodestring; //MtpToolLib.lib.pas
- vrací počet znaků seznamu podporovaných typů obsahu zařízení zadaného funkcí
ML_SetDeviceName
- seznam podporovaných typů je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- oddělovačem typů je CRLF
- prázdný seznam může znamenat chybu
function ML_FindGpsMobilDevice(sType:string: bAlwaysShowList:boolean):string; //MtpToolLib.lib.pas
- poněkud komplexní funkce, která hledá mezi připojenými zařízeními GPS nebo Android s aplikaci a:Drake
- prohledává nejen MTP zařízení, ale i standardní disky, …
- pokud najde více zařízení podle požadavku
sType
, nechá uživatele vybrat jedno z nich a vrací to vybrané sType
je požadavek, co má funkce hledat- GARMIN - hledá jen GPS Garmin připojenou jako standardní disk
- ADRAKE_INST - hledá zařízení (disk i MTP) s instalovaným a:Drake a vrací cestu k instalovaným souborům (
aDrake.ini
) - ADRAKE_DB - hledá zařízení (disk i MTP) s instalovaným a:Drake a vrací cestu a jméno databázového souboru, který aplikace používá
- ALL_APPS - hledá všechny výše uvedené aplikace (kombinuje všechny výše jmenované parametry)
- ALL_DEVS - nechá uživatele vybrat ze všech připojených zařízení bez ohledu na to, zda obsahují instalaci nějaké aplikace
- druhý parametr
bAlwaysShowList
, pokud je nastaven na true, přikazuje zobrazit okno s výběrem zařízení vždy, ne jen když je nalezených zařízení více
- vrácený string obsahuje na jméno zařízení, dvojtečku, cestu a v hranatých závorkách typ, např.:
K: [GARMIN]
- GPS Garmin připojená přes USB jako Mass StorageK:\adrake [ADRAKE_INST]
- telefon se starším Androidem připojený přes USB jako Mass Storage, a:Drake instalovaný v rootu (telefonu nebo karty, to se nepozná)K:\Tmp\geoget.db3 [ADRAKE_DB]
- telefon se starším Androidem připojený přes USB, instalovaný a:Drake používá tento databázový souborLG Spirit LTE: Interní úložiště/Android/data/cz.adrake/files [ADRAKE_INST]
- telefon s Androidem připojeným jako MTP, instalované soubory aplikace jsou v tomto adresářiLG Spirit LTE: Karta SD/Android/data/cz.adrake/files/geoget.db3 [ADRAKE_DB]
- telefon s Androidem připojeným jako MTP, instalovaný a:Drake používá tento databázový souborLG Spirit LTE
- vrácený text neobsahuje nic než jméno uživatelem vybraného zařízení protože funkce byla spuštěna s parametremALL
a uživatel toto zařízení vybral (nebo jiné připojené zařízení neexistuje)
Práce se soubory nebo adresáři
function ML_Exists(sPath:unicodestring):integer;
- funkce vrací 1, pokud existuje objekt (adresář, soubor, karta, …) zadaný cestou
sPath
sPath
se hledá v zařízení zadaném funkcíML_SetDeviceName
- vrácená hodnota 0 (false) může znamenat i chybu
function ML_Properties(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Properties(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
- vrací vlastnosti resp. počet znaků všech vlastností objektu (soubor, adresář, karta, …) zadaného cestou
sPath
; cesta se hledá v zařízení zadané funkcíML_SetDeviceName
- seznam vlastností je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- oddělovačem vlastností je CRLF
- prázdný seznam může znamenat chybu
Práce s adresáři
function ML_Dir(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Dir(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
- vrací seznam položek resp. počet znaků seznamu položek (soubory, adresáře) v adresáři zadaném cestou
sPath
; cesta se hledá v zařízení zadané funkcíML_SetDeviceName
- seznam položek je zapsaný do
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost jeiMaxBufferLen
- pokud je vrácená délka shodná s
iMaxBufferLen
, pravděpodobně se celý seznam nevešel dosBuffer
- oddělovačem položek adresáře je CRLF
- adresáře jsou v seznamu ukončeny znakem
/
- prázdný seznam může znamenat chybu
function ML_MkDir(sPathDir:unicodestring; bRecursively:integer):integer;
- funkce v zařízení zadaném funkcí
ML_SetDeviceName
vytváří adresářsPathDir
- nenulová hodnota
bRecursively
povoluje vytvořit postupně adresáře celé uvedené cesty - vrácená hodnota 0 znamená bez chyby
function ML_RmDir(sPathDir:unicodestring; bRecursively:integer):integer;
- funkce v zařízení zadaném funkcí
ML_SetDeviceName
smaže prázdný adresářsPathDir
bRecursively
=1 znamená mazání včetně všech vnořených souborů a adresářů- vrácená hodnota 0 znamená bez chyby
function ML_GetDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
- funkce ze zařízení zadaném funkcí
ML_SetDeviceName
získá obsah adresářesSrcDir
a zapíše jej do adresářesTrgDir
- adresář se jménem
sTrgDir
není v PC vytvářen,sTrgDir
musí již existovat, kopíruje se jen obsahsSrcDir
(případně včetně vnořených adresářů a jejich obsahu)
sMask
je maska souborů a adresářů, s kterými funkce pracuje; je možné používat zástupných znaků*
nebo?
(např.*.bmp
,obr_?.jpg
,obr*.png
,obr*
a podobně)- prázdná maska znamená všechny soubory (a adresáře při
bRecursively=1
)
bRecursively
=1 znamená kopírování včetně vnořených adresářů- ovšem pokud je zadaná maska
sMask
, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané masce
bOverwrite
=1 povoluje “přepis” existujících souborů/adresářů- vrácená hodnota 0 znamená bez chyby
function ML_PutDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
- funkce do zařízení zadaném funkcí
ML_SetDeviceName
a do adresářesTrgDir
zkopíruje obsah adresářesSrcDir
z PC- adresář se jménem
sTrgDir
není v MTP zařízení vytvářen, musí již existovat, kopíruje se jen obsah asSrcDir
(případně včetně vnořených adresářů a jejich obsahu)
sMask
je maska souborů a adresářů, s kterými funkce pracuje; je možné používat zástupných znaků*
nebo?
(např.*.bmp
,obr_?.jpg
,obr*.png
,obr*
a podobně)- prázdná maska znamená všechny soubory (a adresáře při
bRecursively=1
)
bRecursively
=1 znamená kopírování včetně vnořených adresářů- ovšem pokud je zadaná maska
sMask
, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané masce
bOverwrite
=1 povoluje “přepis” existujících souborů/adresářů- vrácená hodnota 0 znamená bez chyby
Práce se soubory
function ML_GetFile(sSrc,sTrg:unicodestring):integer;
- funkce kopíruje soubor ze zařízení do PC
sSrc
se hledá v zařízení zadaném funkcíML_SetDeviceName
- vrácená hodnota 0 znamená bez chyby
function ML_PutFile(sSrc,sTrgDir:unicodestring; bOverwrite:integer):integer;
- funkce kopíruje soubor z PC do zařízení do PC
- cílový adresář
sTrdDir
se hledá v zařízení zadaném funkcíML_SetDeviceName
- vrácená hodnota 0 znamená bez chyby
function ML_DeleteFile(sPath:unicodestring):integer;
- funkce smaže soubor na zařízení zadaném funkcí
ML_SetDeviceName
- vrácená hodnota 0 znamená bez chyby
function ML_RenameFile(sSrcPath,sTrgName:unicodestring):integer;
- funkce přejmenuje soubor v zařízení zadaném funkcí
ML_SetDeviceName
- vrácená hodnota 0 znamená bez chyby
- protože jméno souboru je jedna z jeho vlastností, bude funkce úspěšná jen v tom případě, že soubor má povolen přepis vlastností. To v drtivé většině případů neplatí
Vyhledání zařízení
function ML_FindGpsMobileDevice(sType:string; bAlwaysShowSelection:boolean):string;
- funkce se pokusí najít požadované připojené zařízení a vrací jeho jméno (případně celou cestu)
- požadované zařízení specifikuje první parametr:
GARMIN
- GPS GarminADRAKE_INST
- funkce vrací adresář s instalovanou aplikací a:Drake (tedy místo, kde je její ini soubor)ADRAKE_DB
- funkce vrací adresář s databází, kterou aktuálně používá instalovaná aplikace a:Drake (funkce napřed vyhledá ADRAKE_INST a pak z INI souboru zjistí používanou databázi)- není možné vyhledávat, protože konfigurace je uložena v XML souboru čitelném jen pod root. Addon může mít databázi úplně kdekoli bez ohledu na možnost zápisu, protože právě kvůli tomu je stále ještě kompilovaný pro starší AndroidyLOCUS_INST
,LOCUS_DB
ALL_APPS
- hledá všechny výše jmenované možnosti a ve vráceném stringu je na každém řádku vždy typ a nalezená cesta
- druhý parametr umožňuje zobrazit uživateli nalezený seznam a nechat jej vybrat požadovanou volbu, která je pak funkcí vrácena
- při hodnotě
false
je uživateli výběr k volbě zobrazen jen v tom případě, že je nalezeno více požadavku odpovídajících položek (např. a:Drake na více současně připojených telefonech a funkce nemůže rozhodnout, který z telefonů si uživatel přeje použít) - při hodnotě
true
je výběr uživateli zobrazen vždy, i v případě, kdy by funkce rozhodnout mohla, protože bylo nalezeno jen jediné zařízení
Ukázka použití knihovny
{$include MtpToolLib.lib.pas} ... sHtml:='<pre>Seznam připojených zařízení: '+ReplaceString(Trim(ML_Devices()),CRLF,', ')+CRLF; sHtml:=sHtml+CRLF+'Zařízení: LG Spirit LTE'+CRLF; ML_SetDeviceName('LG Spirit LTE'); sHtml:=sHtml+'Vlastnosti zařízení: '+CRLF+Trim(ML_DeviceInfo())+CRLF; sHtml:=sHtml+'Seznam podporovaných typu obsahu: '+ReplaceString(Trim(ML_ContentTypes()),CRLF,', ')+CRLF; sHtml:=sHtml+'Seznam podporovaných funkčních typů: '+ReplaceString(Trim(ML_FunctionalTypes()),CRLF,', ')+CRLF; sHtml:=sHtml+'Seznam funkčních objektů: '+ReplaceString(Trim(ML_FunctionalObjects()),CRLF,', ')+CRLF; sHtml:=sHtml+'Vlastnosti objektu /Karta SD/Android: '+CRLF+Trim(ML_Properties('/Karta SD/Android'))+CRLF; sHtml:=sHtml+'Obsah adresáře /Karta SD: '+CRLF+Trim(ML_Dir('/Karta SD'))+CRLF; //funkce vracejici int (jako priznak uspesnosti) sHtml:=sHtml+'Test existence /Karta SD: '+IntToStr(ML_Exists('/Karta SD'))+CRLF; sHtml:=sHtml+'Test existence /Karta SD/Abcd: '+IntToStr(ML_Exists('/Karta SD/Abcd'))+CRLF; sHtml:=sHtml+'Poslední chyba: '+ML_GetMessageError()+CRLF; sHtml:=sHtml+'</pre>'; ShowHTMLMessageSize('Test MtpToolLib', sHtml, 600, 600); ...
Ukázka použití funkce FindGpsMobilDevice('ALL_APPS')
, funkce nabízí uživateli volbu ze všech nalezených zařízení s “aplikacemi”. Vybranou volbu pak předá jako návratovou hodnotu. Pokud je nalezeno jen jedno zařízení, uživatele se neptá na nic.
TestDllUse
Součástí instalace je plugin TestDllUse.ggp.pas
, který má ověřit práci s Vaším zařízením a autorům pluginů ukázat použití většiny funkcí knihovny. Na začátku metody PluginStart je definice adresářů a jmen souborů, s kterými se pracuje, to si upravte. Pak můžete plugin spustit a výsledek uvidíte v zobrazeném výpisu. Pokud nedojde k žádné chybě, mělo by se udělat:
- vypíše seznam připojených zařízení a nechá vybrat jedno z nich. Pokud během zobrazení seznamu připojíte nebo odpojíte nějaké MTP zařízení, tlačítkem
Refresh
je možné seznam aktualizovat (ML_FindGpsMobileDevice('ALL_DEVS', true);
aML_SetDeviceName();
) - vypíše vlastnosti zvoleného zařízení (
ML_DeviceInfo();
) - vypíše seznam funkčních kategorií, které zařízení podporuje (
ML_FunctionalCategories();
) - vypíše seznam všech funkčních objektů v zařízení (
ML_FunctionalObjects();
) a najde mezi nimi SD kartu (pokud neexistuje, použije v dalších krocích paměť telefonu) - vypíše seznam podporovaných typů obsahu (
ML_ContentTypes();
) - otestuje existenci pracovních adresářů (
ML_Exists();
) - vypíše vlastnosti jednoho adresáře (ten je víceméně natvrdo) (
ML_Properties();
) - vytvoří testovací soubor na PC
- otestuje existenci 3 adresářů (2 by měly existovat, jeden ne) (
ML_Exists();
) - vytvoří v zařízení rekurzivně 2 úrovně testovacích adresářů (
ML_MkDir();
) - vypíše vlastnosti nejnižšího vytvořeného adresáře (ten je víceméně natvrdo) (
ML_Properties();
) - do nejnižšího adresáře zkopíruje testovací soubor (
ML_PutFile();
) - na PC změní obsah testovacího souboru a znovu jej zkopíruje do zařízení, čímž otestuje přepsání existujícího souboru
- zkopíruje testovací soubor s novým obsahem zpět do PC, ale pod novým jménem (
ML_PutFile();
) - vypíše vlastnosti zkopírovaného souboru v zařízení (
ML_Properties();
) - testovací soubor překopíruje do PC pod jiným jménem (
ML_GetFile();
) - vypíše obsah adresáře (
ML_Dir();
) - soubor v telefonu smaže (
ML_DeleteFile();
) - rekurzivně smaže v telefonu vytvořené pracovní adresáře (
ML_RmDir();
)
Známé potíže
* Could not call proc
- pokud při spuštění napíše GeoGet něco takovéhoto:
[Script Runtime Error]: GgDrake.ggp.pas Could not call proc Routine: BUTREFRESHONCLICK''
- může být problém v chybějících systémových knihovnách. Prosím zkuste doinstalovat
* zaseknutí
- občas se “MTP” na chvíli (třeba i minutu) zasekne a jakoby nic nedělá, ale pak se normálně rozjede. Podobné chování ale pozoruji i při propojeni přes Total Commander nebo i Windowsím průzkumníkem. Tak to asi budu chápat jako vlastnost
- smazání souboru někdy trvá neúměrně dlouho, netuším proč, možná to souvisí s předchozím bodem, možná je to proto, že se prověřuje, zda soubor nepoužívá nějaká aplikace a přes MTP driver to trvá dlouho (ale pak je divné, proč je to někdy rychle)
* jméno souboru nebo adresáře
- zdá se, že žádný soubor v MTP nemá nastaven příznak umožňující přepis atributů souboru
- proto se nepodaří nikdy soubor přejmenovat (ale smazat jej většinou možné je!)
- proto při zápisu souboru do MTP zařízení, pokud soubor existuje, není možné soubor jednoduše přepsat, ale soubor stejného jména je napřed vymazán a pak zkopírován jako nový soubor (má tedy jiné ID než původní soubor)
- ačkoli telefon vrací vždy všechny texty v
unicode
kódování, nastane pravděpodobně problém v případě, kdy Windows a telefon nebudou obsahovat stejnou lokalizaci nebo znakovou sadu. Např. v případě, kdy Windows budou anglické, těžko knihovně sdělíte, že potřebujete soubor z/doInterní úložiště
, jak je v telefonu s českou lokalizací nazvané paměť v telefonu mimo výměnnou SD kartu
* datum, čas
- při kopírování souborů nebo adresářů do MTP zařízení sice nastavuji datum vytvoření a aktualizace souboru nebo adresáře, ale zdá se, že MTP driver v zařízeních některých výrobců má vlastní hlavu a vždy nastavují aktuální datum a čas bez ohledu na atributy nastavené při vytváření. Díky předcházejícímu bodu ani není možné později nastavit tato časová razítka správně a případné synchronizace souborů je přinejmenším sporná
* aktualizace DLL knihovny
- při použití pluginu je do paměti zavedena DLL knihovna
MtpLib.dll
, která dál používá několik systémových DLL knihoven. Po ukončení pluginu však nedojde k uvolnění systémových knihoven z paměti, proto je knihovnaMtpLib.dll
uzamčena proti manipulaci a není tedy možné plugin aktualizovat - knihovnu se nepodaří přepsat novou verzí. Je nutné napřed restartovat GeoGet, tím dojde k odblokování knihovny a aktualizace pluginu proběhne správně
Seznam skriptů, které používají tuto knihovnu
Page | Date | Description | Tags |
---|---|---|---|
Combine | 2022/04/18 20:47 | Combine Skript slouží k automatizaci často opakovaného sledu akcí. Vytvořením dávky složené z několika postupných kroků zjednodušuje provádění složitějších čin… | author gord, skript, ggp, ggs, upravy, zobrazeni, uses reltoabspath, uses mtptoollib |
GgDrake | 2022/10/18 16:11 | GgDrake Plugin je určen pro předávání dat mezi GeoGetem a aplikací a:Drake pro mobilní telefony se systémem Android. Autor Gord, Gord LudekV autor a:Draku … | author gord, author ludekv, skript, import, uses stringlib, uses mtptoollib |
Pokud jste narazili na skript, který knihovnu používá, ale není zde uveden, kontaktujte, prosím, autory.
Stažení
Stáhnout aktuální verzi: mtptoollib-1.0.1.gip
Seznam dostupných verzí
Filename | Filesize | Last modified |
---|---|---|
mtptoollib-1.0.1.gip | 224.4 KiB | 2018/04/06 14:18 |
mtptoollib-1.0.0.gip | 222.1 KiB | 2017/02/01 07:58 |
combine-2.0.14.25.gip | 117.1 KiB | 2016/11/11 00:00 |
Zde uvedená verze Combine je rozšířená o funkce pro MTP zařízení. Jde rovněž o betaverzi, proto není dostupná na stránce pluginu Combine, ale jen zde. Součástí instalace je ukázková dávka pro “bezpečné” zkopírování databáze do a:Drake. Při kopírování dávka vyhledá připojené zařízení s instalací a:Drake, podle jeho INI souboru najde adresář a databázi, kterou a:Drake používá, zkontroluje, zda kopírovaná databáze z GeoGetu má stejné jméno, databázi zkopíruje a vymaže žurnálový soubor.
Seznam změn
1.0.1 (6.4.2018)
MtpCmd.exe
- nový: soubor s popisem s funkcemi a příklady spouštění z příkazového řádku
MtpToolLib.dll.pas
- oprava: Refresh přidával k seznamu nalezených zařízení místo aby v seznamu byly jen nově/opakovaně nalezené
- oprava: nalezení ADRAKE_INST a ADRAKE_DB hledá i pro
a:Drake Plus
a také staré umístění v/adrake
1.0.0 (1.2.2017)
MtpCmd.exe, MtpLib.dll, TestDllUse.ggp.pas
- oprava: snad definitivní umravnění nemizejícího progress baru