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 КБ
      Просмотров:
      109
    • vkey.zip
      Размер файла:
      6,5 КБ
      Просмотров:
      130
    • createwnd.zip
      Размер файла:
      17,8 КБ
      Просмотров:
      101
    • DefSysMenu.zip
      Размер файла:
      13,1 КБ
      Просмотров:
      108
    • shellhook.zip
      Размер файла:
      10,3 КБ
      Просмотров:
      100
    • windus.zip
      Размер файла:
      34,1 КБ
      Просмотров:
      104
    • extraspy.zip
      Размер файла:
      27,4 КБ
      Просмотров:
      102
    • htspy.zip
      Размер файла:
      50,5 КБ
      Просмотров:
      104
    • nccalcsize.zip
      Размер файла:
      4,7 КБ
      Просмотров:
      105
    • ParentOwner.zip
      Размер файла:
      28,1 КБ
      Просмотров:
      105
    • menuspy.zip
      Размер файла:
      95,4 КБ
      Просмотров:
      110
    • wintreesnap.zip
      Размер файла:
      14,2 КБ
      Просмотров:
      106
    • 4spyxx.zip
      Размер файла:
      6 КБ
      Просмотров:
      100
    • hook4spyxx.zip
      Размер файла:
      15,1 КБ
      Просмотров:
      110
    • spyxxerr.zip
      Размер файла:
      5,9 КБ
      Просмотров:
      96
    • collection.zip
      Размер файла:
      831,9 КБ
      Просмотров:
      101
    • translucency.zip
      Размер файла:
      7,1 КБ
      Просмотров:
      99
    • gwl(-1)_tagwnd.zip
      Размер файла:
      47,4 КБ
      Просмотров:
      110
    • wi_exstyle.zip
      Размер файла:
      1,4 КБ
      Просмотров:
      100
    • wfp_review.zip
      Размер файла:
      28,1 КБ
      Просмотров:
      103
    • printlayered.zip
      Размер файла:
      19,6 КБ
      Просмотров:
      101
    • undocedit.zip
      Размер файла:
      9,4 КБ
      Просмотров:
      95
    • windus=.zip
      Размер файла:
      75 КБ
      Просмотров:
      108
    • windus_sess_tree.zip
      Размер файла:
      32 КБ
      Просмотров:
      94
    Последнее редактирование: 19 июл 2017
    xspector, yashechka, D34DC0D3_R и 3 другим нравится это.
  2. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.072
    Адрес:
    Москва
    --- Сообщение объединено, 5 окт 2018 ---
    Обновление для DefSysMenu: поправлен интерфейс и добавлено фич.

    Но вот взять tagDESKTOP.spmenuSys и tagDESKTOP.spmenuDialogSys напрямую из tagDESKTOP - сходу не удалось... Так что подсказки приветствуются.

    [​IMG]
    --- Сообщение объединено, 5 окт 2018 ---
     

    Вложения:

    • defsysmenu.png
      defsysmenu.png
      Размер файла:
      66 КБ
      Просмотров:
      85
    • defsysmenu.zip
      Размер файла:
      43,6 КБ
      Просмотров:
      10
    Последнее редактирование: 5 окт 2018
    TermoSINteZ и Mikl___ нравится это.
  3. kero

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

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.072
    Адрес:
    Москва
    Upd 2018-10-09: правка замеченных неточностей.

    А также прилагаю пример отличий в работе с Default SystemMenu и Own SystemMenu:

    1) Выбираем (если еще не выбран) режим измененного Default SystemMenu: правым кликом по кнопке "=".

    2) Запускаем к.н. штатную утилиту, окно которой изначально имеет Default SystemMenu, -
    у меня на Win7 пусть это будет calc.exe .

    3) Теперь запустим 2-ой экземпляр calc и заменим ему Default SystemMenu на Own:
    жмем кнопку calc на таскбаре (принуждая окно к минимизации), и жмем еще раз (восстанавливая на экране).
    Легко видеть, что SystemMenu окна теперь уже Own.

    4) Сравним полученные Def и Own системные поп-апы: на обоих пункт "Развернуть" задизаблен.
    Чекбокс "7" позволит это преодолеть, однако строго по-разному:
    для Def - чекбокс должен быть checked,
    для Own - чекбокс должен быть indeterminate + RL-клик по задизабленному пункту.
     

    Вложения:

    • defsysmenu.zip
      Размер файла:
      44 КБ
      Просмотров:
      9
    • defsysmenu.png
      defsysmenu.png
      Размер файла:
      60,2 КБ
      Просмотров:
      11