Drafts by kero

Тема в разделе "WASM.SOURCES & 2LZ", создана пользователем kero, 19 июн 2017.

  1. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.072
    Адрес:
    Москва
    (NB: некоторые порой потребуется запускать as admin, а то и as system)


    WinDrag

    Однажды наткнулся на австралийский "The Customiser" by Wanga International.

    Эта штука позволяла в реальном времени манипулировать окнами, в т.ч. дочерними:
    менять позицию, размер, состояние, текст, посылать окнам сообщения, что-то еще.
    Но, хотя окно самого Customiser было довольно компактным, захотелось еще поменьше,
    и чтоб еще удобнее, без промежуточных кликов...

    Короче - набросал WinDrag, сугубо под себя, без вылизывания, ограничившись недоделанным, но рабочим безхуковым макетом. Так с тех пор и под рукой, практически в том же виде, что и в http://www.geocities.ws/xmemor/2lz/windrag.zip .

    А на добрую память о Customiser позаимствовал его чудовищный курсор:

    cust_w.gif windrag.png

    WinDrag:
    1) изменяет позицию окон, размер, Z-order, родителя,..
    2) играет с оконным регионом: превращает пятно заданного цвета в дырку, отменяет дырки,...
    3) рисует заданным цветом, делает снапшот, сохраняет в битмап,..
    4) дает инфу о точке под курсором,..
    Подробности - в системном меню.

    Для знакомства выньте курсор из его гнезда и подрагдропте в свободном месте экрана, потом , думаю, пригодится инфа в окне WinDrag-а.


    PrintLayered

    printlayered.jpg

    (хелп в архиве)


    Undocumented EditBox
    (пример top-level окна с несовпадаюшими текстами в заголовке и на таскбаре)

    undocedit.png

    (кроме стандартного EditBox в роли top-level окна - то же и для ComboBox, и для msctls_statusbar32)


    CreateWnd
    (детекторы создания окна)

    createwnd.png


    ShellHook
    (обзорная демка)

    shellhook.png


    ExtraSpy
    (учебная демка к https://wasm.in/threads/proekt-kommentarija-k-win32-api-tutorial-by-iczelion.16085/ )

    extraspy.png

    classspy.png

    Поскольку все приаттаченное к wasm.ru давно сгинуло -
    перекинул extraspy.zip и фотки с http://www.geocities.ws/xmemor/2lz/tinyasm.html
    (версии - здесь и ниже - старенькие, есть и поновее, обновлю позже).


    HTSpy
    (учебная демка к https://wasm.in/threads/htspy-hittester.11193/ )

    htspy.png

    htlab.png , nccalcsize.png

    По вышеупомянутой причине - перекинул зипы и фотки с http://www.geocities.ws/xmemor/2lz/tinyasm.html

    Между прочим, на XP (до SP3) - "чрезмерным" вращением MouseWheel над NcCalcSize удавалось въехать в BSOD. На XP вообще было весело с окнам и меню:

    layeredchild.jpg , extantmenu.png


    ParentOwner
    (WIN API - Window Relationships: Parent, Owner, Z-order)

    ParentOwner.png

    (здесь 'GetGaParent' и 'GetGaRoot' - самопальные аналоги GetAncestor(GA_PARENT) и GetAncestor(GA_ROOT) для Win95 в Windows Virtual PC).

    Help - в системном меню.


    DefSysMenu
    (детекция и настройка default system menu, - в пределах текущего десктопа)

    DefSysMenu.png

    Подробности о контролах - в нижних статиках, наведением курсора на контрол.

    (Функционал демки включен в '"энциклопедию" MenuSpy, см. ниже).


    MenuSpy
    (справочник по меню)

    menuspy.png

    Подробности о контролах - в верхних статиках, наведением курсора на контрол.


    Windus
    (обзорная демка)

    windus.png

    Подробности о контролах - в верхних статиках, наведением курсора на контрол.
    Изменение стилей окна Windus (и кое-что еще) - в системном меню.

    Windus (из windus=.zip) - позволяет путешествовать (в пределах одного компа) по различным десктопам различных юзеров, и позволяет получить (с использованием RunFromProcess by NirSoft) текущее полное дерево sessions, windowstations, desktops & windows, несколько восполняя неработоспобность WndViewer v.2.0 by Twister на виндах новее XP.
    Windus_m (из windus.zip) - урезанный вариант.

    Для наглядности - сохраненное в тексте текущее на тот момент "дерево сессий" на компе:
    windus_sess_tree.zip (пример упорядочения окон по hwnd).


    WinTreeSnap

    Выдает полное текущее дерево окон текущего десктопа - текстом
    (мне сильно не доставало этого функционала в тогдашних Spy++),
    причем таблицей: каждой строке соответствует определенное окно,
    а каждому столбцу - определенный оконный параметр.

    Смотреть в любом редакторе с моноширинным шрифтом (Courier New, etc),
    желательно наличие в редакторе Column mode (UltraEdit, Notepad++, etc):
    легче же анализировать, по разному сортируя кучу хендлов.

    Выбором параметра командной строки можно задать 6 вариантов упорядочения дерева окон
    (порядок, принятый в Spy++, казался мне менее логично наглядным, чем в древнем WinSight),
    причем каждый можно запустить как разово, так и в цикле ожидания
    (чтобы уловить и те хрупкие окна, что не ловятся Spy++ ).

    Подробнее - в хелпе.


    Translucency

    Раз мне пригодилось, то может и еще кому-то:
    перекрывающие обзор поп-апы после наведения на них курсора - становятся полупрозрачными
    (поп-апы - как обычные #32768, так и псевдо-меню разного рода: в pdf, MS Office, Win SDK, MS VC, etc).

    После запуска - узкая полоска в верхнем левом углу, мышиный M-click по ней -> хелп.
    Закрытие - совместным нажатием L+R кнопок мышки, в любом месте экрана.


    GWL(-1)_tagWND

    Данную демку по сути спровоцировало одно примечание в MSDN, вот это:
    Бросалась в глаза жесткая повторяемость return value для top-level окна, так что утверждение never valid - воспринималось брехней.
    Поэтому были предприняты необходимые изыскания, конечным итогом которых стала табличка

    hmenu_id.png
    а попутно и освоение некоторых недокументированных оконных структур:

    gwl(-1)_tagwnd.png


    Spy++ без потаскухи: 4spyxx и hook4spyxx
    (автоматизация и усиление возможностей Spy++)

    4spyxx.png

    hook4spyxx.png

    А также SpyxxErr - ошибки, которые Spy++ делает вот уже 22 года (см. collection):

    spyxxerr.png

    1) CLASS NAME
    Top-level окна демки принадлежат одному классу, имя которого читаем в Edit-е нижнего окна.
    Если зарядить Edit другим именем и нажать кнопку "CLASS NAME" — окна демки будут пересозданы, с заданным именем класса.
    Зарядив Edit к.н. системным именем (#32768, #32770, ScrollBar, etc) — получим окна, у которых Spy++ (с 4-ой версии - по крайней мере - по 11-ую) тупо считывает GetClassInfo с 0 в hInstance, и потом врет насчет памяти, стилей итд, а на #32768 итп — выдает месбокс:
    "The specified window cannot be spied upon. Windows will not allow access to the message stream for this window."

    2) OWNED POPUP, NON-OWNED POPUP
    А тут вот что: Spy++ неверно определяет Parent окна, из-за неверного пользования GetParent.
    Дело в том, что если GetWindow однозначно вычисляет Owner (через GW_OWNER),
    то вот результат и GetParent, и GetWindowLong(GWL_HWNDPARENT) — типа "а это бабушка надвое сказала":
    выдается, по обстоятельствам, то Parent, то Owner. Но Spy++ игнорирует обстоятельства и, соответственно, врет.
    (И ведь в Win98 появилась GetAncestor(GA_PARENT), результат которой однозначен... но после 1995 года спаевцы в эту часть кода, очевидно, ни ногой).

    3) TOP-LEVEL CHILD
    А тут просто наведите любую из "потаскух" любой версии Spy++ на верхнее окно - и enjoy.


    *WindowFromPoint*_review

    То, что в описаниях функций семейства *WindowFromPoint* в MSDN есть, мягко говоря, неточности - еще ладно, но вот что не правятся десятилетиями - как-то странновато. В демке собраны все, что заметил. В свое время сообщал в блог уважаемому Р.Чену, ответа не было...

    windowfrompoint_review.png

    Пока просто выложу, подробнее - позже.


    WINDOWINFO.dwExStyle

    Однажды надумал сэкономить на коде, и вот что обнаружилось:

    wi_exstyle.png

    Окно, конечно, не обязательно Progman, короче - любое.

    Эта фигня не исправляется лет 20 (совпадало только на 98, Me и NT4), так что имейте в виду.


    User-mode BSOD

    [​IMG] , [​IMG]

    . https://wasm.in/attachments/winnest-zip.1037/ , https://wasm.in/attachments/nested_submenus_bsod-zip.1078/ (win7-32)

    Подробнее - https://wasm.in/threads/perezagruzka.23605/page-3

    P.S. Вызов 2-го бсода м.б. короче:
    1) нажать "Nested submenus",
    2) навести курсор на последнее сабменю (#22),
    3) нажать и удерживать ENTER .

    Отмечу, что функционал "Nested submenu" включен в MenuSpy (см. выше, кнопка "Nest" + чекбокс справа от нее).


    VKey
    (напоминалка)

    vkey.png


     

    Вложения:

    • windrag.zip
      Размер файла:
      17,2 КБ
      Просмотров:
      147
    • vkey.zip
      Размер файла:
      6,5 КБ
      Просмотров:
      161
    • createwnd.zip
      Размер файла:
      17,8 КБ
      Просмотров:
      136
    • DefSysMenu.zip
      Размер файла:
      13,1 КБ
      Просмотров:
      138
    • shellhook.zip
      Размер файла:
      10,3 КБ
      Просмотров:
      131
    • windus.zip
      Размер файла:
      34,1 КБ
      Просмотров:
      136
    • extraspy.zip
      Размер файла:
      27,4 КБ
      Просмотров:
      131
    • htspy.zip
      Размер файла:
      50,5 КБ
      Просмотров:
      134
    • nccalcsize.zip
      Размер файла:
      4,7 КБ
      Просмотров:
      134
    • ParentOwner.zip
      Размер файла:
      28,1 КБ
      Просмотров:
      136
    • menuspy.zip
      Размер файла:
      95,4 КБ
      Просмотров:
      144
    • wintreesnap.zip
      Размер файла:
      14,2 КБ
      Просмотров:
      136
    • 4spyxx.zip
      Размер файла:
      6 КБ
      Просмотров:
      133
    • hook4spyxx.zip
      Размер файла:
      15,1 КБ
      Просмотров:
      144
    • spyxxerr.zip
      Размер файла:
      5,9 КБ
      Просмотров:
      125
    • collection.zip
      Размер файла:
      831,9 КБ
      Просмотров:
      139
    • translucency.zip
      Размер файла:
      7,1 КБ
      Просмотров:
      129
    • gwl(-1)_tagwnd.zip
      Размер файла:
      47,4 КБ
      Просмотров:
      148
    • wi_exstyle.zip
      Размер файла:
      1,4 КБ
      Просмотров:
      129
    • wfp_review.zip
      Размер файла:
      28,1 КБ
      Просмотров:
      138
    • printlayered.zip
      Размер файла:
      19,6 КБ
      Просмотров:
      131
    • undocedit.zip
      Размер файла:
      9,4 КБ
      Просмотров:
      129
    • windus=.zip
      Размер файла:
      75 КБ
      Просмотров:
      139
    • windus_sess_tree.zip
      Размер файла:
      32 КБ
      Просмотров:
      125
    Последнее редактирование: 19 июл 2017
    xspector, yashechka, D34DC0D3_R и 3 другим нравится это.
  2. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.072
    Адрес:
    Москва
    DefSysMenu - upd 2019-03-20

    Добавлено сохранение -
    1) измененного дефолтного системного меню,
    2) положения и настройки окна демки,
    3) лога значений defsysmenu текущего десктопа.

    Восстановление состояния defsysmenu на новом десктопе - автоматом через ярлык в папке автозапуска, или при открытии демки, или драгдропом файла на окно демки.
    (При запуске по ярлыку в папке Startup: окно демки не создается, а лишь устанавливается сохраненное изменение деф.сис.меню текущего десктопа, + ExitProcess).

    К доступным для изменений полям структуры MENUINFO - добавлена демонстрация работы ф-ции GetMenuBarInfo с отсутствующей в пакете masm32 структурой MENUBARINFO (на этих структурах демка базируется):

    [​IMG]

    Примеры файлов сохранения:
    стандартное defsysmenu и текущее положение/настройка дефолтного окна демки -
    [​IMG]

    измененное defsysmenu и текущее положение/настройка окна демки с загруженными из ресурсов меню и системным меню -
    [​IMG]

    Соответствующая структура в коде демки:
    Код (Text):
    1.  
    2. DEFSYSMENU struct
    3.   mia        MENUINFO 4 dup(<>)
    4.   wp         WINDOWPLACEMENT <>
    5.   dwStyle    DWORD ?
    6.   dwExStyle  DWORD ?
    7.   bMenu      WORD ?
    8.   bSysm      WORD ?
    9. DEFSYSMENU ends
    10.  
     

    Вложения:

    Последнее редактирование: 22 мар 2019
    Mikl___ нравится это.