Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

[module, ahk & dotNet] IPC 2.6 


  • Please log in to reply
59 replies to this topic
majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
Interprocess communication.



Download           Documentation 



Posted Image
Posted Image

BoBo¨
  • Guests
  • Last active:
  • Joined: --
A Chat ! :shock:

MoMo
  • Guests
  • Last active:
  • Joined: --
Un chat ! :D

daniel2
  • Members
  • 47 posts
  • Last active: Oct 05 2008 07:05 PM
  • Joined: 23 Jul 2007
This is an excellant example of WM_COPYDATA!!! :)
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 :D

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004
Nice example :)

A Chat ! :shock:

If you like talking to yourself... ;)

Un chat ! :D

:shock: n'est pas un chat...

MoMo
  • Guests
  • Last active:
  • Joined: --
And 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.

corrupt
  • Members
  • 2558 posts
  • Last active: Nov 01 2014 03:23 PM
  • Joined: 29 Dec 2004

And 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.

pussy != talking
Nice try though... :lol: :p

Jey123456
  • Guests
  • Last active:
  • Joined: --
I don't know if there is any others way to do the communication between 2 app without any GUI, but there is a little function that activate the onMessageHandler with a completely invisible GUI.

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.

SecurityAnalysis
  • Guests
  • Last active:
  • Joined: --
Does your script require GUI majkinetor?

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
No, you can use a message-only window. But that requires some coding. IIRC, some scripts on the forum create them.
Posted Image

Lexikos
  • Administrators
  • 9844 posts
  • AutoHotkey Foundation
  • Last active:
  • Joined: 17 Oct 2006
You could use the script's main window...

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
I was asking myself once, is it smart to subclass main window of AHK. Due to the fact that ahk proc is called for every message, it can probably reduce performance of the script. I am not sure about this though, but it seems logical. I was always hesistant to subclass wndproc in AHK.

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.
Posted Image

Zoulou
  • Guests
  • Last active:
  • Joined: --

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.

Lexikos
  • Administrators
  • 9844 posts
  • AutoHotkey Foundation
  • Last active:
  • Joined: 17 Oct 2006

I was asking myself once, is it smart to subclass main window of AHK.

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.

Creating a message window is only of benefit in the off chance that some other part of the script uses OnMessage(WM_COPYDATA).

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006

There's no need to subclass the window anyway.

Ah, yes.... there is no need for this in this case, thx for the note.

I'm a noob but very interested by IPC. Can you please give us an example ? Thanks by advance.

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.

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

Posted Image