Тик-Так

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

image

Прочитал статью на Хабре, погрустил по старым временам, когда начинал изучать программирование, имея в руках книгу Зубкова «Assembler. Язык неограниченных возможностей. Ассемблер для DOS, Windows и Unix». А теперь я расскажу страшные вещи: доступа к Интернету не было, о существовании win9xsdk и о файле windows.inc, содержащем описание констант и структур, никто и не слыхивал.

Был только Borland Tasm 5x, текстовый редактор и отладчик Win32dasm, и справочник win32hlp, найденный на дисках с дистрибутивами. Этого комплекта хватило для того, чтобы программировать самостоятельно. Не мне судить, какой ассемблер лучше, но в Tasm часто напрягала необходимость объявления функций API и поиски констант для вызова функций.

С тех пор много воды утекло, я увидел PureBasic, в котором уже объявлены все структуры, функции и константы. Поэтому я часто использую PB для написания небольших утилит, о двух из которых я расскажу

Transparent clock


image

Однажды нашел страницу comrade, программа TopText подсказала идею написать часики. Максимум изменений — это перетаскивание надписи по десктопу и выбор параметров текста — цвет и вид шрифта. Эти опции доступны в значке systray.Для обработки сообщений используется SetWindowCallback(@WndProc()).

Суть идеи в формировании области окна(в терминологии win32api Region ) в виде текста. Созданный участок накладывается на окно, поэтому оно получается полупрозрачным.
Способ перетаскивания окна описан в интернетах(но без описания), поэтому использован код обработки сообщения WM_LBUTTONDOWN.

Mouse Clock


image

Похожая программа появилась на DonationCoder.com, но мне не нравился способ отображения времени — не показывались секунды. К тому же стало интересно, как написать подобную программу? Статья MSDN немного помогла понять принцип действия.

Сначала создается окно ToolTip:

   hwndTT.l = CreateWindowEx_(#WS_EX_TOPMOST, #TOOLTIPS_CLASS, 0,#WS_POPUP | #TTS_NOPREFIX | #TTS_ALWAYSTIP,#CW_USEDEFAULT, #CW_USEDEFAULT, #CW_USEDEFAULT, #CW_USEDEFAULT,WindowID(0), 0, GetModuleHandle_(0),0)
   SetWindowPos_(hwndTT, #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE | #SWP_NOACTIVATE);

Для изменения текста к созданному окну добавляется структура

    ti.TOOLINFO
     ti\cbSize   = SizeOf(TOOLINFO);
     ti\uFlags   = #TTF_SUBCLASS;
     ti\hwnd     = hwnd
     ti\hinst    = hinst
     ;ti\lpszText = @"This is your tooltip string."
     GetClientRect_(WindowID(0), @ti\rect);
     SendMessage_(hwndTT, #TTM_ADDTOOL, 0, @ti); 

После проделанных действий запускается таймер AddWindowTimer(0, 123, 25).

   Repeat
     Event = WaitWindowEvent()

     Select event
     Case #PB_Event_Timer:
       If mou
       SendMessage_(hwndTT, #TTM_TRACKACTIVATE, #True, @ti)
       re.POINT
       GetCursorPos_(re)
         st.SYSTEMTIME
         GetLocalTime_(st)
         res.l=GetTimeFormat_(#LOCALE_USER_DEFAULT, #TIME_FORCE24HOURFORMAT,st,0,*d,1024)
         ti\lpszText = *d
        SendMessage_(hwndTT, #TTM_UPDATETIPTEXT, 0, ti); 
        SendMessage_(hwndTT, #TTM_TRACKPOSITION, 0, MakeLong(re\x, re\y))
      EndIf 

Сообщение TTM_TRACKACTIVATE говорит окну об активации ToolTip. Сообщение TTM_UPDATETIPTEXT изменяет текст — время, который формируются с помощью API функций. И последнее действие — сообщение TTM_TRACKPOSITION меняет позицию окна-подсказки, привязанную к курсору.

Для пробы я перевел код для MASM32, но параноик антивирус определяет программу как троян. Исходники приложены, любой может скомпилировать, чтобы убедиться, что программа безвредна.

Обе программы написаны для Windows 7 32bit, и я с ужасом ожидаю комментария: «не работает на… платформе».

Скачать программы+исходники
Источник: https://habr.com/ru/post/506442/


Интересные статьи

Интересные статьи

Битрикс24 — популярная в малом бизнесе CRM c большими возможностями даже на бесплатном тарифе. Благодаря API Битрикс24 (даже в облачной редакции) можно легко интегрировать с другими системами.
Периодически мне в разных вариантах задают вопрос, который «в среднем» звучит так: «что лучше: заказать интернет-магазин на бесплатной CMS или купить готовое решение на 1С-Битрикс и сделать магазин на...
В 2019 году люди знакомятся с брендом, выбирают и, что самое главное, ПОКУПАЮТ через интернет. Сегодня практически у любого бизнеса есть свой сайт — от личных блогов, зарабатывающих на рекламе, до инт...
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.