Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Готовим маки-суши (роллы)

16.09.2008 | Категория: А еще я туда ем! | Автор: ManHunter

Маки-суши (роллы)

Сегодня будем готовить маки-суши, или как их еще называют, роллы. Маки-суши, в свою очередь, подразделяются еще на два вида: хосо-маки (тонкие рулетики) и футо-маки (толстые рулетики).

Читать статью целиком »
Просмотров: 7934 | Комментариев: 10

Flash-навигация при отключенном Flash

15.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Последнее время технология Flash на сайтах становится все более популярной. Красивые анимированные меню, баннеры, и даже целые сайты выполнены на Flash. Не так давно я с интересом узнал, что изначально Flash создавался для просмотра анимированных порнушных мультиков и совершенно не предназначался для сайтостроительства. Предположим, вы относитесь к тому редкому виду дизайнеров, которые используют Flash "редко, но метко", и сделали на нем красивую навигацию для сайта. У большинства пользователей все работает как надо, ссылки, прописанные в Flash-кнопках открываются, в общем все замечательно. А что увидит пользователь сайта, если у него в браузере отключена поддержка Flash, например в целях безопасности или экономии трафика? Правильно, не увидит НИЧЕГО. Для решения проблемы предлагаю использовать следующий код:
  1. <object type="application/x-shockwave-flash"
  2.   data="images/contact_button.swf" width="100" height="30">
  3.   <param name="menu" value="false" />
  4.   <param name="quality" value="high" />
  5.   <param name="wmode" value="transparent" />
  6.   <param name="bgcolor" value="#ffffff" />
  7.   <param name="movie" value="images/contact_button.swf" />
  8.   <a href="contact.html"><img src="images/contact_button.gif" width="100"
  9.   height="30" border="0" alt="Контакты" /></a>
  10. </object>
Если все нормально, то посетитель увидит красивую кнопку contact_button.swf, если в браузере отключен Flash, будет показана ссылка на страницу контактов и графическая кнопка contact_button.gif. Если отключены и картинки, то будет показан текст-заместитель "Контакты". Как видите, в любом случае посетитель не потеряется на вашем сайте и попадет куда надо. Приведенный код работает во всех браузерах и 100% проходит проверку на валидаторе W3C.

Просмотров: 4650 | Комментариев: 6

Перетаскивание окна за любое место

13.09.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Перетаскивание окна за любое место, а не только за заголовок, реализуется очень просто, но смотрится очень эффектно. Тем более, что окно может быть вообще без заголовка. Для этого в обработчик окна надо добавить следующий код.
  1. ; Процедура обработчика окна
  2. proc  DialogProc hwnddlg,msg,wparam,lparam
  3.       ......
  4.       ; Нажата левая кнопка мышки на окне?
  5.       cmp     [msg], WM_LBUTTONDOWN
  6.       je      drag_window
  7.       ......
  8. drag_window:
  9.       ; Освободить захват мыши окном в текущем потоке и
  10.       ; восстановить обычную обработку ввода данных от мыши
  11.       invoke  ReleaseCapture
  12.       ; Перенаправить сообщение передвижения мышью SC_MOVE на заголовок окна
  13.       ; 61458 = SC_MOVE or HTCAPTION, в FASM по умолчанию не определено,
  14.       ; поэтому сразу задается числовым значением
  15.       invoke  SendMessage,[hwnddlg],WM_SYSCOMMAND,61458,0
  16.       ......
Вызов функции ReleaseCapture необходим для освобождения окна от захвата сообщений мыши. Даже если вы сами не устанавливали эти перехватчики, то они вполне могут быть установлены сторонними программами. В этом случае окно может перемещаться неправильно. Исходник с откомпилированным файлом прилагается.

Читать статью целиком »
Просмотров: 6513 | Комментариев: 6

Поздравляю с Днем программиста!

12.09.2008 | Категория: Всякая всячина | Автор: ManHunter

Ура! Вот и наступил очередной профессиональный праздник! Всех коллег и "товарищей по цеху" сердечно поздравляю с этой красивой датой - 0x100 день года. На улице прохладно, так что купание в фонтане придется отложить :)

Просмотров: 3278 | Комментариев: 1

Повышение привилегий процесса

09.09.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Любой процесс в системе выполняется с правами какого-то пользователя или самой системы. Привилегии – это права процесса на совершение каких-либо действий по отношению ко всей системе, и при выполнении каких-либо привилегированных операций система проверяет, обладает ли пользователь соответствующей привилегией. Например, выключение и перезагрузка компьютера компьютера относятся как раз к таким операциям, и без повышения привилегий функция ExitWindowsEx завершится с ошибкой. Готовых решений на FASM найти не удалось, пришлось портировать из языков высокого уровня.
  1. ; Сегмент данных
  2. section '.data' data readable writeable
  3.  
  4. ; Определяем константы
  5. TOKEN_ADJUST_PRIVILEGES = 20h
  6. TOKEN_QUERY             = 8h
  7. SE_PRIVILEGE_ENABLED    = 2h
  8.  
  9. ; Определяем необходимые структуры, потому что в FASM'е их нет
  10. struct LUID
  11.   lowPart  dd ?
  12.   HighPart dd ?
  13. ends
  14.  
  15. struct LUID_AND_ATTRIBUTES
  16.   pLuid       LUID
  17.   Attributes  dd ?
  18. ends
  19.  
  20. struct _TOKEN_PRIVILEGES
  21.   PrivilegeCount   dd ?
  22.   Privileges       LUID_AND_ATTRIBUTES
  23. ends
  24.  
  25. TTokenHd dd ?
  26.  
  27. udtLUID  LUID
  28. ; Важно! Структура _TOKEN_PRIVILEGES должна быть выровнена на границу 4 байт!
  29. align 4
  30. tkp     _TOKEN_PRIVILEGES
  31.  
  32. SE_SHUTDOWN_NAME db 'SeShutdownPrivilege',0
  33.  
  34. ; Сегмент кода
  35. section '.code' code readable executable
  36.  
  37.     invoke    GetCurrentProcess
  38.  
  39.     ; Открыть маркер доступа (access token), ассоциирующийся с процессом
  40.     invoke    OpenProcessToken,eax,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,TTokenHd
  41.     or        eax,eax
  42.     jz        loc_exit  ; Ошибка
  43.  
  44.     ; Получить текущее значение привилегии на выключение и
  45.     ; перезагрузку системы
  46.     invoke    LookupPrivilegeValue, NULL, SE_SHUTDOWN_NAME, udtLUID
  47.     or        eax,eax
  48.     jz        loc_exit  ; Ошибка
  49.  
  50.     ; Заполнить структуры
  51.     mov       [tkp.PrivilegeCount],1
  52.     mov       [tkp.Privileges.Attributes],SE_PRIVILEGE_ENABLED
  53.     mov       eax,[udtLUID.lowPart]
  54.     mov       [tkp.Privileges.pLuid.lowPart],eax
  55.     mov       eax,[udtLUID.HighPart]
  56.     mov       [tkp.Privileges.pLuid.HighPart],eax
  57.     invoke    AdjustTokenPrivileges,[TTokenHd],0,tkp,0,0,0
  58.  
  59.     ; Здесь будет код, требующий повышенных привилегий, 
  60.     ; например выключение компьютера
  61.     invoke    ExitWindowsEx,EWX_POWEROFF,NULL
  62.     ...
  63.  
  64.     ; Выход
  65. loc_exit:
  66.     invoke    ExitProcess,0
Выключение рассмотрено как наиболее часто встречающаяся задача, более подробное описание использованных структур и функций вы можете найти на сайте Microsoft Developer Network.

Просмотров: 7275 | Комментариев: 5

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2021
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.1 сек. / MySQL: 2 (0.0334 сек.) / Память: 4.75 Mb
Наверх