В IDA 5.2 функция IDC SetColor(), при нажатии hotkey'я, визуально не изменяет цвет, хотя в базе изменение цвета прописывается. Подробнее: Код (Text): static _ToggleColor(void) { auto c,ea,r; ea=ScreenEA(); c=GetColor(ea,1); if (c==0xFFFFFF) {c=0xFFE0E0;} else {c=0xFFFFFF;}; r=SetColor(ea,1,c); Message("r=%d, c=%x\n",r,c); } В командной строке или окне ввода idc-команд (Shift-F2) _ToggleColor(), переключает цвет, выводит "r=1, с=FF...". После установки хоткея, AddHotkey("*","_ToggleColor"), жму [*], выводится "r=1, с=FF...", цвет не переключается, хотя функция SetColor() выполняется успешно. Закрываю и открываю файл - отображается нужный цвет. Также цвет отображается при открытии-закрытии диалогов настроек. Как пофиксить?
До выполнения функции элемент, на котором стоит курсор, как правило, имеет цвет #define DEFCOLOR 0xFFFFFFFF // Default color Как следствие, при _первом_ выполнении c=GetColor(ea,1); ты получаешь 'c==0xFFFFFFFF', а _не_ 'c==0xFFFFFF' со всеми вытекающими. Обнули старший байт перед проверкой: if ((c&0xFFFFFF)==0xFFFFFF) {c=0xFFE0E0;} else {c=0xFFFFFF;};
Sergey_R, во-первых начальное значение цвета никак не влияет на логику алгоритма, а во-вторых неплохо бы проверять свои солюшены перед тем как их постить.
В 5.3 код работает. Думаю, просто не обновляется экран. Попробуй вызвать Jump(here) или Refresh() в конце.