Hi,
I would like to read a build in xy variable from an ahk or au3 script.
Messenger (http://www.xyplorer.com/xyfc/viewtopic. ... ger#p89555) is nice but I would like to have the information flow from XY to my script (but still calling it from my external script).
Of course I could tell XY to write it to a text file and then read that one out. But is there a better and easy way to do that?
Thx in advance, Stephan
reading a xy variable from ahk/au3?
-
autocart
- Posts: 1387
- Joined: 26 Sep 2013 15:22
reading a xy variable from ahk/au3?
[AHK] redirecting Windows Explorer to XY, [XYS] Mini Tree with open tabs (cur loc expanded, tab folders highlighted), [AHK] customInlineRenameKeys, [AHK] clipboardHelper_and_XYEscToList
-
binocular222
- Posts: 1423
- Joined: 04 Nov 2008 05:35
- Location: Win11, Win10, 100% Scaling
Re: reading a xy variable from ahk/au3?
You mean which one?
1) Run an AHK script > AHK send a request to XY > XY response to AHK
2) Run XYS script > Pass info to a running AHK script?
The 1st one is already possible in Part 2 in my post http://www.xyplorer.com/xyfc/viewtopic. ... ger#p89555
the 2nd one is even easier than the 1st
1) Run an AHK script > AHK send a request to XY > XY response to AHK
2) Run XYS script > Pass info to a running AHK script?
The 1st one is already possible in Part 2 in my post http://www.xyplorer.com/xyfc/viewtopic. ... ger#p89555
the 2nd one is even easier than the 1st
I'm a casual coder using AHK language. All of my xys scripts:
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
-
autocart
- Posts: 1387
- Joined: 26 Sep 2013 15:22
Re: reading a xy variable from ahk/au3?
hey binocular,
thx that's exactly what I meant
(sorry, should have read it more before)
but now you made me curious...
how would you do the 2nd?
thx that's exactly what I meant
but now you made me curious...
how would you do the 2nd?
[AHK] redirecting Windows Explorer to XY, [XYS] Mini Tree with open tabs (cur loc expanded, tab folders highlighted), [AHK] customInlineRenameKeys, [AHK] clipboardHelper_and_XYEscToList
-
binocular222
- Posts: 1423
- Joined: 04 Nov 2008 05:35
- Location: Win11, Win10, 100% Scaling
Re: reading a xy variable from ahk/au3?
Take the 1) code, remove the "AHK send request to XY" portion, then it comes like this:so the XYS can be like this:7409230 is just an example of AHK's HWND (in Dec instead of Hex)
Code: Select all
#notrayicon
OnMessage(0x4a, "Function_Receive_WM_COPYDATA") ; 0x4a is WM_COPYDATA. This onhold and wait for the WM_Copydata from XYplorer then execute Function_Receive_WM_COPYDATA(wParam, lParam) below
Function_Receive_WM_COPYDATA(wParam, lParam)
{
StringAddress := NumGet(lParam + 2*A_PtrSize) ;lParam+8 is the address of CopyDataStruct's lpData member.
CopyOfData := StrGet(StringAddress) ;May also specify CP0 (default) or UTF-8 or UTF-16: StrGet(StringAddress, NumGet(lParam+A_PtrSize), "UTF-16")
cbData := NumGet(lParam+A_PtrSize)/2 ;cbData/2 = String length
StringLeft, Datareceived, CopyOfData, cbData
msgbox, <curitem> is `n %Datareceived%
exitapp
}Code: Select all
::CopyData 7409230, "<curitem>",2I'm a casual coder using AHK language. All of my xys scripts:
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
-
autocart
- Posts: 1387
- Joined: 26 Sep 2013 15:22
Re: reading a xy variable from ahk/au3?
All righty, thx again,
To make it dynamic the ahk script could write its own HWND into a xy variable, from where the xyscript could read it, right?
Now a probably stupid question: What do i do if my ahk script does not have an HWND? Or do even ahk scripts w/o window still have an HWND?
To make it dynamic the ahk script could write its own HWND into a xy variable, from where the xyscript could read it, right?
Now a probably stupid question: What do i do if my ahk script does not have an HWND? Or do even ahk scripts w/o window still have an HWND?
[AHK] redirecting Windows Explorer to XY, [XYS] Mini Tree with open tabs (cur loc expanded, tab folders highlighted), [AHK] customInlineRenameKeys, [AHK] clipboardHelper_and_XYEscToList
-
binocular222
- Posts: 1423
- Joined: 04 Nov 2008 05:35
- Location: Win11, Win10, 100% Scaling
Re: reading a xy variable from ahk/au3?
Every running AHK script (even GUIless) has a HWND:
a built-in variable: %A_ScriptHwnd% store the script's HWND (in Hex)
To convert to Dec:
SenderHWND := A_ScriptHwnd + 0
a built-in variable: %A_ScriptHwnd% store the script's HWND (in Hex)
To convert to Dec:
SenderHWND := A_ScriptHwnd + 0
I'm a casual coder using AHK language. All of my xys scripts:
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
http://www.xyplorer.com/xyfc/viewtopic. ... 243#p82488
-
autocart
- Posts: 1387
- Joined: 26 Sep 2013 15:22
Re: reading a xy variable from ahk/au3?
Thank you, Binocular!!!

[AHK] redirecting Windows Explorer to XY, [XYS] Mini Tree with open tabs (cur loc expanded, tab folders highlighted), [AHK] customInlineRenameKeys, [AHK] clipboardHelper_and_XYEscToList
-
autocart
- Posts: 1387
- Joined: 26 Sep 2013 15:22
Re: reading a xy variable from ahk/au3?
So, this is my code, for anyone to use AT OWN RISK, and for anyone to make suggestions for improvement:
The ahk-help file says about SendMessage: "SendMessage waits for the target window to process the message, up until the timeout period expires." Also the XYp-help says about copydata: "The command only returns when the receiving window has fully processed the data. For example if you send a script the command will return only after the script has terminated." Therefore is should be safe to think of it as syncronious execution (always in the same order), right? (as long as there is no timeout)
Also, I wanted to make it coding-friendly and therefore use a global variable to pass the result to the calling/sending function, so that this function can be used in a totally normal way. I know the global var is not the best but I can't think of a better way and in a small script (were you can keep the overview) it should be ok, right? I know that the first definition of the global var is technically not needed but I put it there for better overview.
For any newbies: exitapp is needed because otherwise ahk would keep the script running as a side effect of the OnMessage-function.
BTW, XYplorer MUST already be running, otherwise the "return value" will be an empty string.
The ahk-help file says about SendMessage: "SendMessage waits for the target window to process the message, up until the timeout period expires." Also the XYp-help says about copydata: "The command only returns when the receiving window has fully processed the data. For example if you send a script the command will return only after the script has terminated." Therefore is should be safe to think of it as syncronious execution (always in the same order), right? (as long as there is no timeout)
Also, I wanted to make it coding-friendly and therefore use a global variable to pass the result to the calling/sending function, so that this function can be used in a totally normal way. I know the global var is not the best but I can't think of a better way and in a small script (were you can keep the overview) it should be ok, right? I know that the first definition of the global var is technically not needed but I put it there for better overview.
For any newbies: exitapp is needed because otherwise ahk would keep the script running as a side effect of the OnMessage-function.
BTW, XYplorer MUST already be running, otherwise the "return value" will be an empty string.
Code: Select all
global XYRETURN
xydata := GetVarFromXYplorer("<xydata>")
msgbox % xydata
exitapp
;***************************************************************************************
;** code from others (or based on) **
;***************************************************************************************
;heavily based on
;http://www.xyplorer.com/xyfc/viewtopic.php?f=7&t=9233&p=89555&hilit=messenger#p89555
GetVarFromXYplorer(varName) ;Send message to XYplorer
{
global XYRETURN
SenderHWND := A_ScriptHwnd + 0 ;Return this script's hidden hwdn id. +0 to convert from Hex to Dec
MessagetoXYplorer := "::CopyData " SenderHWND ", """ varName """, 2" ;resolved to sth like this: ::CopyData 7409230, "<curitem>", 2
SetTitleMatchMode, 2
HWND := WinExist("XYplorer ahk_class ThunderRT6FormDC")
Size := StrLen(MessagetoXYplorer)
If !(A_IsUnicode)
{
VarSetCapacity(Data, Size * 2, 0)
StrPut(MessagetoXYplorer, &Data, Size, "UTF-16")
}
Else
Data := MessagetoXYplorer
VarSetCapacity(COPYDATA, A_PtrSize * 3, 0)
NumPut(4194305, COPYDATA, 0, "Ptr")
NumPut(Size * 2, COPYDATA, A_PtrSize, "UInt")
NumPut(&Data, COPYDATA, A_PtrSize * 2, "Ptr")
OnMessage(0x4a, "Function_Receive_WM_COPYDATA") ; 0x4a is WM_COPYDATA. This onhold and wait for the WM_Copydata from XYplorer then execute Function_Receive_WM_COPYDATA(wParam, lParam) below
SendMessage, 0x4a, 0, ©DATA, , ahk_id %HWND% ;SendMessage waits for the target window to process the message, up until the timeout period expires.
OnMessage(0x4a, "")
return XYRETURN
}
Function_Receive_WM_COPYDATA(wParam, lParam)
{
global XYRETURN
StringAddress := NumGet(lParam + 2*A_PtrSize) ;lParam+8 is the address of CopyDataStruct's lpData member.
CopyOfData := StrGet(StringAddress) ;May also specify CP0 (default) or UTF-8 or UTF-16: StrGet(StringAddress, NumGet(lParam+A_PtrSize), "UTF-16")
cbData := NumGet(lParam+A_PtrSize)/2 ;cbData/2 = String length
StringLeft, Datareceived, CopyOfData, cbData
XYRETURN := Datareceived
}[AHK] redirecting Windows Explorer to XY, [XYS] Mini Tree with open tabs (cur loc expanded, tab folders highlighted), [AHK] customInlineRenameKeys, [AHK] clipboardHelper_and_XYEscToList
XYplorer Beta Club