Отрисовка кнопок класса button

Discussion in 'WASM.WIN32' started by Rockphorr, Feb 25, 2023.

  1. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Собственно в какой dll находится код отвечающий за отрисовку кнопок класса button ?
     
  2. Thetrik

    Thetrik UA6527P

    Blog Posts:
    0
    Смотря какой кнопки. Может быть comctl32, а может user32.
     
  3. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    Rockphorr, (Привет! Давно тебя не было :) )

    20 способов создания кнопки

    06.jpg

    Исходный текст взят на сайте Исходники Assembler
     

    Attached Files:

  4. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Благодарю, на досуге посмотрю.
    Самой обычной как ок, отмена или пуск.
     
  5. f13nd

    f13nd Well-Known Member

    Blog Posts:
    0
    У всякого окна можно GetWindowLong'ом получить GWL_WNDPROC, и етот самый вндпрок будет находиться в образе модуля, который зарегистрировал класс данного окна (или варварски засабклассил его).
     
    Mikl___ likes this.
  6. Thetrik

    Thetrik UA6527P

    Blog Posts:
    0
    Это зависит от манифеста. Если кнопка со стилями то в comctl32 если без то user32.
    --- Сообщение объединено, Feb 26, 2023 ---
    Такое не будет работать для SetWindowSubclass которая будет возвращать всегда адрес в пределах Comctl32.
    --- Сообщение объединено, Feb 26, 2023 ---
    Оригинальную процедуру можно получить через GetClassInfoEx
     
    Mikl___ likes this.
  7. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    olly.JPG
    Вот на скрине программа хеллоу ворлд, создается окно типа button вызывается SetWindowLongA (я меняю функцию на свою, а в своей вызываю оригинальную) и мне она возвращает значение по которому можно вызвать оригинальную функцию с помощью CallWinowProc(значение возвращенноеSetWindowLongA)

    Как собственно понять из какого модуля ?? скорее всего comctl32 это исключено так как не подключал его инклуд файл

    по f7 в вызовы dll зайти не получается
     
    Last edited: Feb 27, 2023
  8. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    Rockphorr,
    GetModuleHandleEx возвращает базу модуля по адресу.
     
    Mikl___ likes this.
  9. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0

    Syntax

    C++
    BOOL GetModuleHandleExA(
    [in] DWORD dwFlags,
    [in, optional] LPCSTR lpModuleName,
    [out] HMODULE *phModule
    );

    Parameters

    [in] dwFlags
    This parameter can be zero or one or more of the following values. If the module's reference count is incremented, the caller must use the FreeLibrary function to decrement the reference count when the module handle is no longer needed.
    GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS (0x00000004)

    The lpModuleName parameter is an address in the module.

    а если система допотопная - win95 ?
     
  10. rmn

    rmn Well-Known Member

    Blog Posts:
    0
    Я настолько обратной совместимостью не страдаю :)
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Я нашел, для Windows 95 это 16 битная библиотека user.exe
    --- Сообщение объединено, Aug 15, 2023 ---
    как насчет Windows 3.11 и Norton Desktop ???
     
    TrashGen likes this.
  12. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Собственно вопрос по NE формату user.exe --- сайс показывает в скобочках число когда трассируется код из user.exe --- правильно ли я понял что это номер сегмента, ибо экспериментальное подтверждение тому было запись этого номера и смещение куска кода в сайсе, а потом поиск кода из сайса в IDA перебором номеров сегментов и указания смещения ??? (номер в скобках у сайса совпал с номером в ида)
     
    Last edited: Oct 1, 2023