1 (изменено: Michael, 2021-12-13 21:18:10)

Тема: AHK: Виджет / GUI на рабочий стол, данные со страницы

Доброго времени суток!

Хочу сделать простенький виджет, для удобства, дабы не открывать страницу браузера, на рабочий стол.

https://ru.tradingview.com/symbols/ETHU … ge=BINANCE

Сверху курс ETH черным большим шрифтом в долларах. Он постоянно меняется. Хотелось бы вот эти цифры засунуть в ГУИ и на рабочий стол отправить.
Естественно, чтобы также менялось постоянно.

Также по этой ссылке тоже самое: https://ru.tradingview.com/symbols/BTCU … ge=BINANCE

Есть еще несколько ссылок, но думаю, если пример будет, остальное сам смогу реализовать.

Заранее спасибо!

2

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Не получится, если только не запускать браузер в фоне. Эти цифры формируются джаваскриптом уже после загрузки страницы. Для того, чтобы этот джаваскрипт отработал, нужна среда выполнения.

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

3

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker
Вообще никак?
Или конкретно на этом сайте?
Вот еще несколько, их в принципе не так уж и мало, подобных.
https://www.cryptometer.io/data/binance/eth/usdt
https://www.binance.com/ru/trade/ETH_USDT

4

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

С cryptometer.io можно:

url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price)
MsgBox, % Price

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := Arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker
Работает!
Пытаюсь сделать отображение в GUI, но что-то пока не выходит, не подскажите, что не так?

#SingleInstance Force
#NoEnv
SetBatchLines -1

Name = Test

GroupAdd, AppGroup, % Name

;Gui +AlwaysOnTop
;Gui Color, 0x000000
Gui Add, Text, vText x8 y8 w250 h60 +0x200, % Price
Menu, Tray, NoIcon

Gui Show, w246 h365, % Name
Return

GuiClose:
ExitApp

Price:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price)
GuiControl,, Text, % Price
;MsgBox, % Price

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

6

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

MsgBox, Вы увидите это сообщение
Return

MsgBox, Это сообщение не появится, как думаете, почему?
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker
Потому что нету Return.
Но с ним тоже ничего не показывает:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Name = Test

GroupAdd, AppGroup, % Name

;Gui +AlwaysOnTop
;Gui Color, 0x000000
Gui Add, Text, vText x8 y8 w250 h60 +0x200, % Price
Menu, Tray, NoIcon

Gui Show, w246 h365, % Name
Return

GuiClose:
ExitApp

Price:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price)
GuiControl,, Text, % Price
return
;MsgBox, % Price

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

8

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Michael пишет:

Потому что нету Return.

Уверены? А с return как будет?

MsgBox, Вы увидите это сообщение
Return

MsgBox, Это сообщение не появится, как думаете, почему?
Return

Так?

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

9

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker

MsgBox, Вы увидите это сообщение

MsgBox, Это сообщение не появится, как думаете, почему?
Return

Вот так я вижу сначала первое, потом второе.
В моем случае это почему-то не работает:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Name = Test

GroupAdd, AppGroup, % Name

;Gui +AlwaysOnTop
;Gui Color, 0x000000
Gui Add, Text, vText x8 y8 w250 h60 +0x200, % Price
Menu, Tray, NoIcon

Gui Show, w246 h365, % Name
return

GuiClose:
ExitApp

Price:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price)
GuiControl,, Text, % Price

;MsgBox, % Price

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}
return

Знаю, вокруг да около хожу, проблемы не вижу... Туплю...

10

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

А почему второе сообщение стало появляться?

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

11

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Потому что добавил Return в конец. Что и сделал в моем скрипте...
Мне уже самому смешно, что мне такие вопросы задаете, чувствую себя умственно-отсталым...)))

12

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

А если убрать Return, тогда перестаёт появляться?

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

13

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Я в вас верю, вы способны пройти этот челлендж!

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

14

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker пишет:

А если убрать Return, тогда перестаёт появляться?

Нет, всё также появляется, попробовал в своём скрипте без Return - никаких изменений...
Не пойму, как это связано.

15

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Наверно, стоит почитать, что такое Return, и для чего оно нужно. А также ExitApp.

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

16

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Почитал, понял ошибку.
Показывает курс при старте программы:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Name = Test

GroupAdd, AppGroup, % Name

Gui +AlwaysOnTop
;Gui Color, 0x000000
Gui Add, Text, vText x8 y8 w250 h60 +0x200,
Menu, Tray, NoIcon
Gui Show, w246 h365, % Name

Price:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price)

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

GuiControl,, Text, % Price

Только он статичный, запрос делается один раз, а как сделать ежесекундно (обновляемый автоматически)? Хотя бы в какую сторону копать?

17

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Смотрите в сторону SetTimer. Но если сайт слишком часто долбить запросами, ему это может не понравиться.

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

18

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker
Готово. Обновляется раз в секунду.
Пытаюсь добавить еще один курс (Биткоина) по аналогии.
Ошибка при компиляции:

Duplicate function definition.
Specifically: WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "")

Вот код:

#SingleInstance Force
#NoEnv
SetBatchLines -1

Name = Test

GroupAdd, AppGroup, % Name

Gui +AlwaysOnTop
;Gui Color, 0x000000
Gui Add, Text, vText1 x8 y8 w250 h60 +0x200, uuu
Gui Add, Text, vText2 x8 y58 w250 h60 +0x200,
Menu, Tray, NoIcon
Gui Show, w246 h365, % Name

SetTimer, Price1, 1000

Price1:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price1)

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

GuiControl,, Text2, % Price1

SetTimer, Price2, 1000

Price2:
url := "https://www.cryptometer.io/data/binance/eth/usdt"

html := WebRequest(url,, {"Pragma": "no-cache", "Cache-Control": "no-cache, no-store"})
RegExMatch(html, "class=""lastprice"">\K[\d,.]+", Price2)

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(arr) + 8 + A_PtrSize)
   length := arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

GuiControl,, Text2, % Price2

В чем может быть проблема?

19

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

Я понял, вы хотите в этой теме решить все вопросы, связанные с написанием скриптов на AHK. Вообще, программирование предполагает способность иногда думать и искать решения самостоятельно.
У нас есть правило: одна тема — один вопрос.

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

20

Re: AHK: Виджет / GUI на рабочий стол, данные со страницы

teadrinker
Понял