1 (изменено: DnsIs, 2011-04-09 19:59:19)

Тема: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Уважаемые форумчане, может тут так нельзя, просто просить чистый кон не предлагая, но я надеюсь на вашу благосклонность, может кто-нибудь уделит мне минутку времени.
Не охота заниматься излучением языка не освоив хотя бы до уверенного пользования другие, уже начатые.

Появилась необходимость мне для комфортной работы, забиндить пару тройку клавиш, и я решил сделать это на AHK, он вроде бы в этом деле лидер. И действительно отрабатывает отлично. Небольшой вроде бы кодик, но очень на работе помогает. Суть не в этом.
А Захотелось мне что бы мне текущий статус хоткеев отслеживать. И родилась у меня идея, точнее вспомнилась, видел у кого то уже.
Хочу в каком-нибудь углу монитора, неважно в каком видеть пиксель. Просто обычный пиксель. Разных цветов. И работе не мешает, и должен быть заметен.
Ну и условие, что бы был только пиксель, и что бы был всегда поверх всех окон не мерцающий, и что был таким, что фик закроешь его.

Вот такая вот просьба.
Заранее благодарю всех.

Нас невозможно сбить с пути, нам пофигу куда идти.

2

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

; координаты окна
x = 1200
y = 100

; ширина и высота окна, можно изменить на 1
w = 5 
h = 5

Color = 0xFF0000

WS_EX_TRANSPARENT := 0x20
WS_EX_LAYERED := 0x80000

Gui, +AlwaysOnTop -Caption +ToolWindow +LastFound
Gui, Color, % Color
Gui, Show, x%x% y%y% w%w% h%h% NA   ; показываем окно в выбранных координатах и размерах
WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT   ; добавляем прозрачность для кликов мыши
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: Mixail, 2011-04-09 23:14:31)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

#SingleInstance Forse
Gui, +LastFound
Gui, Color, Blue   ; любой цвет, которого нет в изображении
WinSet, TransColor, Blue

Gui, -Caption      ; Удаляет "неклиентскую" часть окна.
                  ; Эта команда только после WinSet, TransColor

Gui, Add, Pic, x10 y10 w1 h1 border, %A_WinDir%\Web\Wallpaper\Bliss.bmp      ; любая картинка
; опция "Border" необязательна, используется для того, чтоб были видны края изображения

Gui, Show,, blablabla
WinWait blablabla
WinSet, AlwaysOnTop, On, blablabla
Return

4

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

А чем это лучше?
И картинка там зачем?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Прегромаднейшее спасибо вам.

Нас невозможно сбить с пути, нам пофигу куда идти.

6 (изменено: hrnvam, 2011-05-17 14:33:24)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

А как сделать красную точку в центре экрана поверх активных окон? (Чтоб отображалась в игре counter-strike source)
Напишите код, заранее спасибо

7

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

hrnvam, у нас принято использовать заглавные буквы. Отредактируй свои посты в этой и соседней ветке.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8 (изменено: Grey, 2011-05-21 14:04:11)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

hrnvam пишет:

...чтоб отображалась в игре counter-strike source

На сколько я знаю, Valve Anti Cheat (программа античит в онлайн играх от Steam) а так же PunkBuster (такой же античит только во многих других онлайн играх) классифицируют такие оверлеи как CROSSHAIR HACK и жестко карают за использование подобных вещей выдавая перманентные баны (permanent ban). Даже за оверлей размером в один пиксель последовало наказание.

9

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

hrnvam пишет:

а как сделать красную точку в центре экрана поверх активных окон? (чтоб отображалась в игре counter-strike source)
напишите код, заранее спасибо

Так карандашом же, расслюнявьте и по экрану слегка

10

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

hrnvam пишет:

а как сделать красную точку в центре экрана поверх активных окон? (чтоб отображалась в игре counter-strike source)

В контре нужды не было, а вот в DoD-е для винтовки у нас некоторые на экран ниткой перекрестие делали(к монитору скочем) - и стрелять без "прильнуть к прицелу" нормально было, и матценности портить не нужно(это уже про рисование на экране карандашом), и ни один античит(кроме соседа) не пропалит

11 (изменено: hrnvam, 2011-05-17 14:35:35)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Всё отказываюсь от этой идеи

12 (изменено: Grey, 2011-05-17 21:50:13)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

2 hrnvam Собственно эта идея давно уже реализована, даже на моей памяти было три фикса.

13

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Добрый день.
Я использовал код товарища teadrinker для прорисовки нужного мне окна поверх всех остальных, и столкнулся с проблемой - при использовании команды WinActivate оно периодически скатывается вниз((
Код такой:

WinClose, ahk_class XmainClass
IfWinNotActive, ahk_class ThunderRT6FormDC, , WinActivate, ahk_class ThunderRT6FormDC, 
WinWaitActive, ahk_class ThunderRT6FormDC 
MouseClick, left, %MenuTargetX%,%MenuTargetY%

Когда вручную переключаю окна - все нормально, когда в другом скрипте выполняется эти строчки - через раз WS_EX_TRANSPARENT и WS_EX_LAYERED слетают. Полдня сегодня бился, на данный момент просто перезапускаю скрипт по хоткею, когда это проблема возникает. Но хотелось бы все-таки разобраться, чего ж оно так.

14

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Если бы ещё знать, что за окно ahk_class ThunderRT6FormDC. Возможно, оно тоже имеет экс-стиль WS_EX_TOPMOST (AlwaysOnTop), в таком случае окна конкурируют, и при выполнении команды WinActivate окно оказывается сверху. И как ты определяешь, что «WS_EX_TRANSPARENT и WS_EX_LAYERED слетают»?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: Dremlin, 2011-08-20 09:53:33)

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

ThunderRT6FormDC - это и есть программа, для которой пишется скрипт. WS_EX_TOPMOST или что-то подобно там есть, но в обычных условиях они не конфликтуют - вручную я десятки раз переключал программы, запускал ThunderRT6FormDC поверх остальных окон - все работало. Проблема именно при переключении на нее, причем визуально это происходит в момент, когда исполняется приведенный выше код.

И, на всякий случай, код окна, которое должно находится поверх остальных:

Gui, +AlwaysOnTop -Caption +ToolWindow +LastFound
Gui, Color, % Color
Gui, Font, s20, Verdana
Gui, Add, Text, cWhite x1 y1 w40 h35 , 0
Gui, Show, x%x% y%y% w%w% h%h% NA   ; показываем окно в выбранных координатах и размерах
WinSet, ExStyle, % "+" WS_EX_LAYERED|WS_EX_TRANSPARENT   ; добавляем прозрачность для кликов мыши

SetTimer LoadShots, 500

LoadShots:
{
WinSet, ExStyle, ^0x80000, Shots.exe ; shots.exe - это и есть откомпилированный скрипт
WinSet, ExStyle, ^0x20, Shots.exe ; сначала переключаю стили, чтобы можно было менять значение Static1 в окне
ControlSetText, Static1, %Result%, Shots.exe; вот тут и меняю
WinSet, ExStyle, ^0x80000, Shots.exe ;
WinSet, ExStyle, ^0x20, Shots.exe ;... и переключаем обратно
}
Return

Чуть не забыл - WS_EX_TRANSPARENT и WS_EX_LAYERED слетают, как мне кажется, потому что после возникновения проблемы любое окно при активации перекрывают окно скрипта.

16

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Dremlin пишет:

WS_EX_TOPMOST или что-то подобно там есть, но в обычных условиях они не конфликтуют - вручную я десятки раз переключал программы

Вручную и командой WinActivate — разные вещи, она всегда выводит активируемое окно вперёд. Чтобы вернуть на передний план нужное окно, можно выполнить такой код:

DllCall("SetWindowPos", UInt, hwnd, Int, HWND_TOP := 0
   , Int, 0, Int, 0, Int, 0, Int, 0
   , UInt, (SWP_NOACTIVATE:=0x10)|(SWP_NOMOVE:=0x2)|(SWP_NOSIZE:=0x1))

где hwnd — идентификатор окна.
Всё-таки я не понял, почему ты решил, что «WS_EX_TRANSPARENT и WS_EX_LAYERED слетают». Окно с этими стилями не обязательно должно находиться на переднем плане.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

teadrinker, спасибо, буду пробовать.
А с WS_EX_TRANSPARENT и WS_EX_LAYERED я туплю, они тут действительно не при делах, извиняюсь.

Вручную и командой WinActivate — разные вещи, она всегда выводит активируемое окно вперёд.

Вот я что-то такое и подозревал. В справке еще упоминается WinActivateBottom, он, кажется, не выводит поверх "always on top"-окон. Попробую, что подойдет.

18

Re: AHK: Нарисуйте пожалуйста точку. Просто обычную точку.

Dremlin пишет:

В справке еще упоминается WinActivateBottom, он, кажется, не выводит поверх "always on top"-окон.

Нет, это не то. Разница с WinActivate лишь в том, что выбирается нижнее из окон, подходящее под параметр WinTitle.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder