· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Хендл меню

. 1 . 2 . >>

Посл.отвђт Сообщен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

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090