Knihovna zajišťuje podporu pro přístup k MTP zařízením z pluginů GeoGetu.
Diskuse o pluginu najdete na geocaching.cz
![]() |
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
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.
unicodestring
, zřejmě je možné je deklarujete i jako string
case sensitive
(jen regulární výrazy jsou vyhodnocovány bez ohledu na velikost písmen)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é
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 |
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
procedure ML_SetProgressBar(iShow:integer); //MtpToolLib.lib.pas i MtpLib.dll
function ML_GetDllVersion(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_GetDllVersion:unicodestring; //MtpToolLib.lib.pas
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_GetErrorCode:integer;
function ML_GetErrorMessage(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_GetErrorMessage:unicodestring; //MtpToolLib.lib.pas
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Devices(sBuffer:unicodestring; iMaxBufferLen:integer):unicodestring; //MtpToolLib.lib.pas
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
procedure ML_SetDeviceName(sName:unicodestring);
function ML_DeviceInfo(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_DeviceInfo:unicodestring; //MtpToolLib.lib.pas
ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_SupportedCommands(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_SupportedCommands:unicodestring; //MtpToolLib.lib.pas
ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_FunctionalObjects(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_FunctionalObjects:unicodestring; //MtpToolLib.lib.pas
ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_ContentTypes(sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_ContentTypes():unicodestring; //MtpToolLib.lib.pas
ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_FindGpsMobilDevice(sType:string: bAlwaysShowList:boolean):string; //MtpToolLib.lib.pas
sType
, nechá uživatele vybrat jedno z nich a vrací to vybranésType
je požadavek, co má funkce hledataDrake.ini
)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íceK: [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 parametrem ALL
a uživatel toto zařízení vybral (nebo jiné připojené zařízení neexistuje)function ML_Exists(sPath:unicodestring):integer;
sPath
sPath
se hledá v zařízení zadaném funkcí ML_SetDeviceName
function ML_Properties(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Properties(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
sPath
; cesta se hledá v zařízení zadané funkcí ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
function ML_Dir(sPath:unicodestring; sBuffer:unicodestring; iMaxBufferLen:integer):integer; //MtpLib.dll function ML_Dir(sPath:unicodestring):unicodestring; //MtpToolLib.lib.pas
sPath
; cesta se hledá v zařízení zadané funkcí ML_SetDeviceName
sBuffer
, jeho paměť musí být v dostatečné velikosti vyhrazena před voláním funkce, vyhrazená velikost je iMaxBufferLen
iMaxBufferLen
, pravděpodobně se celý seznam nevešel do sBuffer
/
function ML_MkDir(sPathDir:unicodestring; bRecursively:integer):integer;
ML_SetDeviceName
vytváří adresář sPathDir
bRecursively
povoluje vytvořit postupně adresáře celé uvedené cestyfunction ML_RmDir(sPathDir:unicodestring; bRecursively:integer):integer;
ML_SetDeviceName
smaže prázdný adresář sPathDir
bRecursively
=1 znamená mazání včetně všech vnořených souborů a adresářůfunction ML_GetDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
ML_SetDeviceName
získá obsah adresáře sSrcDir
a zapíše jej do adresáře sTrgDir
sTrgDir
není v PC vytvářen, sTrgDir
musí již existovat, kopíruje se jen obsah sSrcDir
(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ě)bRecursively=1
)bRecursively
=1 znamená kopírování včetně vnořených adresářůsMask
, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané mascebOverwrite
=1 povoluje “přepis” existujících souborů/adresářůfunction ML_PutDir(sSrcDir, sMask, sTrgDir:unicodestring; bRecursively, bOverwrite:integer):integer;
ML_SetDeviceName
a do adresáře sTrgDir
zkopíruje obsah adresáře sSrcDir
z PCsTrgDir
není v MTP zařízení vytvářen, musí již existovat, kopíruje se jen obsah a sSrcDir
(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ě)bRecursively=1
)bRecursively
=1 znamená kopírování včetně vnořených adresářůsMask
, jsou brány v úvahu jen adresáře, jejichž jméno také odpovídá zadané mascebOverwrite
=1 povoluje “přepis” existujících souborů/adresářůfunction ML_GetFile(sSrc,sTrg:unicodestring):integer;
sSrc
se hledá v zařízení zadaném funkcí ML_SetDeviceName
function ML_PutFile(sSrc,sTrgDir:unicodestring; bOverwrite:integer):integer;
sTrdDir
se hledá v zařízení zadaném funkcí ML_SetDeviceName
function ML_DeleteFile(sPath:unicodestring):integer;
ML_SetDeviceName
function ML_RenameFile(sSrcPath,sTrgName:unicodestring):integer;
ML_SetDeviceName
function ML_FindGpsMobileDevice(sType:string; bAlwaysShowSelection:boolean):string;
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)LOCUS_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á cestafalse
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)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í{$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.
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:
Refresh
je možné seznam aktualizovat (ML_FindGpsMobileDevice('ALL_DEVS', true);
a ML_SetDeviceName();
)ML_DeviceInfo();
)ML_FunctionalCategories();
)ML_FunctionalObjects();
) a najde mezi nimi SD kartu (pokud neexistuje, použije v dalších krocích paměť telefonu)ML_ContentTypes();
)ML_Exists();
)ML_Properties();
)ML_Exists();
)ML_MkDir();
)ML_Properties();
)ML_PutFile();
)ML_PutFile();
)ML_Properties();
)ML_GetFile();
)ML_Dir();
)ML_DeleteFile();
)ML_RmDir();
)* Could not call proc
[Script Runtime Error]: GgDrake.ggp.pas Could not call proc Routine: BUTREFRESHONCLICK''
* zaseknutí
* jméno souboru nebo adresáře
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/do Interní úložiště
, jak je v telefonu s českou lokalizací nazvané paměť v telefonu mimo výměnnou SD kartu* datum, čas
* aktualizace DLL knihovny
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 knihovna MtpLib.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ě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.
Stáhnout aktuální verzi: mtptoollib-1.0.1.gip
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.
1.0.1 (6.4.2018)
MtpCmd.exe
MtpToolLib.dll.pas
a:Drake Plus
a také staré umístění v /adrake
1.0.0 (1.2.2017)
MtpCmd.exe, MtpLib.dll, TestDllUse.ggp.pas
Zobrazit změny ve starších verzích
Skrýt změny ve starších verzích
0.9.9 (26.1.2017)
MtpCmd.exe, MtpLib.dll, TestDllUse.ggp.pas
unicode
0.7.7 (17.11.2016)
MtpCmd.exe, MtpLib.dll
TestUseDll.ggp.pas
)0.7.5 (11.11.2016)