[module, ahk & dotNet] IPC 2.6
Script to script communication has been asked frequently-- & this function couldn't be easier to use!
Thanks for wrapping this functionality up so neatly (as always..). Its also nice seeing you pop up in the forum again.. evan if only briefly
If you like talking to yourself...A Chat ! :shock:
:shock: n'est pas un chat...Un chat !
pussy != talkingAnd the english chat comes from the french word tchatche and from the verb tchatcher which is popular language comming for south of France and which means to speak a lot. This word come itself from the spanish verb chacharear, which was transformed by the algerian slang to become the french verb tchatcher... So nothing to see with the french chat, which is ... an english cat... What else ? Only that : thank to majkinetor, the (big) blue and purple cat, with long teeth, for this (again) good script.
Nice try though... :lol:
this function is meant to be used with the IPC.ahk file.
IPC_OnMessageNoGui( pLabel ) { Gui +LastFound -AlwaysOnTop -Caption +ToolWindow Gui, Show IPC_OnMessage(pLabel) }
I know its very simple, but well, it may help some people.
He can also use CreateWindowEx to create hidden control and subclass it, in which case it will not receive large number of messages. Then it can receive IPC messages.
I'm a noob but very interested by IPC. Can you please give us an example ? Thanks by advance.He can also use CreateWindowEx to create hidden control and subclass it, in which case it will not receive large number of messages. Then it can receive IPC messages.
No. The biggest problem is perhaps that ListLines becomes unusable since interacting with the main window executes script. There's no need to subclass the window anyway.I was asking myself once, is it smart to subclass main window of AHK.
Creating a message window is only of benefit in the off chance that some other part of the script uses OnMessage(WM_COPYDATA).
Ah, yes.... there is no need for this in this case, thx for the note.There's no need to subclass the window anyway.
This is a sample of server and client. Client asks for some information that require some time to be calculated (like db access). Client can ask for new information again, before server finishes previous one. Server buffers requests, and sends them back as soon as it calculates. Ports are used as transaction IDs so this can work ok for 2^32 transactions.I'm a noob but very interested by IPC. Can you please give us an example ? Thanks by advance.
This approach was needed because IPC doesn't use PostMessage to send WM_COPYDATA, but SendMessage which waits. PostMessage can't be used with WM_COPYDATA.
Server.ahk
#SingleInstance, off ;allow multiple instances target := "Klijent" Gui, +LastFound +AlwaysOnTop hScript := WinExist() Gui, Font, s8 Gui, Add, ListBox,xm w350 h300 vMyLB, Gui, Show, x600 AutoSize IPC_OnMessage("OnMessage") return OnMessage: GuiControl, , MyLB, %IPC_Port% : %IPC_Message% buf .= IPC_PORT " " aMessage_%IPC_PORT% := IPC_Message if !Timer { SetTimer, DBGet, -50 Timer := true } return DBGet: loop { j := InStr(buf, " "), port := SubStr(buf, 1, j-1), buf := SubStr(buf, j+1) msg := aMessage_%port% data := SQLGetData(msg) IPC_Send(WinExist(target), data, port) IfEqual, buf,, break } Timer := false return SQLGetData(msg) { sleep 5000 return "data for: " msg } GuiClose: exitapp return #include IPC.ahk
Klijent.ahk
#SingleInstance, off ;allow multiple instances target := "Server" Gui, +LastFound +AlwaysOnTop hScript := WinExist() Gui, Font, s10 Gui, Add, Edit, vMyMsg w310 , select * from table Gui, Font, s8 Gui, Add, Button, x+5 gOnSend , Send Gui, Add, ListBox,xm w350 h300 vMyLB, Gui, Show, x200 AutoSize port := 0 IPC_OnMessage("OnMessage") return OnMessage: GuiControl, , MyLB, %IPC_Port% : %IPC_Message% return OnSend: Gui, Submit, NoHide port++ res := IPC_Send( WinExist( target ), MyMsg, port) return GuiClose: exitapp return #include IPC.ahk