From WikiChip
Editing mirc/sendmessage
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
This page supports semantic in-text annotations (e.g. "[[Is specified as::World Heritage Site]]") to build structured and queryable content provided by Semantic MediaWiki. For a comprehensive description on how to use annotations or the #ask parser function, please have a look at the getting started, in-text annotation, or inline queries help pages.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
− | + | You can use SendMessage to communicate with mIRC from your external application, in your dll for example. | |
− | + | ||
+ | = Initializing communication = | ||
− | |||
The external programs that send these messages must create a mapped file with the [http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx CreateFileMapping()] function: | The external programs that send these messages must create a mapped file with the [http://msdn.microsoft.com/en-us/library/windows/desktop/aa366537%28v=vs.85%29.aspx CreateFileMapping()] function: | ||
− | + | CreateFileMapping( | |
− | + | _In_ HANDLE hFile, | |
− | + | _In_opt_ LPSECURITY_ATTRIBUTES lpAttributes, | |
− | + | _In_ DWORD flProtect, | |
− | + | _In_ DWORD dwMaximumSizeHigh, | |
− | + | _In_ DWORD dwMaximumSizeLow, | |
− | + | _In_opt_ LPCTSTR lpName | |
− | + | ); | |
* Use INVALID_HANDLE_VALUE for the hFile parameter, which basically allows the sytem to handle the file for us. | * Use INVALID_HANDLE_VALUE for the hFile parameter, which basically allows the sytem to handle the file for us. | ||
Line 25: | Line 25: | ||
'''Note''': To prevent simultaneous access to the mapped file, your code must check whether the mapped file exists or not before using it. If it exists, you should assume that it is in use by another program, and should try again later. | '''Note''': To prevent simultaneous access to the mapped file, your code must check whether the mapped file exists or not before using it. If it exists, you should assume that it is in use by another program, and should try again later. | ||
− | + | = Communicating = | |
− | + | == Performing Commands == | |
− | |||
− | |||
The following call to SendMessage() makes mIRC perform the commands that you specify: | The following call to SendMessage() makes mIRC perform the commands that you specify: | ||
− | + | SendMessage(mHwnd, WM_MCOMMAND, cMethod, cIndex) | |
− | + | * '''mHwnd''' - the handle of the main mIRC window, or the handle of a Channel, Query, etc. window. | |
− | + | * '''WM_MCOMMAND''' - which should be defined as WM_USER + 200 | |
− | * '''mHwnd''' - | + | * '''cMethod''' - how mIRC should process the message, where: |
− | * '''WM_MCOMMAND''' - | + | ** 1 = as if typed in editbox (default) |
− | * '''cMethod''' - | + | ** 2 = as if typed in editbox, send as plain text |
− | ** 1 = | + | ** 4 = use flood protection if turned on, can be or'd with 1 or 2 |
− | ** 2 = | + | ** 8 = use unicode text |
− | ** 4 = | ||
− | ** 8 = | ||
* '''cIndex''' - If you created a mapped filename of the form "mIRCN", this is where you specify the N parameter to use, if cIndex is 0, the filename must be "mIRC". | * '''cIndex''' - If you created a mapped filename of the form "mIRCN", this is where you specify the N parameter to use, if cIndex is 0, the filename must be "mIRC". | ||
Line 49: | Line 45: | ||
This call returns 1 on success, 0 if it fails. | This call returns 1 on success, 0 if it fails. | ||
− | + | == Evaluating Identifiers and Variables == | |
The following call to SendMessage() makes mIRC evaluate the contents of any line that you specify: | The following call to SendMessage() makes mIRC evaluate the contents of any line that you specify: | ||
− | + | SendMessage(mHwnd, WM_MEVALUATE, cMethod, cIndex) | |
− | * '''mHwnd''' - | + | * '''mHwnd''' - the handle of the main mIRC window, or the handle of a Channel, Query, etc. window. |
− | * '''WM_MEVALUATE''' - | + | * '''WM_MEVALUATE''' - should be defined as WM_USER + 201 |
− | * '''cMethod''' - | + | * '''cMethod''' - how mIRC should process the message, where: |
− | ** 8 = | + | ** 8 = use unicode text |
* '''cIndex''' - If you created a mapped filename of the form "mIRCN", this is where you specify the N parameter to use, if cIndex is 0, the filename must be "mIRC". | * '''cIndex''' - If you created a mapped filename of the form "mIRCN", this is where you specify the N parameter to use, if cIndex is 0, the filename must be "mIRC". | ||
Line 64: | Line 60: | ||
This call returns 1 on success, 0 if it fails. | This call returns 1 on success, 0 if it fails. | ||
− | + | = Remote Event Context = | |
− | If during a remote event, such as on TEXT, your script calls a DLL which then uses | + | If during a remote event, such as on TEXT, your script calls a DLL which then uses SendMessage() to execute a command or evaluate an identifier, you can tell SendMessage() to execute in the context of that remote event. |
During a remote event, a {{mIRC|$eventid}} identifier is set to a unique value to identify the event. This can be passed to a DLL which can then pass it back to mIRC using: | During a remote event, a {{mIRC|$eventid}} identifier is set to a unique value to identify the event. This can be passed to a DLL which can then pass it back to mIRC using: | ||
− | + | SendMessage(mHwnd, WM_MCOMMAND, MAKEWPARAM(cMethod, cEventId), cIndex) | |
This will cause the command/evaluation to execute in the context of the remote event identified by cEventId. If cEventId is 0, this indicates a non-remote event. | This will cause the command/evaluation to execute in the context of the remote event identified by cEventId. If cEventId is 0, this indicates a non-remote event. | ||
− | + | = Extended Version Information = | |
If '''cMethod''' is set to -1, you can set '''cIndex''' to: | If '''cMethod''' is set to -1, you can set '''cIndex''' to: | ||
Line 80: | Line 76: | ||
* '''-2''' - to receive the cMethod options that are supported. | * '''-2''' - to receive the cMethod options that are supported. | ||
− | + | = Extended Error Information = | |
If cMethod is or'd with the value 16, this will make SendMessage() return more useful error values instead of just 0 for failure and 1 for success. The return values are: | If cMethod is or'd with the value 16, this will make SendMessage() return more useful error values instead of just 0 for failure and 1 for success. The return values are: | ||
Line 89: | Line 85: | ||
** '''8''' - Bad eventid. | ** '''8''' - Bad eventid. | ||
** '''16''' - Bad server. | ** '''16''' - Bad server. | ||
− | ** '''32''' - Bad script | + | ** '''32''' - Bad code/script. |
** '''64''' - Disabled (if disabled in lock dialog). | ** '''64''' - Disabled (if disabled in lock dialog). | ||
− | + | [[Category:MIRC]] | |
− | + | [[Category:Interprocess communication]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[Category: | ||
− | [[Category: |