1

Тема: AHK: Pointers to Objects

https://www.autohotkey.com/docs/Objects … n_Pointers
Так понимаю что тут написано про то что по адресу объекта из одного скрипта, можно из другого скрипта получить доступ к нему?
Что то не получается.

addr := адрес объекта в другом скрипте
ObjAddRef(addr)
o := Object(addr)
MsgBox % o.key1
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

2

Re: AHK: Pointers to Objects

Адрес объекта находится в виртуальном адресном пространстве своего процесса, в другом он не имеет смысла, так что нет. Наверно, можно прочесть содержание объекта из памяти другого процесса, зная, как он там устроен. Но для обмена простыми объектами есть несколько других способов, например есть GlobalContainer или winapi RegisterActiveObject.

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

3

Re: AHK: Pointers to Objects

Через RegisterActiveObject не поддерживается например цикл разбора for, и кажется ещё что то приносит неудобства, не помню, но давно им пользуюсь.
Про GlobalContainer ничего не нашёл, расскажи.

Хотелось бы не только получать значения и применять к объекту все методы AutoHotkey, но и изменять объект во всех скриптах.

teadrinker пишет:

Адрес объекта находится в виртуальном адресном пространстве своего процесса

А адрес этот относительно некого адреса самого процесса? Может надо просто прибавить некоторое смещение в глобальном контексте?

teadrinker пишет:

в другом он не имеет смысла

А это про какие случаи...

In some rare cases it may be necessary to pass an object to external code via DllCall()

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

4

Re: AHK: Pointers to Objects

Про GlobalContainer на нашем форуме обсуждали.
Про процессы тут почитай:
https://progamercity.net/c-code/227-c-v … siess.html

serzh82saratov пишет:

А это про какие случаи...

Наверное про те, где dll ожидает объект.

5 (изменено: Alectric, 2020-04-15 18:14:17)

Re: AHK: Pointers to Objects

GlobalContainer
Эх, нашел бы я эту ссылку раньше...

Malcev пишет:

Про GlobalContainer на нашем форуме обсуждали.

На нашем форуме такого не нашел.


Попробовал такой скрипт:
В Main.ahk использовать tooltip вместо msgbox.


;Script1.ahk
#singleinstance,force
myContainer := new GlobalContainer("MyStorage")
loop
{
  sleep,500
  myContainer.arr := ["test ", a_index]
}

Функция в Main.ahk вызывается при каждом изменении данных.

Теперь столько кода нужно перелопатить чтоб это использовать.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

6

Re: AHK: Pointers to Objects

Alectric пишет:

На нашем форуме такого не нашел.

Странно. Вроде бы поиск у всех должен одинаково работать.
Ищется через гугл по слову GlobalContainer.
http://forum.script-coding.com/viewtopic.php?id=5573

7

Re: AHK: Pointers to Objects

Я искал только AHK. Даже и не думал в WSH залезть.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

8

Re: AHK: Pointers to Objects

Пример на AHK.

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

9 (изменено: Alectric, 2020-04-15 22:20:06)

Re: AHK: Pointers to Objects

OFF:
Конфуз. Для чего тогда придумали на форуме эти разграничения в виде "AHK:", "JS:", "WSH:" и т.д.
Меня лично интересует только AHK, потому и не захожу в темы где указано "WSH:" и прочее.
Откуда бы я узнал что там есть пример для AHK, тема то для WSH. Подгорает немного от такого.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

10

Re: AHK: Pointers to Objects

Alectric пишет:

Меня лично интересует только AHK

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

11 (изменено: Alectric, 2020-04-15 22:30:41)

Re: AHK: Pointers to Objects

OFF:
На изучение исполнений на других языках да еще и на последующую конвертацию на AHK у меня не остается сил после работы. На работе языков хватает: STL, SCL, LAD, FBD.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

12

Re: AHK: Pointers to Objects

Alectric пишет:

На изучение исполнений на других языках да еще и на последующую конвертацию на AHK у меня не остается сил после работы

Но ведь всегда можно спросить/попросить об этом на AHK форумах.

13 (изменено: serzh82saratov, 2020-04-16 01:14:43)

Re: AHK: Pointers to Objects

Alectric
Тоже не нашёл с первого раза.
WSH и VBS переносятся проще всего, с AutoIt уже намного сложнее.

teadrinker
А ты сам этим пользуешься? По ссылке у тебя возник вопрос, и ещё:

Xameleon пишет:

2 Rumata: Да. Есть некоторые "косяки". ) Связь с объектами пропадает не сразу. Как эти механизмы "лечить" надо подумать.

P.S Всё же HACK технология. Винда то и не думала, что её вывернут наизнанку и через её родные окошки будут данными кидаться.


Malcev пишет:

Про процессы тут почитай:

Спасибо, прочитал, но не понял ход мысли, как это сможет сделать объект одинаково доступным, или ты просто про адрес в памяти.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Pointers to Objects

Не, я для реальных скриптов ни разу не пользовался, как и RegisterActiveObject, как-то не возникало необходимости.

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

15

Re: AHK: Pointers to Objects

Данные через SendMessage  отправляешь?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Pointers to Objects

Или чтение памяти?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

17

Re: AHK: Pointers to Objects

Обычно SendMessage использую.

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

18

Re: AHK: Pointers to Objects

serzh82saratov пишет:

или ты просто про адрес в памяти

Про адрес.

19 (изменено: serzh82saratov, 2020-04-22 17:55:49)

Re: AHK: Pointers to Objects

Не могу понять как оставить объект действительным при выходе из создающего его процесса, чтобы при следующем запуске подключится к нему по прежнему CLSID.
Вроде как ACTIVEOBJECT_STRONG за это должен отвечать, RevokeActiveObject не используется. Про CoLockObjectExternal примеров не нашёл.


#SingleInstance Force
#NoEnv

; https://www.autohotkey.com/boards/viewtopic.php?t=6148
; https://docs.microsoft.com/ru-ru/windows/win32/api/oleauto/nf-oleauto-registeractiveobject?redirectedfrom=MSDN
; CoLockObjectExternal
  
If !A_Args[1]
	MsgBox % Clipboard := CreateGUID()

try myPublicObj := ComObjActive(Clipboard)
catch
	{ 
		MsgBox ComObjActive Error
		myPublicObj := {}
		ObjRegisterActive(myPublicObj, Clipboard, 0)
	}
MsgBox % "Прежнее значение: " myPublicObj.TickCount
MsgBox % "Новое значение: " myPublicObj.TickCount := A_TickCount 
Run "%A_ScriptFullPath%" "Reload"
ExitApp 

CreateGUID()
{
   VarSetCapacity(pguid, 16, 0)
   if !DllCall("ole32.dll\CoCreateGuid", Ptr, &pguid)  {
      size := VarSetCapacity(sguid, (38 << !!A_IsUnicode) + 1, 0)
      if DllCall("ole32.dll\StringFromGUID2", Ptr, &pguid, Ptr, &sguid, UInt, size)
         return StrGet(&sguid)
   }
}

ObjRegisterActive(Object, CLSID = 0, Flags := 0) {
   static cookieJar := {}
   if !CLSID  {
      if (( cookie := cookieJar.Delete(Object) ) != "")
         DllCall("oleaut32\RevokeActiveObject", UInt, cookie, Ptr, 0)
      return
   }
   if cookieJar[Object]
      throw Exception("Object is already registered", -1)
   VarSetCapacity(_clsid, 16, 0)
   if (hr := DllCall("ole32\CLSIDFromString", WStr, CLSID, Ptr, &_clsid)) < 0
      throw Exception("Invalid CLSID", -1, CLSID)
   hr := DllCall("oleaut32\RegisterActiveObject", Ptr, &Object, Ptr, &_clsid, UInt, Flags, UIntP, cookie, UInt)
   if hr < 0
      throw Exception(format("Error 0x{:x}", hr), -1)
   cookieJar[Object] := cookie
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

20

Re: AHK: Pointers to Objects

serzh82saratov пишет:

Не могу понять как оставить объект действительным при выходе из создающего его процесса

Не думаю, что это возможно таким способом, т. к. при завершении скрипта, где объект определён, он нигде не сохраняется.

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