Skip to main content

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba

Hi kposmann,

It's your script engine which loads the ehllapi.dll, not Rumba Desktop.

RumbaPage.exe is the executable for the Desktop workspace.

The individual Rumba sessions are instances of WDDspPag.exe

If you wish to verify that your script engine is using eHLLAPI to communicate with your session "X", then you can do the following.

1. Open an instance of a VBA Editor (I normally use Excel).

2. Paste in the following code (and verify the path to ehllapi.dll in the declaration)

Private Declare Function hllapi Lib "C:\\Program Files (x86)\\Micro Focus\\RUMBA\\System\\ehlapi32.Dll" (Func%, ByVal Buffer$, bSize%, RetC%) As Long

Sub Main()
   Dim Astr As String
   Dim Alen As Integer
   Dim RetC As Integer
   Dim Func As Integer

   Func = 1        ' connect PS
   Astr = "X"
   Alen = Len(Astr)
   hllapi Func, Astr, Alen, RetC
   Select Case RetC
       Case 0: MsgBox ("The Connect Presentation Space function was successful: " & Chr$(13) & Chr$(10) & "Presentation space is ready for input.")
       Case 1: MsgBox ("An incorrect host presentation space ID was specified.")
       Case 4: MsgBox ("Connection successful: " & Chr$(13) & Chr$(10) & "The presentation space is busy.")
       Case 5: MsgBox ("Connection successful: " & Chr$(13) & Chr$(10) & "The presentation space is locked.")
       Case 9: MsgBox ("System error.")
       Case 11: MsgBox ("Session shortname " & Astr & " is already in use")
       Case Else: MsgBox (RetC)
   End Select

   Func = 2        ' disconnect PS
   Astr = ""
   Alen = Len(Astr)
   hllapi Func, Astr, Alen, RetC
End Sub

3. Set the eHLLAPI shotrname in the line Astr="X"
4. Execute the macro, wait for the message box to appear. Assuming you get a successful connection, do not close the message box. 
    i.e. the macro is still running, as is connected to the Rumba session.
5. Using your automation tool attempt to connect to the same Rumba shortname. It should fail with a Return code of 11, if the automation tool is indeed using the eHLLAPI interface.
6. Once you have finished, return to the Message box and dismiss it.

Tom


I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hey Tom - yes - I've been able to use HLLAPI via VBA and Excel using the ehlapi32.dll. Now my issue is that it seems like I can't register ehlapi32.dll using Regsvr32. The development tool I'm using is OpenInsight is from Revelation software and it appears to be a requirement that the DLL be registered as I've tried placing ehlapi32.dll in Windows\\System32 and when I build the prototype in Revelation it says HLLAPI (actually all lower case) is not a function in EHLAPI32.dll - so close and yet so far! I COULD create an app in Visual Studio but I would prefer to flatten the stack so to speak - or maybe the way to go is to create a wrapper DLL which uses ehlapi32.dll - where can I get the .lib and .h files for that DLL? I don't see them in any of the RUMBA directories.....

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hey Tom - yes - I've been able to use HLLAPI via VBA and Excel using the ehlapi32.dll. Now my issue is that it seems like I can't register ehlapi32.dll using Regsvr32. The development tool I'm using is OpenInsight is from Revelation software and it appears to be a requirement that the DLL be registered as I've tried placing ehlapi32.dll in Windows\\System32 and when I build the prototype in Revelation it says HLLAPI (actually all lower case) is not a function in EHLAPI32.dll - so close and yet so far! I COULD create an app in Visual Studio but I would prefer to flatten the stack so to speak - or maybe the way to go is to create a wrapper DLL which uses ehlapi32.dll - where can I get the .lib and .h files for that DLL? I don't see them in any of the RUMBA directories.....

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba

A dumpbin.exe /exports on the ehlapi32.dll indicates that there is no DllRegisterServer method in the library, which would explain why you can't RegSvr32 it. So it look like a wrapper dll would be one solution.

The Rumba ehllapi implementation is not a standard ehllapi implementation in that it includes dozens of WD_???? functions, which if you were writing your own application might be quite useful, however given that you are using an off the shelf automation tool, these WD_????? functions are more of less redundant in your scenario.

So the only function you should need is the hllapi function (as declared in the sample above), apart from you own DllRegisterServer method so you can RegSvr32 your wrapper dll.

Naturally, I'm assuming that the automation tool will handle everything by way of return codes and parsing off the various parameters after the function call. Just as it would if you didn't have to create a wrapper .dll

Note: I've had a look at WHLLAPI.dll (also in the Rumba\\System folder) and that does have a DlllRegisterServer method and I can successfully RegSvr32 that.

        

So, if your Automation tool can use WinHLLAPI instead of eHLLAPI, that might be the cleanest solution.

Tom


I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
I will give whllapi.dll a shot - is the function still hllapi all lower case or is it something else - thanks for your help!

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
And would you be able to supply the data types for the function call?

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
And would you be able to supply the data types for the function call?

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
The function name is WinHLLAPI

here is the output of a dumpbin on WHLLAPI.dll

C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin>dumpbin /exports "C:\\Program Files (x86)\\Micro Focus\\RUMBA\\System\\WHLLA
PI.DLL"
Microsoft (R) COFF/PE Dumper Version 14.00.23506.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file C:\\Program Files (x86)\\Micro Focus\\RUMBA\\System\\WHLLAPI.DLL

File Type: DLL

Section contains the following exports for WHLLAPI.dll

00000000 characteristics
59DCEA3A time date stamp Tue Oct 10 16:41:46 2017
0.00 version
1 ordinal base
83 number of functions
83 number of names

ordinal hint RVA name

1 0 00002620 APIRegisterApp
2 1 00002880 APIRemoveApp
3 2 00002910 APIWinHLLAPIMsg
4 3 00002930 DllCanUnloadNow
5 4 00002940 DllGetClassObject
6 5 00002960 DllRegisterServer
7 6 0000FA60 WD_AdviseHostUpdate
8 7 0000FAB0 WD_AdviseRumbaEvent
9 8 0000FAE0 WD_CancelAsyncRequest
10 9 0000FB00 WD_CancelBlockingCall
11 A 0000FB10 WD_ChangeWindowName
12 B 0000FC20 WD_Cleanup
13 C 0000FC30 WD_ConnectPS
14 D 0000FCA0 WD_ConnectWindowServices
15 E 0000FCE0 WD_Convert
16 F 0000FDB0 WD_CopyBlockToString
17 10 0000FE00 WD_CopyFieldToString
18 11 0000FE30 WD_CopyOIA
19 12 0000FE70 WD_CopyPS
20 13 0000FEB0 WD_CopyPSToString
21 14 0000FEE0 WD_CopyStringToField
22 15 0000FF20 WD_CopyStringToPS
23 16 0000FF50 WD_DeletePS
24 17 0000FF90 WD_DisconnectPS
25 18 0000FFD0 WD_DisconnectWindowServices
26 19 00010010 WD_DisplayCursor
27 1A 00010050 WD_DisplayPS
28 1B 00010090 WD_FindFieldLength
29 1C 000100C0 WD_FindFieldPosition
30 1D 000100F0 WD_GetKey
31 1E 00010130 WD_GetSessionHWND
32 1F 00010180 WD_IsBlocking
33 20 00010190 WD_Pause
34 21 000101D0 WD_PostInterceptStatus
35 22 00010210 WD_QueryBlockLocation
36 23 00010250 WD_QueryCloseIntercept
37 24 00010290 WD_QueryCursorLocation
38 25 000102D0 WD_QueryFieldAttribute
39 26 00010300 WD_QueryHostUpdate
40 27 00010340 WD_QuerySessionStatus
41 28 00010380 WD_QuerySessions
42 29 00010400 WD_QuerySystem
43 2A 00010440 WD_QueryWindowCoordinates
44 2B 00010480 WD_ReceiveFile
45 2C 000104D0 WD_ReceiveFileAsync
46 2D 00010520 WD_Release
47 2E 00010560 WD_Reserve
48 2F 000105A0 WD_ResetSystem
49 30 000105E0 WD_RunMacro
50 31 00010620 WD_RunProfile
51 32 00010650 WD_SearchField
52 33 000106B0 WD_SearchPS
53 34 00010710 WD_SendFile
54 35 00010760 WD_SendFileAsync
55 36 000107B0 WD_SendKey
56 37 00010800 WD_SetBlockingHook
57 38 00010820 WD_SetCursor
58 39 00010860 WD_SetSessionParamEx
59 3A 000108B0 WD_SetSessionParameters
60 3B 00010A20 WD_ShowSession
61 3C 00010A60 WD_StartCloseIntercept
62 3D 00010AE0 WD_StartCloseInterceptAsync
63 3E 00010B60 WD_StartHostNotification
64 3F 00010BB0 WD_StartHostNotificationAsync
65 40 00010C00 WD_StartKSIntercept
66 41 00010C50 WD_StartKSInterceptAsync
67 42 00010CA0 WD_Startup
68 43 00010CC0 WD_StopCloseIntercept
69 44 00010D00 WD_StopHostNotification
70 45 00010D40 WD_StopKSIntercept
71 46 00010D80 WD_UnhookBlockingHook
72 47 00010D90 WD_Wait
73 48 00010DD0 WD_WaitAsync
74 49 00010E10 WD_WindowStatus
75 4A 0000E210 WinHLLAPI
76 4B 0000E5C0 WinHLLAPIAsync
77 4C 0000E860 WinHLLAPICancelAsyncRequest
78 4D 0000EA60 WinHLLAPICancelBlockingCall
79 4E 00002970 WinHLLAPICleanup
80 4F 0000EA90 WinHLLAPIIsBlocking
81 50 0000EAC0 WinHLLAPISetBlockingHook
82 51 000029A0 WinHLLAPIStartup
83 52 0000EAE0 WinHLLAPIUnhookBlockingHook

Summary

1000 .data
5000 .rdata
2000 .reloc
5000 .rsrc
13000 .text
9000 SHARDAT

There should be a couple of samples in the forum history for you to have a play with, if you really want to get your hands dirty.

Cheers,
Tom

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Thanks! I loaded VS2017 CE on the client's machine and for some reason dumpbin isn't there - I suppose I could have copied the DLL to my machine but in any event thanks again for your help - hopefully this means I can invoice the client later today! ;)

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
p.s. Apparently VS2017 doesn't install dumpbin.exe by default, you need to go in to the MSI and add the Common Tools for C .

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
p.s. Apparently VS2017 doesn't install dumpbin.exe by default, you need to go in to the MSI and add the Common Tools for C .

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hi Tom - I'm REAL close to getting this to work. Here are the data types the tool recognizes. What would you suggest I use for the four parameters to interface with ehlapi32.dll? Here is one prototype I've tried:

LONG STDCALL hllapi(LPSHORT,LPCHAR,LPSHORT,LPSHORT)

And I am getting a return code of "1" (4TH Parameter) - I'm pretty sure "LPCHAR" is correct - it's the other 3 that I'm trying to figure out

"The return type specifies the C data type of the value returned from the function. If a function does not return a value, specify the return type VOID. Valid return value types are listed in the table which follows."



Return Type
Description


VOID
The function does not return a value.



CHAR
A single character (1 byte) is returned.



BYTE
A 1 byte signed integer is returned from the DLL as a number.



UBYTE
A 1 byte unsigned integer is returned from the DLL as a number.



SHORT
A 2 byte signed integer is returned from the DLL as a number.



USHORT
A 2 byte unsigned integer is returned from the DLL as a number.



LONG
A 4 byte signed integer is returned from the DLL as a number.



ULONG
A 4 byte unsigned integer. Not supported.



FLOAT
A 4 byte floating point value is returned from the DLL as a number.



DOUBLE
An 8 byte floating point value. Not supported.



LPVOID
A function declared as returning an LPVOID value returns a pointer. (The type of data referenced by the pointer is not relevant.) To extract the data referenced by this pointer, use GetValue().



LPCHAR
The DLL returns a pointer to a null-terminated string (an array of characters ending with character 0). OpenInsight extracts the character data up to the null terminator.



LPBYTE
The DLL returns a pointer to a 1 byte signed integer. OpenInsight extracts the data as a number.



LPUBYTE
The DLL returns a pointer to a 1 byte unsigned integer. OpenInsight extracts the data as a number.



LPSHORT
The DLL returns a pointer to a 2 byte signed integer. OpenInsight extracts the data as a number.



LPUSHORT
The DLL returns a pointer to a 2 byte unsigned integer. OpenInsight extracts the data as a number.



LPLONG
The DLL returns a pointer to a 4 byte signed integer. OpenInsight extracts the data as a number.



LPULONG
Not supported.



LPDOUBLE
The DLL returns a pointer to an 8 byte floating value. OpenInsight extracts the data as a number.

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hi kposman,

I'd likely try

LONG STDCALL hllapi(SHORT, LPCHAR, SHORT, SHORT)

although to be honest I've no idea what that STDCALL does..

First make sure your HLLAPI short name is configured in the Rumba Session and make sure you can get to it with a Function 1 call in VBA (don't forget to call function 2 to close the HLLAPI connection).

Also I'm finding that the session needs to be connected to the mainframe or you'll get a return of 1 on ConnectPS.

Cheers,
Tom

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hey Tom - we are working on the wrapper and want to make sure we have the right header file - ehlapi32.h - this is one I found on IBM - is it the same one Rumba uses? If not could you please paste it here? Thanks!

/*****************************************************************************/
/* */
/* Module Name : EHLAPI32.H */
/* */
/* Description : EHLLAPI Structure, Return Codes and Routines */
/* */
/* Copyright Notice: IBM Personal Communication/3270 Version 4.3 */
/* (C) COPYRIGHT IBM CORP. 1989,1995 - PROGRAM PROPERTY */
/* OF IBM ALL RIGHTS RESERVED */
/* */
/*---------------------------------------------------------------------------*/
/* Function: */
/* */
/* Define the EHLLAPI structure, return code constants and */
/* the external routines for EHLLAPI. */
/* */
/*---------------------------------------------------------------------------*/
/* Change Activity: */
/* */
/* DCRs */
/* ==========================================================================*/
/* dcrnum rls date name description of change */
/* @BD1 fp000011 600 012301 MM Add Hllapi call for Query Additional */
/* Field Attributes */
/* @BD2 Def81383 5.5 062602 Supriya Connect SF return 9 due to padding */
/* in 16-bit Structures */
/*****************************************************************************/
#ifndef EHLAPI32_HEAD
#define EHLAPI32_HEAD

#ifdef __cplusplus
extern "C" {
#endif

#pragma pack(1) //@BD2a

/*********************************************************************/
/**************** EHLLAPI FUNCTION PROTOTYPES ************************/
/*********************************************************************/
extern long far pascal HLLAPI(WORD*, LPSTR, WORD*, WORD*);
extern long far pascal hllapi(WORD*, LPSTR, WORD*, WORD*);

#include "hllstr16.h" /* EHLAPI struct definitions */

/*********************************************************************/
/**************** EHLLAPI FUNCTION NUMBERS ***************************/
/*********************************************************************/
#define HA_CONNECT_PS 1 /* 000 Connect PS */
#define HA_DISCONNECT_PS 2 /* 000 Disconnect PS */
#define HA_SENDKEY 3 /* 000 Sendkey function */
#define HA_WAIT 4 /* 000 Wait function */
#define HA_COPY_PS 5 /* 000 Copy PS function */
#define HA_SEARCH_PS 6 /* 000 Search PS function */
#define HA_QUERY_CURSOR_LOC 7 /* 000 Query Cursor */
#define HA_COPY_PS_TO_STR 8 /* 000 Copy PS to String */
#define HA_SET_SESSION_PARMS 9 /* 000 Set Session */
#define HA_QUERY_SESSIONS 10 /* 000 Query Sessions */
#define HA_RESERVE 11 /* 000 Reserve function */
#define HA_RELEASE 12 /* 000 Release function */
#define HA_COPY_OIA 13 /* 000 Copy OIA function */
#define HA_QUERY_FIELD_ATTR 14 /* 000 Query Field */
#define HA_COPY_STR_TO_PS 15 /* 000 Copy string to PS */
#define HA_STORAGE_MGR 17 /* 000 Storage Manager */
#define HA_PAUSE 18 /* 000 Pause function */
#define HA_QUERY_SYSTEM 20 /* 000 Query System */
#define HA_RESET_SYSTEM 21 /* 000 Reset System */
#define HA_QUERY_SESSION_STATUS 22 /* 000 Query Session */
#define HA_START_HOST_NOTIFY 23 /* 000 Start Host */
#define HA_QUERY_HOST_UPDATE 24 /* 000 Query Host Update */
#define HA_STOP_HOST_NOTIFY 25 /* 000 Stop Host */
#define HA_SEARCH_FIELD 30 /* 000 Search Field */
#define HA_FIND_FIELD_POS 31 /* 000 Find Field */
#define HA_FIND_FIELD_LEN 32 /* 000 Find Field Length */
#define HA_COPY_STR_TO_FIELD 33 /* 000 Copy String to */
#define HA_COPY_FIELD_TO_STR 34 /* 000 Copy Field to */
#define HA_SET_CURSOR 40 /* 000 Set Cursor */
#define HA_START_CLOSE_INTERCEPT 41 /* 000 Start Close Intercept */
#define HA_QUERY_CLOSE_INTERCEPT 42 /* 000 Query Close Intercept */
#define HA_STOP_CLOSE_INTERCEPT 43 /* 000 Stop Close Intercept */
#define HA_QUERY_ADD_FIELD_ATTR 45 /* 000 Additional Query Field*/ //BD1a
#define HA_START_KEY_INTERCEPT 50 /* 000 Start Keystroke */
#define HA_GET_KEY 51 /* 000 Get Key function */
#define HA_POST_INTERCEPT_STATUS 52 /* 000 Post Intercept */
#define HA_STOP_KEY_INTERCEPT 53 /* 000 Stop Keystroke */
#define HA_LOCK_PS 60 /* 000 Lock Presentation */
#define HA_LOCK_PMSVC 61 /* 000 Lock PM Window */
#define HA_SEND_FILE 90 /* 000 Send File function */
#define HA_RECEIVE_FILE 91 /* 000 Receive file */
#define HA_CONVERT_POS_ROW_COL 99 /* 000 Convert Position */
#define HA_CONNECT_PM_SRVCS 101 /* 000 Connect For */
#define HA_DISCONNECT_PM_SRVCS 102 /* 000 Disconnect From */
#define HA_QUERY_WINDOW_COORDS 103 /* 000 Query Presentation */
#define HA_PM_WINDOW_STATUS 104 /* 000 PM Window Status */
#define HA_CHANGE_SWITCH_NAME 105 /* 000 Change Switch List */
#define HA_CHANGE_WINDOW_NAME 106 /* 000 Change PS Window */
#define HA_START_PLAYING_MACRO 110 /* 000 Start playing macro */
#define HA_START_STRUCTURED_FLD 120 /* 000 Start Structured */
#define HA_STOP_STRUCTURED_FLD 121 /* 000 Stop Structured */
#define HA_QUERY_BUFFER_SIZE 122 /* 000 Query Communications */
#define HA_ALLOCATE_COMMO_BUFF 123 /* 000 Allocate */
#define HA_FREE_COMMO_BUFF 124 /* 000 Free Communications */
#define HA_GET_ASYNC_COMPLETION 125 /* 000 Get Asynchronous */
#define HA_READ_STRUCTURED_FLD 126 /* 000 Read Structured Field */
#define HA_WRITE_STRUCTURED_FLD 127 /* 000 Write Structured */

/*********************************************************************/
/******************** EHLLAPI RETURN CODES ***************************/
/*********************************************************************/
#define HARC_SUCCESS 0 /* 000 Good return code. */
#define HARC99_INVALID_INP 0 /* 000 Incorrect input */
#define HARC_INVALID_PS 1 /* 000 Invalid PS, Not */
#define HARC_BAD_PARM 2 /* 000 Bad parameter, or */
#define HARC_BUSY 4 /* 000 PS is busy return */
#define HARC_LOCKED 5 /* 000 PS is LOCKed, or */
#define HARC_TRUNCATION 6 /* 000 Truncation */
#define HARC_INVALID_PS_POS 7 /* 000 Invalid PS */
#define HARC_NO_PRIOR_START 8 /* 000 No prior start */
#define HARC_SYSTEM_ERROR 9 /* 000 A system error */
#define HARC_UNSUPPORTED 10 /* 000 Invalid or */
#define HARC_UNAVAILABLE 11 /* 000 Resource is */
#define HARC_SESSION_STOPPED 12 /* 000 Session has */
#define HARC_BAD_MNEMONIC 20 /* 000 Illegal mnemonic */
#define HARC_OIA_UPDATE 21 /* 000 A OIA update */
#define HARC_PS_UPDATE 22 /* 000 A PS update */
#define HARC_PS_AND_OIA_UPDATE 23 /* A PS and OIA update */
#define HARC_STR_NOT_FOUND_UNFM_PS 24 /* 000 String not found, */
#define HARC_NO_KEYS_AVAIL 25 /* 000 No keys available */
#define HARC_HOST_UPDATE 26 /* 000 A HOST update */
#define HARC_FIELD_LEN_ZERO 28 /* 000 Field length = 0 */
#define HARC_QUEUE_OVERFLOW 31 /* 000 Keystroke queue */
#define HARC_ANOTHER_CONNECTION 32 /* 000 Successful. Another */
#define HARC_INBOUND_CANCELLED 34 /* 000 Inbound structured */
#define HARC_OUTBOUND_CANCELLED 35 /* 000 Outbound structured */
#define HARC_CONTACT_LOST 36 /* 000 Contact with the */
#define HARC_INBOUND_DISABLED 37 /* 000 Host structured field */
#define HARC_FUNCTION_INCOMPLETE 38 /* 000 Requested Asynchronous*/
#define HARC_DDM_ALREADY_EXISTS 39 /* 000 Request for DDM */
#define HARC_ASYNC_REQUESTS_OUT 40 /* 000 Disconnect successful.*/
#define HARC_MEMORY_IN_USE 41 /* 000 Memory cannot be freed*/
#define HARC_NO_MATCH 42 /* 000 No pending */
#define HARC_OPTION_INVALID 43 /* 000 Option requested is */
#define HARC99_INVALID_PS 9998 /* 000 An invalid PS id */
#define HARC99_INVALID_CONV_OPT 9999 /* 000 Invalid convert */

#ifdef __cplusplus
}
#endif

#endif // #ifdef EHLAPI32_HEAD

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba
Hey Tom - we are working on the wrapper and want to make sure we have the right header file - ehlapi32.h - this is one I found on IBM - is it the same one Rumba uses? If not could you please paste it here? Thanks!

/*****************************************************************************/
/* */
/* Module Name : EHLAPI32.H */
/* */
/* Description : EHLLAPI Structure, Return Codes and Routines */
/* */
/* Copyright Notice: IBM Personal Communication/3270 Version 4.3 */
/* (C) COPYRIGHT IBM CORP. 1989,1995 - PROGRAM PROPERTY */
/* OF IBM ALL RIGHTS RESERVED */
/* */
/*---------------------------------------------------------------------------*/
/* Function: */
/* */
/* Define the EHLLAPI structure, return code constants and */
/* the external routines for EHLLAPI. */
/* */
/*---------------------------------------------------------------------------*/
/* Change Activity: */
/* */
/* DCRs */
/* ==========================================================================*/
/* dcrnum rls date name description of change */
/* @BD1 fp000011 600 012301 MM Add Hllapi call for Query Additional */
/* Field Attributes */
/* @BD2 Def81383 5.5 062602 Supriya Connect SF return 9 due to padding */
/* in 16-bit Structures */
/*****************************************************************************/
#ifndef EHLAPI32_HEAD
#define EHLAPI32_HEAD

#ifdef __cplusplus
extern "C" {
#endif

#pragma pack(1) //@BD2a

/*********************************************************************/
/**************** EHLLAPI FUNCTION PROTOTYPES ************************/
/*********************************************************************/
extern long far pascal HLLAPI(WORD*, LPSTR, WORD*, WORD*);
extern long far pascal hllapi(WORD*, LPSTR, WORD*, WORD*);

#include "hllstr16.h" /* EHLAPI struct definitions */

/*********************************************************************/
/**************** EHLLAPI FUNCTION NUMBERS ***************************/
/*********************************************************************/
#define HA_CONNECT_PS 1 /* 000 Connect PS */
#define HA_DISCONNECT_PS 2 /* 000 Disconnect PS */
#define HA_SENDKEY 3 /* 000 Sendkey function */
#define HA_WAIT 4 /* 000 Wait function */
#define HA_COPY_PS 5 /* 000 Copy PS function */
#define HA_SEARCH_PS 6 /* 000 Search PS function */
#define HA_QUERY_CURSOR_LOC 7 /* 000 Query Cursor */
#define HA_COPY_PS_TO_STR 8 /* 000 Copy PS to String */
#define HA_SET_SESSION_PARMS 9 /* 000 Set Session */
#define HA_QUERY_SESSIONS 10 /* 000 Query Sessions */
#define HA_RESERVE 11 /* 000 Reserve function */
#define HA_RELEASE 12 /* 000 Release function */
#define HA_COPY_OIA 13 /* 000 Copy OIA function */
#define HA_QUERY_FIELD_ATTR 14 /* 000 Query Field */
#define HA_COPY_STR_TO_PS 15 /* 000 Copy string to PS */
#define HA_STORAGE_MGR 17 /* 000 Storage Manager */
#define HA_PAUSE 18 /* 000 Pause function */
#define HA_QUERY_SYSTEM 20 /* 000 Query System */
#define HA_RESET_SYSTEM 21 /* 000 Reset System */
#define HA_QUERY_SESSION_STATUS 22 /* 000 Query Session */
#define HA_START_HOST_NOTIFY 23 /* 000 Start Host */
#define HA_QUERY_HOST_UPDATE 24 /* 000 Query Host Update */
#define HA_STOP_HOST_NOTIFY 25 /* 000 Stop Host */
#define HA_SEARCH_FIELD 30 /* 000 Search Field */
#define HA_FIND_FIELD_POS 31 /* 000 Find Field */
#define HA_FIND_FIELD_LEN 32 /* 000 Find Field Length */
#define HA_COPY_STR_TO_FIELD 33 /* 000 Copy String to */
#define HA_COPY_FIELD_TO_STR 34 /* 000 Copy Field to */
#define HA_SET_CURSOR 40 /* 000 Set Cursor */
#define HA_START_CLOSE_INTERCEPT 41 /* 000 Start Close Intercept */
#define HA_QUERY_CLOSE_INTERCEPT 42 /* 000 Query Close Intercept */
#define HA_STOP_CLOSE_INTERCEPT 43 /* 000 Stop Close Intercept */
#define HA_QUERY_ADD_FIELD_ATTR 45 /* 000 Additional Query Field*/ //BD1a
#define HA_START_KEY_INTERCEPT 50 /* 000 Start Keystroke */
#define HA_GET_KEY 51 /* 000 Get Key function */
#define HA_POST_INTERCEPT_STATUS 52 /* 000 Post Intercept */
#define HA_STOP_KEY_INTERCEPT 53 /* 000 Stop Keystroke */
#define HA_LOCK_PS 60 /* 000 Lock Presentation */
#define HA_LOCK_PMSVC 61 /* 000 Lock PM Window */
#define HA_SEND_FILE 90 /* 000 Send File function */
#define HA_RECEIVE_FILE 91 /* 000 Receive file */
#define HA_CONVERT_POS_ROW_COL 99 /* 000 Convert Position */
#define HA_CONNECT_PM_SRVCS 101 /* 000 Connect For */
#define HA_DISCONNECT_PM_SRVCS 102 /* 000 Disconnect From */
#define HA_QUERY_WINDOW_COORDS 103 /* 000 Query Presentation */
#define HA_PM_WINDOW_STATUS 104 /* 000 PM Window Status */
#define HA_CHANGE_SWITCH_NAME 105 /* 000 Change Switch List */
#define HA_CHANGE_WINDOW_NAME 106 /* 000 Change PS Window */
#define HA_START_PLAYING_MACRO 110 /* 000 Start playing macro */
#define HA_START_STRUCTURED_FLD 120 /* 000 Start Structured */
#define HA_STOP_STRUCTURED_FLD 121 /* 000 Stop Structured */
#define HA_QUERY_BUFFER_SIZE 122 /* 000 Query Communications */
#define HA_ALLOCATE_COMMO_BUFF 123 /* 000 Allocate */
#define HA_FREE_COMMO_BUFF 124 /* 000 Free Communications */
#define HA_GET_ASYNC_COMPLETION 125 /* 000 Get Asynchronous */
#define HA_READ_STRUCTURED_FLD 126 /* 000 Read Structured Field */
#define HA_WRITE_STRUCTURED_FLD 127 /* 000 Write Structured */

/*********************************************************************/
/******************** EHLLAPI RETURN CODES ***************************/
/*********************************************************************/
#define HARC_SUCCESS 0 /* 000 Good return code. */
#define HARC99_INVALID_INP 0 /* 000 Incorrect input */
#define HARC_INVALID_PS 1 /* 000 Invalid PS, Not */
#define HARC_BAD_PARM 2 /* 000 Bad parameter, or */
#define HARC_BUSY 4 /* 000 PS is busy return */
#define HARC_LOCKED 5 /* 000 PS is LOCKed, or */
#define HARC_TRUNCATION 6 /* 000 Truncation */
#define HARC_INVALID_PS_POS 7 /* 000 Invalid PS */
#define HARC_NO_PRIOR_START 8 /* 000 No prior start */
#define HARC_SYSTEM_ERROR 9 /* 000 A system error */
#define HARC_UNSUPPORTED 10 /* 000 Invalid or */
#define HARC_UNAVAILABLE 11 /* 000 Resource is */
#define HARC_SESSION_STOPPED 12 /* 000 Session has */
#define HARC_BAD_MNEMONIC 20 /* 000 Illegal mnemonic */
#define HARC_OIA_UPDATE 21 /* 000 A OIA update */
#define HARC_PS_UPDATE 22 /* 000 A PS update */
#define HARC_PS_AND_OIA_UPDATE 23 /* A PS and OIA update */
#define HARC_STR_NOT_FOUND_UNFM_PS 24 /* 000 String not found, */
#define HARC_NO_KEYS_AVAIL 25 /* 000 No keys available */
#define HARC_HOST_UPDATE 26 /* 000 A HOST update */
#define HARC_FIELD_LEN_ZERO 28 /* 000 Field length = 0 */
#define HARC_QUEUE_OVERFLOW 31 /* 000 Keystroke queue */
#define HARC_ANOTHER_CONNECTION 32 /* 000 Successful. Another */
#define HARC_INBOUND_CANCELLED 34 /* 000 Inbound structured */
#define HARC_OUTBOUND_CANCELLED 35 /* 000 Outbound structured */
#define HARC_CONTACT_LOST 36 /* 000 Contact with the */
#define HARC_INBOUND_DISABLED 37 /* 000 Host structured field */
#define HARC_FUNCTION_INCOMPLETE 38 /* 000 Requested Asynchronous*/
#define HARC_DDM_ALREADY_EXISTS 39 /* 000 Request for DDM */
#define HARC_ASYNC_REQUESTS_OUT 40 /* 000 Disconnect successful.*/
#define HARC_MEMORY_IN_USE 41 /* 000 Memory cannot be freed*/
#define HARC_NO_MATCH 42 /* 000 No pending */
#define HARC_OPTION_INVALID 43 /* 000 Option requested is */
#define HARC99_INVALID_PS 9998 /* 000 An invalid PS id */
#define HARC99_INVALID_CONV_OPT 9999 /* 000 Invalid convert */

#ifdef __cplusplus
}
#endif

#endif // #ifdef EHLAPI32_HEAD

I am using Rumba Unix 9.4.1 on Windows 7 Pro Enterprise in conjunction with  a process automation tool that sends keystrokes and scrapes the Rumba screen as well per the automation script I developed.  I would like to know how this is being done.  I thought it was HLLAPI but now I have to wonder if it might be DDE?  First, I launch an emulator with a shortname of "X".  Then I launch the automation tool but don't start the script.  I use "listdlls" at this point and there is no HLLAPI DLL listed being used by the tool.  I then start the script and after "Detect Emulators", listdlls shows "ehlapi32.dll" is now being used by the automation tool.  I then step the script to where keystrokes are sent to Rumba (and displayed) at which point I use ListDlls to see what Rumpage.exe is using and to my chagrin no HLLAPI dlls are found.  Any idea how Rumba is communicating?

 

Thanks


#Rumba

Hi kpozmann,

You shouldn't need a header file, if you look above you will see that this is only use to provide String identifier for the various Function Numbers and return codes etc. The HA and HARC prefixes indicate "Host Access" and "Host Access Return Code", are are simple the relevant function number or return code at the end of the day.

You should have a copy of the header files for the various flavours of HLLAPI in your installation under

         C:\\Program Files (x86)\\Micro Focus\\RUMBA\\Tools\\Include\\            (on 64-bit MS Windows)
or
         C:\\Program Files\\Micro Focus\\RUMBA\\Tools\\Include\\                     (on 32-bit MS Windows)

Also here is a link to the Extra! documentation for EHLLAPI: http://docs.attachmate.com/extra/x-treme/apis/ehllapi.pdf. The Rumba implementation should be very similar (after all it is a standard), but there are possibly small differences here and there.

Regards,
Tom