|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Мар 26, 2004 13:36:29 Мне надо по хендлу меню узнать какое это меню всплывающее, главное, системное. Испробывал много способов и никак не получаеться распознать меню. Сейчас на стадии 70 -80% готовности новое меню. |
|
|
Дата: Мар 26, 2004 13:47:14 Анализируй wParam сообщения WM_MENUSELECT |
|
|
Дата: Мар 27, 2004 08:42:00 Думаю, я смогу тебе помочь. Растолкуй поподробнее, что у тебя за задача. |
|
|
Дата: Мар 27, 2004 13:11:54 Toxic Есть хендл меню и всё и нужно определит какое это меню. Какое это меню, я ушел от решения этой задачи но всё же интересно можно ли это сделать. Вот меню, это примеры к библе. Это не в обработке сообщения. |
|
|
Дата: Мар 27, 2004 15:06:51 Toxic Я не совсем то написал. Мне интерсно может по битам в хендле пожно получить нужною информацию. |
|
|
Дата: Мар 28, 2004 03:26:25 Пардон. Я таким не занимался. Я когда-то плотно работал с OWNERDRAW меню, и у меня все делалось в обработчике сообщения. |
|
|
Дата: Мар 28, 2004 09:25:12 Chib777 Не проверял, но может GetWindowLong поможет? |
|
|
Дата: Мар 28, 2004 10:46:08 · Поправил: S_T_A_S_ может по битам в хендле пожно получить нужною информацию Вероятнее всего, так мажно. Но официально HMENU - указатель на VOID. Т.е. это никак не документировано. Фень Юань, например, приводит методику исследования HGDIOBJ, и "раскапывает" эти биты, но по HMUNU ничего не могу сказать :( |
|
|
Дата: Мар 28, 2004 13:10:46 [ Chib777: Мне интерсно может по битам в хендле пожно получить нужною информацию. ] Абсолютно исключено. Что такое хендл GDI/USER объекта можно почитать в доке к айсу "Using SoftICE" в разделе "How Handle Values Are Created". |
|
|
Дата: Мар 28, 2004 15:37:50 Four-F HGDIOBJ (помимо индекса в таблице, адрес которой возращается GdiQueryTable) содержит байт, определяющий тип объекта. По крайней маре так пишет Юань, и это показывает его же прога. Наверняка, с HMENU никто не копал просто.. Или я где-то туплю? Пошел искать доки с сайсу.. |
|
|
Дата: Мар 29, 2004 13:18:40 Да, есть такое дело - посмотрел я его GDIObj. Эта табличка хендлов, похоже, для оптимизации нужна, чтобы каждый раз в ядро не лезть. Но скорее всего по ней, даже если глубже копнуть, не удастся дифференцировать типы меню. А по самому хендлу все равно ничего определить невозможно. ЗЫ: Вот ещё нашел http://www.geocities.com/the_real_sz/misc/bear_.htm |
|
|
Дата: Мар 29, 2004 14:24:44 Непонятна фраза в этой главе: To validate an object handle: ObjectTable [LOWORD(handle)]. InstanceCount == HIWORD(handle); Они должны совпасть или не должны совпасть. Вообще что и почему так делается? |
|
|
Дата: Мар 29, 2004 16:30:07 Небольшое дополнение к той ссылке ^^ из программы Юаня Handles: const char * GDIObjectTypeName(HGDIOBJ obj)
{
static char rslt[32];
switch ( HIWORD(obj) & 0x7F )
{
case 0x01: return "dc";
case 0x04: return "region";
case 0x05: return "bitmap";
case 0x08: return "palette";
case 0x0a: return "font";
case 0x10: return "brush";
case 0x21: return "enhmetafile";
case 0x30: return "pen";
case 0x50: return "extpen";
default:
wsprintfA(rslt, "unknown(%xh)", HIWORD(obj) & 0x7F);
return rslt;
}
}
Для стандартных объектов 7бит того байта установлен в 1 Младшие 12 бит HGDIOBJ - индекс в таблице The Svin Это глава откуда?? |
|
|
Дата: Мар 29, 2004 18:33:51 Using SoftIce как Four-F сказал. |
|
|
Дата: Мар 29, 2004 19:43:57 · Поправил: S_T_A_S_ The Svin А.. я ленивый еще не нашел, но вот как пишет Юань (если я правильно понял про что): GdiTableCell: DWORD pKernel ;; -> E1000000h -> paged pool WORD nProcess ;; 0 для стандартных объектов, для остальных = GetCurrentProcessId WORD nCount ;; для некоторых объектов счетчик использования WORD nUpper ;; старший WORD HGDIOBJ WORD nType ;; внутренний тип, младший байт см. ^^ DWORD pUser ;; адрес структуры user mode nUpper - похоже ваш InstanceCount - используется для проверки валидности, т.е. если совпадает с HIWORD(handle) - то handle валиден. Используется системой для доп. проверки хэндлов и для поддержки GDI16 ЗЫ Вот еще примерчик, может быть пригодится, sys положите в С:\ _402620782__example.zip |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090 |