
Быстрый поиск
Введите фрагмент названия статьи для поиска
Работа с контролом SysTabControl32 на Ассемблере
31.10.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Работа с контролом SysTabControl32 на Ассемблере
Вкладки - очень удобное решение, когда в ограниченное пространство диалогового окна надо поместить большое количество элементов. Достаточно сгруппировать их по смыслу или функциям и предоставить пользователю возможность переключаться между группами. Делается это при помощи стандартного контрола SysTabControl32.
Читать статью целиком »
Просмотров: 1914 | Комментариев: 7
Управление отображением программы на панели задач
07.09.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
При скрытии главного окна программы при помощи функции ShowWindow, программа также убирается с панели задач. Тут ничего сложного. А как сделать так, чтобы окно отображалось на экране, но при этом программа не отображалась на панели задач? В некоторых случаях это можно сделать определенной комбинацией стилей окна, например, добавив в расширенный стиль параметр WS_EX_TOOLWINDOW. Но это не всегда приемлемо, чаще всего стиль окна должен оставаться привычным, то есть с заголовком, иконкой, кнопками сворачивания и т.д. Значит нужны программные способы добавить или убрать программу с панели задач.Наиболее простой в реализации способ, который чаще всего рекомендуют использовать, основан на изменении родительского окна. Если у главного окна приложения нет родительского окна, то оно отображается на панели задач. Если в качестве родительского окна указан рабочий стол, то программа убирается из панели задач. На этапе инициализации окна ему присваивается нулевое значение в качестве хэндла родительского окна.
Code (Assembler) : Убрать нумерацию
- .wminitdialog:
- ; Если окно уже имеет родителя, то сбросить значение
- invoke GetWindowLong,[hwnddlg],GWL_HWNDPARENT
- or eax,eax
- jz @f
- invoke SetWindowLong,[hwnddlg],GWL_HWNDPARENT,0
- @@:
Code (Assembler) : Убрать нумерацию
- .taskbar_show:
- ; Добавить программу на панели задач
- invoke SetWindowLong,[hwnddlg],GWL_HWNDPARENT,0
- ...
- .taskbar_hide:
- ; Убрать программу с панели задач
- invoke GetDesktopWindow
- invoke SetWindowLong,[hwnddlg],GWL_HWNDPARENT,eax
- ...
Читать статью целиком »
Просмотров: 1542 | Комментариев: 9
Как убрать прямоугольник фокуса с элемента BUTTON
04.09.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как убрать прямоугольник фокуса с элемента BUTTON
При получении фокуса элементами диалогового окна типа BUTTON, они выделяются прямоугольной пунктирной рамкой. К таким элементам относятся простые кнопки, чекбоксы или радиопереключатели. Это хорошо и правильно, так как является стандартным поведением системы. Но сегодня я расскажу, как избавиться от этой рамки при фокусировке. Зачем это нужно? Ну, например, если вы используете собственную стилизацию элементов управления диалогового окна и не хотите, чтобы система влияла на их отображение. Или же вам просто не нравятся пунктирные прямоугольники на элементах. Лично я как раз отношусь к этой категории :)
Читать статью целиком »
Просмотров: 1448 | Комментариев: 4
Прячем ярлыки на рабочем столе
05.08.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
Очередная мелкая развлекушка на Ассемблере. Сегодня будем прятать все ярлыки на рабочем столе. Нам не понадобится никаких громоздких структур, объектов, интерфейсов и прочей паранормальщины. И что хорошо, фактически все ярлыки остаются на своих местах, ничего не надо потом восстанавливать, ведь при прятании просто скрывается дочерний элемент окна десктопа, в котором ярлыки находятся.Code (Assembler) : Убрать нумерацию
- ; Сегмент данных
- section '.data' data readable writeable
- szProg db 'ProgMan',0
- ; Сегмент кода
- section '.code' code readable executable
- ...
- invoke FindWindow,szProg,NULL
- invoke GetWindow,eax,GW_CHILD
- invoke GetWindow,eax,GW_CHILD
- ; Сохранить хэндл окна с ярлыками
- mov ebx,eax
- ; Ярлыки показываются?
- invoke IsWindowVisible,ebx
- or eax,eax
- jne @f
- ; Нет, показать
- invoke ShowWindow,ebx,SW_SHOW
- jmp loc_exit
- @@:
- ; Да, скрыть
- invoke ShowWindow,ebx,SW_HIDE
- loc_exit:
Читать статью целиком »
Просмотров: 1324 | Комментариев: 3
Перехват и обработка изменения заголовка окна другого приложения
03.08.2020 | Категория: Образ мышления: Assembler | Автор: ManHunter
В предыдущих примерах обработки системных событий мы рассматривали глобальные события, которые происходят во всей системе. Чтобы завершить эту тему, хотелось бы рассказать о системных событиях, ограниченных конкретным приложением. В качестве примера возьмем перехват и обработку изменения заголовка окна какого-нибудь приложения. Немного констант, некоторые из которых вы уже знаете.Code (Assembler) : Убрать нумерацию
- EVENT_OBJECT_NAMECHANGE = 0x800C
- WINEVENT_OUTOFCONTEXT = 0x0000
- OBJID_WINDOW = 0x0000
- CHILDID_SELF = 0x0000
Code (Assembler) : Убрать нумерацию
- ; Найти нужное окно
- invoke FindWindow,NULL,szName
- ; Сохранить хэндл найденного окна
- mov [hExample],eax
- ; Получить идентификаторы процесса и потока, относящиеся к окну
- invoke GetWindowThreadProcessId,[hExample],pID
- mov [tID],eax
- ; Установить хук на системные события
- invoke SetWinEventHook,EVENT_OBJECT_NAMECHANGE,\
- EVENT_OBJECT_NAMECHANGE,NULL,WinEventProc,\
- [pID],[tID],WINEVENT_OUTOFCONTEXT
Code (Assembler) : Убрать нумерацию
- proc WinEventProc hWinEventHook:DWORD, event:DWORD, hwnd:DWORD,\
- idObject:DWORD, idChild:DWORD, idEventThread:DWORD,\
- dwmsEventTime:DWORD
- pusha
- ; Изменяемый объект - окно?
- cmp [idObject],OBJID_WINDOW
- jne .loc_ret
- ; Изменяется само окно?
- cmp [idChild],CHILDID_SELF
- jne .loc_ret
- ; Точно-точно изменяется?
- cmp [event],EVENT_OBJECT_NAMECHANGE
- jne .loc_ret
- ; И меняется именно нужное окно?
- mov eax,[hwnd]
- cmp eax,[hExample]
- jne .loc_ret
- ...
- ...
- ; Выполняются какие-то действия по факту события
- ...
- ...
- .loc_ret:
- popa
- ret
- endp
Безусловно, возможности и область применения системных событий не ограничиваются приведенными примерами. Зато теперь вы знаете, насколько это нужный и мощный инструмент, особенно при грамотном использовании.
Читать статью целиком »
Просмотров: 1352 | Комментариев: 0


