AHK Window is findable, but SendMessage (Send_WM_COPYDATA) sometimes fails

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
User avatar
JoeSchmoe
Posts: 129
Joined: 08 Dec 2014, 08:58

AHK Window is findable, but SendMessage (Send_WM_COPYDATA) sometimes fails

31 Jan 2017, 14:51

Hello,

Hello, I'm trying to use SendMessage to send messages from one AHK script to another. I'm using the classic Send_WM_COPYDATA code that maybe Chris wrote back in the day.

It works most of the time, but sometimes SendMessage returns "Fail." Here's the code I'm using:

Code: Select all

HeyJarvis(Object) 
{
	TargetScriptTitle = SponsorFox.ahk ahk_class AutoHotkey
	stringified := JSON.Dump(Object)
	result := Send_WM_COPYDATA(stringified, TargetScriptTitle)
	if result = FAIL
		MsgBox SendMessage failed. Does the following WinTitle exist?:`n%TargetScriptTitle%
	else if result = 0
		MsgBox Message sent but the target window responded with 0, which may mean it ignored it.
}


Send_WM_COPYDATA(ByRef StringToSend, ByRef TargetScriptTitle)  ; ByRef saves a little memory in this case.
; This function sends the specified string to the specified window and returns the reply.
; The reply is 1 if the target window processed the message, or 0 if it ignored it.
{
    VarSetCapacity(CopyDataStruct, 3*A_PtrSize, 0)  ; Set up the structure's memory area.
    ; First set the structure's cbData member to the size of the string, including its zero terminator:
    SizeInBytes := (StrLen(StringToSend) + 1) * (A_IsUnicode ? 2 : 1)
    NumPut(SizeInBytes, CopyDataStruct, A_PtrSize)  ; OS requires that this be done.
    NumPut(&StringToSend, CopyDataStruct, 2*A_PtrSize)  ; Set lpData to point to the string itself.
    Prev_DetectHiddenWindows := A_DetectHiddenWindows
    Prev_TitleMatchMode := A_TitleMatchMode
    DetectHiddenWindows On
    SetTitleMatchMode 2
    SendMessage, 0x4a, 0, &CopyDataStruct,, %TargetScriptTitle%  ; 0x4a is WM_COPYDATA. Must use Send not Post.
    DetectHiddenWindows %Prev_DetectHiddenWindows%  ; Restore original setting for the caller.
    SetTitleMatchMode %Prev_TitleMatchMode%         ; Same.
    return ErrorLevel  ; Return SendMessage's reply back to our caller.
}
WinExist IS able to find the target script (only one window matches), but SendMessage returns "FAIL" SOMETIMES.

AHK 1.1.24.2
Wind7 Pro 64

Any ideas?

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: RandomBoy, scriptor2016 and 361 guests