&tag(Palm,Program); #contents *アプリ名の格納場所 [#g506083a] アプリ名(ランチャーなどに表示される名前)は普通、 -リソースタイプ:'tAIN'~ -リソースID:1000 に格納されている。 *アプリ名の取得方法1 [#ve18157a] db = DmOpenDatabaseByTypeCreator (type, creator, mode); #geshi(C){{ db = DmOpenDatabaseByTypeCreator (type, creator, mode); }} などで、データベースを開いた直後に、 #geshi(C){{ MemHandle resH; Char *resP; Char name[dmDBNameLength]; resH = DmGet1Resource (ainRsc, ainID); if (resH) { resP = (Char *)MemHandleLock (resH); if (resP != NULL) { // アプリ名(resP)を文字列nameにコピー // StrCopy (name, resP); MemHandleUnlock (resH); } DmReleaseResource (resH); } }} と、こんな感じ(で良いと思う)。nameにアプリ名が格納される。 #geshi(C){{ DmCloseDatabase (db); }} を忘れずに。 ちなみに、 #geshi(C){{ DmDatabaseInfo (cardNo, dbID, &name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); }} で得られる"name"はデータベース名。 *アプリ名の取得方法2 [#p1b6f1d2] アプリケーションのリストを作成するなら、 #geshi(C){{ SysCreateDataBaseList (type, creator, &dbCount, &dbIDs, lookupName); }} で取得するのが簡単確実。 サンプル (アプリ名のリストを作成して、リストオブジェクト(listID)にセット) #geshi(C){{ SysDBListItemType *dbListIDsP; Boolean status; UInt16 dbCount; MemHandle dbIDs; Char **listArray ListPtr listP; status = SysCreateDataBaseList (sysFileTApplication, NULL, &dbCount, &dbIDs, true); if (status == true && dbCount > 0) { dbListIDsP = MemHandleLock (dbIDs); for (i = 0; i < dbCount; i ++) listArray[i] = dbListIDsP[i].name; listP = (ListPtr)GetObjectPtr (listID); LstSetListChoices (listP, listArray, dbCount); LstSetHeight (listP, dbCount); ... MemHandleUnlock (dbIDs); } }}
AND OR