Создание Эльфов : Эльфостроение : Форум |
Страница 163 из 211: « 1 ... 159 160 161 162 [163] 164 165 166 167 ... 211 » |
blacklizard: |
07.02.11, 18:14 |
cachok9999, if i were to to redraw the volume bar, i will make a patch to send disp_obj pointer to elf.. |
blacklizard: |
07.02.11, 19:02 |
cachok9999, w995_r1ha035 Код: include "x.inc" include "lib.asm" org 0x14F98570 dw New+1 org 0x15E740F0 New: PUSH {R0-R7,LR} LDR R0, off_IsVolumeRedrawBook LDR R6, off_FindBook BLX R6 CMP R0, 0 BEQ loc_If_No LDR R5, [R0,0x18] LDR R0, [SP] BLX R5 B send_data loc_If_No: LDR R0, [SP] LDR R1, [SP,4] LDR R2, [SP,8] LDR R3, [SP,0xC] LDR R7, off_DefaultRedraw BLX R7 send_data: MOV R2, 0 LDR R1, [SP] LDR R0, dword_event LDR R7, off_UI_Event_wData BLX R7 POP {R0-R7,PC} IsVolumeRedrawBook: PUSH {LR} CMP R0, 0 BEQ return_0 LDR R0, [R0] LDR R0, [R0,4] adr R1, aVolumeRedraw LDR R3, off_strcmp BLX R3 CMP R0, 0 BEQ return_1 return_0: MOV R0, 0 POP {PC} return_1: MOV R0, 1 POP {PC} align 4 off_DefaultRedraw dw 0x14D66B3C+1 dword_event dw 0x3030 off_FindBook dw FindBook+1 off_strcmp dw strcmp+1 off_IsVolumeRedrawBook dw IsVolumeRedrawBook+1 off_UI_Event_wData dw UI_Event_wData+1 aVolumeRedraw db "Volume_Redraw",0 Добавлено 8.2.11 00:08 on my phone |
den_po: |
09.02.11, 00:30 |
не нужно никаких патчей. сейчас я обновил эльфлоадер (через несколько минут будет на моём сайте), с новым хуком можно получить гуй/дисп после вызова обработчика PAGE_ENTER_EVENT нужной буки (именно там гуй и создаётся). кусок примера: Код: ... //ставим хук ModifyUIPageHook(PAGE_ENTER_EVENT, HookCB, 0, 2); .. int HookCB(void *msg, BOOK* book, PAGE_DESC * page_desc, LPARAM ClientData) { debug_printf("\n!!! book '%s', page '%s'\n", book->xbook->name, page_desc->name); if( !strcmp(book->xbook->name, "VolumeControlBook") && !strcmp(page_desc->name,"VolumeControl_Active_Page") ) { debug_printf("\n!!! guilist size %d\n", book->xguilist->guilist->FirstFree); if( book->xguilist->guilist->FirstFree ) { debug_printf("\n!!! guilist[0]=%s\n", DispObject_GetName( GUIObject_GetDispObject( (GUI*) List_Get(book->xguilist->guilist,0) ) ) ); } } return 0; } в результате при выводе на экран регулятора громкости в логе имеем: 11424348 !!! book 'VolumeControlBook', page 'VolumeControl_Active_Page' 11424348 !!! guilist size 1 11424348 !!! guilist[0]=VolumeControl убийство можно отловить либо через подменённый ondelete нужного диспа, либо например при вызове страницы 11425223 !!! book 'VolumeControlBook', page 'VolumeControl_Idle_Page' Добавлено 9.2.11 00:33 выкладываю исходники этого же примера, но с использованием класслиб (немножко не до конца вычистил хвосты другого эльфа, но оно не мешает) |
den_po: |
09.02.11, 12:10 |
вышеприведённый пример больше касается работы с гуями конкретной книги. а если переделать вот так Код: debug_printf("\n!!! book '%s', page '%s'\n", book->xbook->name, page_desc->name); int sz = book->xguilist->guilist->FirstFree; debug_printf("\n!!! guilist size %d\n", sz); for(int i=0; i< book->xguilist->guilist->FirstFree; i++ ) { debug_printf("\n!!! guilist[%d]=%s\n", i, DispObject_GetName( GUIObject_GetDispObject( (GUI*) List_Get(book->xguilist->guilist, i) ) ) ); } return 0; можно будет наблюдать все гуи любых книг 577475 !!! book 'ScreensaverBook', page 'Screensaver_LockMain_Page' 577475 !!! guilist size 1 577475 !!! guilist[0]=Keylock 578852 !!! book 'MenuBook', page 'Menu_First_Page' 578852 !!! guilist size 1 578852 !!! guilist[0]=MainMenu 578852 !!! book 'MenuBook', page 'Menu_Init_Page' 578852 !!! guilist size 1 578852 !!! guilist[0]=MainMenu 582662 !!! book 'BookManager', page 'BookManager_Main_Page' 582662 !!! guilist size 3 582662 !!! guilist[0]=TabMenuBar 582662 !!! guilist[1]=ListObject 582662 !!! guilist[2]=ListObject 584248 !!! book 'DataBrowserBook', page 'DataBrowser_Main_Page' 584248 !!! guilist size 5 584248 !!! guilist[0]=TabMenuBar 584248 !!! guilist[1]=ListObject 584248 !!! guilist[2]=ListObject 584248 !!! guilist[3]=ListObject 584248 !!! guilist[4]=Feedback |
cachok9999: |
09.02.11, 14:26 |
den_po, When i want to compilate your example i have this error Код: Error[e117]: Incompatible runtime models. Module func specifies that '__dlib_file_descriptor' must be '1', but module ?xcloseall has the value '0' can you explain where is the problem, i cant find it... thanks in advance [ Редактировано cachok9999 в 9.2.11 13:27 ] |
den_po: |
09.02.11, 14:30 |
cachok9999, 1) update all includes 2) try to change project/options/general options/library configuration/library |
cachok9999: |
09.02.11, 14:36 |
den_po, thanks i solve the problem, only change library normal to full |
den_po: |
09.02.11, 20:08 |
эльфмейкерам на заметку. декодирование утф-8 Код: STRID_DATA utf8str; utf8str.lenght = SID_ANY_LEN; utf8str.flag = 8; utf8str.ptr = (char*) "тест утф8"; STRID id = Str2ID( &utf8str, 8, SID_ANY_LEN ); //если нужно в массив wchar_t //wchar_t temp[256]; //TextID2wstr( id, temp, MAXELEMS(temp) ); MessageBox(EMPTY_SID, id, NOIMAGE, 1, 0, 0); Добавлено 9.2.11 21:53 "flag" я скоро переименую в "encoding", имейте в виду Добавлено 9.2.11 22:11 заодно и 9й тип расковырял http://supertrubka.org/wiki/doku.php?id=elflib:functions:str2id |
blacklizard: |
10.02.11, 01:36 |
den_po, you mean by decoding UTF-8 string, we can use special characters? I don't get it. I read here but dont get it http://en.wikipedia.org/wiki/UTF-8 By the way, can you please add this constant to SVN? UI_MEDIAPLAYER_NEW_TRACK_EVENT W995 R1HA035 = 0x40E2 This constant have this struct Код: typedef struct { char dummy[0x28]; int track_id; TIME_int ElapsedTime; char dummy_1[0x24]; TIME_int FullTime; }UI_MEDIAPLAYER_NEW_TRACK_DATA;//DB3210 Thanks in advance |
zylka: |
11.02.11, 01:31 |
den_po, logbooks will reset at the entrance to contacts. My new elf based on ModifyUIPageHook (PAGE_ENTER_EVENT... also What is the cause? |
Страница 163 из 211: « 1 ... 159 160 161 162 [163] 164 165 166 167 ... 211 » |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=2479&start=1620 © 2005-2018 supertrubka.org |