RE: [EXT] Re: Microsoft UI Automation in VisualWorks?

Mark Plas <[email protected]> Fri, 21 Nov 2025 06:18:09 +0000
Newsgroups gmane.comp.lang.smalltalk.vwnc
Message-ID <AM8PR05MB795488AAC2F83365B9D00710FAD5A@AM8PR05MB7954.eurprd05.prod.outlook.com>
--_000_AM8PR05MB795488AAC2F83365B9D00710FAD5AAM8PR05MB7954eurp_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

Hi Reinout,

Thanks for the reply.

The problem indeed is that the message requires a result to be returned. Yo=
u cannot return results to windows messages from within Smalltalk (The wind=
ow procedure has already long returned before that happens, and the Smallta=
lk events are just copies of the original event and are processed asynchron=
ously). You need to be able to intercept the window procedure itself, but t=
hat doesn=E2=80=99t work.

In the meantime, I did some C-debugging and it=E2=80=99s clear that handlin=
g the messages from within Smalltalk cannot work. There are deadlocks becau=
se of the way the VM handles Windows events.

Mark

Mark Plas
Product Engineer


https://urldefense.com/v3/__http://www.mediagenix.tv__;!!DZ3fjg!4oTGo9bUq1d=
xJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST4oo97tH89NbUlJD=
tp2aN7j1EtyLbHYWM$ <https://urldefense.com/v3/__https://www.mediagenix.tv__=
;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV=
9aHkST4oo97tH89NbUlJDtp2aN7j1EtKN9wMkM$ >

[cid:mediagenix-baseline_light_600x40_476d4020-d5be-4afc-b4ba-c52a5c350ce7.=
png]
<https://urldefense.com/v3/__https://www.mediagenix.tv/__;!!DZ3fjg!4oTGo9bU=
q1dxJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST4oo97tH89NbU=
lJDtp2aN7j1Et_i84WBg$ >
[cid:mediagenix-signature_gradient_583x2_914692b5-3f5f-4311-bb2a-3bfa15bd6f=
c2.png]
This e-mail and any files attached to it are confidential and intended only=
 for the use of the individuals or entity to whom they are addressed. If yo=
u have received this e-mail in error, please notify the sender immediately.


From: [email protected] <[email protected]=
elschool.illinois.edu> On Behalf Of Reinout Heeck
Sent: Wednesday, November 19, 2025 5:30 PM
To: [email protected]
Subject: [EXT] Re: [vwnc] Microsoft UI Automation in VisualWorks?


U ontvangt niet vaak e-mail van [email protected]<mailto:[email protected]>. =
Ontdek waarom dit belangrijk is<https://urldefense.com/v3/__https://aka.ms/=
LearnAboutSenderIdentification__;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjd=
rLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST4oo97tH89NbUlJDtp2aN7j1EtOqUatqU$ >


Warning: This is an external email. Do not click on links or open attachmen=
ts unless you recognize the sender and know the content is safe.

Hey Mark,

WM_GETOBJECT =3D 0x003D

Have a look at InputState >> send:eventUnknown: and see if you are lucky an=
d can catch a 16r3D there?



Not sure how to return the com interface from there though...

-Reinout


On 19/11/2025 12:23, Mark Plas wrote:
Hi all,

Has anyone ever implemented Microsoft UI Automation in VisualWorks?

https://urldefense.com/v3/__https://learn.microsoft.com/en-us/windows/win32=
/winauto/entry-uiauto-win32__;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjdrLZ=
W0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST4oo97tH89NbUlJDtp2aN7j1EtoPziXAE$ <https=
://urldefense.com/v3/__https:/learn.microsoft.com/en-us/windows/win32/winau=
to/entry-uiauto-win32__;!!DZ3fjg!_aQGOK7EA64lDd39rsL3YgMyNrjpz-h71lMBNG-HmS=
uaCpXFN4HqRsEhPwgCPsx8cr6dxMreJnNEF_VebzM95XCf$>

This is becoming a requirement for us, and I wanted to know if anyone has e=
ver done this before.

Alternatively, does anyone know how to intercept a windows message and retu=
rn a result for it from within VisualWorks?

As a small experiment, I tried to intercept the WM_GETOBJECT message as des=
cribed here:

                https://urldefense.com/v3/__https://learn.microsoft.com/en-=
us/windows/win32/winauto/wm-getobject__;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc=
1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST4oo97tH89NbUlJDtp2aN7j1Ets_MPR=
Ro$ <https://urldefense.com/v3/__https:/learn.microsoft.com/en-us/windows/w=
in32/winauto/wm-getobject__;!!DZ3fjg!_aQGOK7EA64lDd39rsL3YgMyNrjpz-h71lMBNG=
-HmSuaCpXFN4HqRsEhPwgCPsx8cr6dxMreJnNEF_Veb6sI9g7W$>

In order to do this from within Smalltalk, I tried to replace the window pr=
ocedure of a window, with a callback like this:

                | callback old |
                old :=3D self getWindowLong: aWindow windowHandle nIndex: -=
4.
                callback :=3D CCallback
                                                                do: [:hwnd =
:uMsg :wParam :lParam | self CallWindowProcWWith: old with: hwnd with: uMsg=
 with: wParam with: lParam]
                                                                ofType: sel=
f WNDPROC pointerType.
                self setWindowLongPtr: aWindow windowHandle nIndex: -4 dwNe=
wLong: callback.
                self halt

In the callback I just call the old window procedure, so the window should =
just behave as if nothing was changed.

However, this doesn=E2=80=99t really work. As long as I only move the mouse=
 over a window it seems to work, but as soon as I click on a window VisualW=
orks stops handling messages and the application needs to be killed.

Does anyone know how to do this?

In summary:

 1.  Has anyone implemented Microsoft UI Automation in VisualWorks?
 2.  Does anyone know how to intercept windows messages and return a result=
 for them from within VisualWorks Smalltalk code?

Thanks in advance,
Mark

--_000_AM8PR05MB795488AAC2F83365B9D00710FAD5AAM8PR05MB7954eurp_
Content-Type: multipart/related;
	boundary="_e39b0ab5-a8cc-4257-93ef-6a30544d5724_"

--_e39b0ab5-a8cc-4257-93ef-6a30544d5724_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8">
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
	{font-family:Aptos;}
@font-face
	{font-family:"Segoe UI";
	panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:12.0pt;
	font-family:"Aptos",sans-serif;
	mso-ligatures:standardcontextual;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#467886;
	text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
	{mso-style-priority:34;
	margin-top:0cm;
	margin-right:0cm;
	margin-bottom:0cm;
	margin-left:36.0pt;
	font-size:12.0pt;
	font-family:"Aptos",sans-serif;
	mso-ligatures:standardcontextual;}
span.EmailStyle22
	{mso-style-type:personal-reply;
	font-family:"Aptos",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-size:10.0pt;
	mso-ligatures:none;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
/* List Definitions */
@list l0
	{mso-list-id:1003825289;
	mso-list-template-ids:-1879682666;}
@list l0:level1
	{mso-level-tab-stop:36.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level2
	{mso-level-tab-stop:72.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level3
	{mso-level-tab-stop:108.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level4
	{mso-level-tab-stop:144.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level5
	{mso-level-tab-stop:180.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level6
	{mso-level-tab-stop:216.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level7
	{mso-level-tab-stop:252.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level8
	{mso-level-tab-stop:288.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l0:level9
	{mso-level-tab-stop:324.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;}
@list l1
	{mso-list-id:1443106148;
	mso-list-template-ids:3325712;}
@list l1:level1
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:36.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level2
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:72.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level3
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:108.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level4
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:144.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level5
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:180.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level6
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:216.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level7
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:252.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level8
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:288.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
@list l1:level9
	{mso-level-number-format:bullet;
	mso-level-text:=EF=82=B7;
	mso-level-tab-stop:324.0pt;
	mso-level-number-position:left;
	text-indent:-18.0pt;
	mso-ansi-font-size:10.0pt;
	font-family:Symbol;}
ol
	{margin-bottom:0cm;}
ul
	{margin-bottom:0cm;}
--></style>
</head>
<body lang=3D"EN-US" link=3D"#467886" vlink=3D"purple" style=3D"word-wrap:b=
reak-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Hi Reinout,<o:p></o=
:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"><o:p>&nbsp;</o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Thanks for the repl=
y.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"><o:p>&nbsp;</o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">The problem indeed =
is that the message requires a result to be returned. You cannot return res=
ults to windows messages from within Smalltalk (The window procedure has al=
ready long returned before that happens,
 and the Smalltalk events are just copies of the original event and are pro=
cessed asynchronously). You need to be able to intercept the window procedu=
re itself, but that doesn=E2=80=99t work.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"><o:p>&nbsp;</o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">In the meantime, I =
did some C-debugging and it=E2=80=99s clear that handling the messages from=
 within Smalltalk cannot work. There are deadlocks because of the way the V=
M handles Windows events.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"><o:p>&nbsp;</o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Mark<o:p></o:p></sp=
an></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"><o:p>&nbsp;</o:p></=
span></p>
<table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" width=3D"600" style=
=3D"font-family: 'Poppins', 'Century Gothic', Helvetica, Arial, sans-serif;=
">
    <tbody>
        <tr>
            <td style=3D"padding-top:10px;padding-left:17px;">
                <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wid=
th=3D"100%">
                    <tbody>
                        <tr>
                            <td align=3D"left" valign=3D"top" width=3D"600"=
 style=3D"padding-top:20px;word-break: normal; word-wrap: normal;font-famil=
y: 'Poppins', 'Century Gothic', Helvetica, Arial, sans-serif; font-size: 14=
px; font-weight: 700; line-height: 18px;mso-line-height-rule: exactly; mso-=
text-raise:4px;text-align: left; color: #000000; text-decoration:none;moz-h=
yphens: none; hyphens: none;mso-hyphenate: none">Mark Plas</td>
                        </tr>
                        <tr>
                            <td align=3D"left" valign=3D"top" width=3D"600"=
 style=3D"word-break: normal; word-wrap: normal;font-family: 'Poppins', 'Ce=
ntury Gothic', Helvetica, Arial, sans-serif; font-size: 14px; font-weight: =
300; line-height: 18px;mso-line-height-rule: exactly; mso-text-raise:4px;te=
xt-align: left; color: #000000; text-decoration:none;moz-hyphens: none; hyp=
hens: none;mso-hyphenate: none">Product Engineer</td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
            <td style=3D"padding-top:10px;padding-left:17px;">
                <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wid=
th=3D"100%">
                    <tbody>
                        <tr>
                            <td align=3D"left" valign=3D"bottom" width=3D"3=
%" style=3D"word-break: normal; word-wrap: normal;font-family: Poppins, 'Ce=
ntury Gothic', Helvetica, Arial, sans-serif; font-size: 12px; font-weight: =
400; line-height: 18px; mso-line-height-rule: exactly; mso-text-raise:4px;t=
ext-align: left; color: #000000; text-decoration:none;moz-hyphens: none; hy=
phens: none;mso-hyphenate: none" class=3D"" colspan=3D"1"></td>
                        </tr>
                        <tr>
                            <td align=3D"left" valign=3D"bottom" width=3D"3=
%" style=3D"word-break: normal; word-wrap: normal;font-family: Poppins, 'Ce=
ntury Gothic', Helvetica, Arial, sans-serif; font-size: 12px; font-weight: =
400; line-height: 18px; mso-line-height-rule: exactly; mso-text-raise:4px;t=
ext-align: left; color: #000000; text-decoration:none;moz-hyphens: none; hy=
phens: none;mso-hyphenate: none" class=3D"" colspan=3D"1"><span style=3D"fo=
nt-weight: 700;"></span><a href=3D"https://urldefense.com/v3/__https://www.=
mediagenix.tv__;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4z=
UKg2OBV3yXLg5KV9aHkST4oo97tH89NbUlJDtp2aN7j1EtKN9wMkM$" style=3D"word-break=
: normal; word-wrap: normal;font-family: Poppins, 'Century Gothic', Helveti=
ca, Arial, sans-serif; font-size: 12px; font-weight: 300; line-height: 18px=
; mso-line-height-rule: exactly; mso-text-raise:4px;text-align: right; colo=
r: #000000; text-decoration:none;moz-hyphens: none; hyphens: none;mso-hyphe=
nate: none">www.mediagenix.tv</a></td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>

        <tr>
            <td align=3D"left" valign=3D"top" style=3D"text-decoration: non=
e; border: none;padding-top:10px;" width=3D"600">
                <a href=3D"https://urldefense.com/v3/__https://www.mediagen=
ix.tv/__;!!DZ3fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV=
3yXLg5KV9aHkST4oo97tH89NbUlJDtp2aN7j1Et_i84WBg$" title=3D"Mediagenix TV">
                    <img src=3D"cid:mediagenix-baseline_light_600x40_476d40=
20-d5be-4afc-b4ba-c52a5c350ce7.png" border=3D"0" id=3D"0.5cxluw9aa54" alt=
=3D"mediagenix-baseline_light_600x40.png"><br>
                </a>
            </td>
        </tr>

        <tr>
            <td align=3D"left" style=3D"padding-left:17px;" width=3D"600">
                <img src=3D"cid:mediagenix-signature_gradient_583x2_914692b=
5-3f5f-4311-bb2a-3bfa15bd6fc2.png" border=3D"0" id=3D"0.0zbjbsbxes2" alt=3D=
"mediagenix-signature_gradient_583x2.png">
            </td>
        </tr>

        <tr>
            <td style=3D"padding-top:10px;padding-left:17px;">
                <table border=3D"0" cellpadding=3D"0" cellspacing=3D"0" wid=
th=3D"100%">
                    <tbody>
                        <tr>       =20
                            <td valign=3D"top" colspan=3D"2" style=3D"word-=
break: normal; word-wrap: normal;font-family: Poppins, 'Century Gothic', He=
lvetica, Arial, sans-serif; font-size: 10px; font-weight: 300; line-height:=
 14px; mso-line-height-rule: exactly; mso-text-raise:4px;text-align: left; =
color: #000000; text-decoration:none;moz-hyphens: none; hyphens: none;mso-h=
yphenate: none" width=3D"400">This e-mail and any files attached to it are =
confidential and intended only for the use of the individuals or entity to =
whom they are addressed. If you have received this e-mail in error, please =
notify the sender immediately.<br></td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table><div>
<div style=3D"border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm =
0cm 0cm">
<p class=3D"MsoNormal"><b><span style=3D"font-size:11.0pt;font-family:&quot=
;Calibri&quot;,sans-serif;mso-ligatures:none">From:</span></b><span style=
=3D"font-size:11.0pt;font-family:&quot;Calibri&quot;,sans-serif;mso-ligatur=
es:none"> [email protected] &lt;vwnc-request@lis=
ts.siebelschool.illinois.edu&gt;
<b>On Behalf Of </b>Reinout Heeck<br>
<b>Sent:</b> Wednesday, November 19, 2025 5:30 PM<br>
<b>To:</b> [email protected]<br>
<b>Subject:</b> [EXT] Re: [vwnc] Microsoft UI Automation in VisualWorks?<o:=
p></o:p></span></p>
</div>
</div>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<table class=3D"MsoNormalTable" border=3D"0" cellspacing=3D"0" cellpadding=
=3D"0" align=3D"left" width=3D"100%" style=3D"width:100.0%">
<tbody>
<tr>
<td width=3D"0" style=3D"width:.3pt;background:#A6A6A6;padding:5.25pt 1.5pt=
 5.25pt 1.5pt">
</td>
<td width=3D"100%" style=3D"width:100.0%;background:#EAEAEA;padding:5.25pt =
3.75pt 5.25pt 11.25pt;aspect-ratio: revert !important;background:revert !im=
portant;block-size: revert !important;border:revert !important;bottom: reve=
rt !important;color:revert !important;color-scheme: revert !important;conte=
nt-visibility: revert !important;cursor:revert !important;direction:revert =
!important;display:revert !important;font-size:revert !important;height:rev=
ert !important;hyphens: revert !important;letter-spacing:revert !important;=
line-height:revert !important;margin:revert !important;opacity: revert !imp=
ortant;order: revert !important;outline: revert !important;overflow:revert =
!important;padding:revert !important;position:revert !important;resize: rev=
ert !important;rotate: revert !important;scale: revert !important;tab-size:=
 revert !important;table-layout:revert !important;text-align:revert !import=
ant;text-indent:revert !important;text-orientation: revert !important;text-=
overflow: revert !important;text-shadow:revert !important;text-transform:re=
vert !important;text-wrap: revert !important;top:revert !important;transiti=
on: revert !important;user-select: revert !important;vertical-align:revert =
!important;visibility:revert !important;white-space:revert !important;width=
:revert !important;word-break:revert !important;word-spacing:revert !import=
ant;writing-mode:revert !important;zoom: revert !important">
<div>
<p class=3D"MsoNormal" style=3D"mso-element:frame;mso-element-frame-hspace:=
2.25pt;mso-element-wrap:around;mso-element-anchor-vertical:paragraph;mso-el=
ement-anchor-horizontal:column;mso-height-rule:exactly">
<span style=3D"font-size:9.0pt;font-family:&quot;Segoe UI&quot;,sans-serif;=
color:#212121">U ontvangt niet vaak e-mail van
<a href=3D"mailto:[email protected]">[email protected]</a>. <a href=3D"https:=
//urldefense.com/v3/__https://aka.ms/LearnAboutSenderIdentification__;!!DZ3=
fjg!4oTGo9bUq1dxJ_OKzZmp-bWvoc1ZB4xjdrLZW0UVyfyqd-Qm4zUKg2OBV3yXLg5KV9aHkST=
4oo97tH89NbUlJDtp2aN7j1EtOqUatqU$">
Ontdek waarom dit belangrijk is</a> <o:p></o:p></span></p>
</div>
</td>
<td width=3D"75" style=3D"width:56.25pt;background:#EAEAEA;padding:5.25pt 3=
.75pt 5.25pt 3.75pt;aspect-ratio: revert !important;background:revert !impo=
rtant;block-size: revert !important;border:revert !important;bottom: revert=
 !important;color:revert !important;color-scheme: revert !important;content=
-visibility: revert !important;cursor:revert !important;direction:revert !i=
mportant;display:revert !important;font-size:revert !important;height:rever=
t !important;hyphens: revert !important;letter-spacing:revert !important;li=
ne-height:revert !important;margin:revert !important;opacity: revert !impor=
tant;order: revert !important;outline: revert !important;overflow:revert !i=
mportant;padding:revert !important;position:revert !important;resize: rever=
t !important;rotate: revert !important;scale: revert !important;tab-size: r=
evert !important;table-layout:revert !important;text-align:revert !importan=
t;text-indent:revert !important;text-orientation: revert !important;text-ov=
erflow: revert !important;text-shadow:revert !important;text-transform:reve=
rt !important;text-wrap: revert !important;top:revert !important;transition=
: revert !important;user-select: revert !important;vertical-align:revert !i=
mportant;visibility:revert !important;white-space:revert !important;width:r=
evert !important;word-break:revert !important;word-spacing:revert !importan=
t;writing-mode:revert !important;zoom: revert !important;align: left !impor=
tant">
</td>
</tr>
</tbody>
</table>
<div>
<p align=3D"center" style=3D"mso-margin-top-alt:0cm;margin-right:0cm;margin=
-bottom:.5pt;margin-left:61.2pt;text-align:center;background:#FFFFCC">
<b><span style=3D"color:red">Warning:</span></b><span style=3D"color:black"=
> This is an external email. Do not click on links or open attachments unle=
ss you recognize the sender and know the content is safe.<o:p></o:p></span>=
</p>
<div>
<p>Hey Mark,<o:p></o:p></p>
<p>WM_GETOBJECT =3D 0x003D<o:p></o:p></p>
<p>Have a look at InputState &gt;&gt; send:eventUnknown: and see if you are=
 lucky and can catch a 16r3D there?<o:p></o:p></p>
<p><o:p>&nbsp;</o:p></p>
<p>Not sure how to return the com interface from there though...<o:p></o:p>=
</p>
<p>-Reinout<o:p></o:p></p>
<p><o:p>&nbsp;</o:p></p>
<div>
<p class=3D"MsoNormal">On 19/11/2025 12:23, Mark Plas wrote:<o:p></o:p></p>
</div>
<blockquote style=3D"margin-top:5.0pt;margin-bottom:5.0pt">
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Hi all,</span><o:p>=
</o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Has anyone ever imp=
lemented <b>
Microsoft</b> UI Automation in VisualWorks?</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal" style=3D"text-indent:36.0pt"><span style=3D"font-siz=
e:11.0pt"><a href=3D"https://urldefense.com/v3/__https:/learn.microsoft.com=
/en-us/windows/win32/winauto/entry-uiauto-win32__;!!DZ3fjg!_aQGOK7EA64lDd39=
rsL3YgMyNrjpz-h71lMBNG-HmSuaCpXFN4HqRsEhPwgCPsx8cr6dxMreJnNEF_VebzM95XCf$">=
https://learn.microsoft.com/en-us/windows/win32/winauto/entry-uiauto-win32<=
/a></span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">This is becoming a =
requirement for us, and I wanted to know if anyone has ever done this befor=
e.</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Alternatively, does=
 anyone know how to intercept a windows message and return a result for it =
from within VisualWorks?</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">As a small experime=
nt, I tried to intercept the WM_GETOBJECT message as described here:</span>=
<o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a =
href=3D"https://urldefense.com/v3/__https:/learn.microsoft.com/en-us/window=
s/win32/winauto/wm-getobject__;!!DZ3fjg!_aQGOK7EA64lDd39rsL3YgMyNrjpz-h71lM=
BNG-HmSuaCpXFN4HqRsEhPwgCPsx8cr6dxMreJnNEF_Veb6sI9g7W$">
https://learn.microsoft.com/en-us/windows/win32/winauto/wm-getobject</a></s=
pan><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">In order to do this=
 from within Smalltalk, I tried to replace the window procedure of a window=
, with a callback like this:</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | c=
allback old |</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; old=
 :=3D self getWindowLong: aWindow windowHandle nIndex: -4.</span><o:p></o:p=
></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cal=
lback :=3D CCallback</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do: [:hwnd :uMs=
g :wParam :lParam | self CallWindowProcWWith: old with: hwnd with: uMsg wit=
h: wParam with: lParam]</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ofType: self WN=
DPROC pointerType.</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sel=
f setWindowLongPtr: aWindow windowHandle nIndex: -4 dwNewLong: callback.</s=
pan><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sel=
f halt</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">In the callback I j=
ust call the old window procedure, so the window should just behave as if n=
othing was changed.</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">However, this doesn=
=E2=80=99t really work. As long as I only move the mouse over a window it s=
eems to work, but as soon as I click on a window VisualWorks stops handling=
 messages and the application needs to be killed.</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Does anyone know ho=
w to do this?</span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">In summary:</span><=
o:p></o:p></p>
<ol style=3D"margin-top:0cm" start=3D"1" type=3D"1">
<li class=3D"MsoListParagraph" style=3D"margin-left:0cm;mso-list:l0 level1 =
lfo3"><span style=3D"font-size:11.0pt">Has anyone implemented Microsoft UI =
Automation in VisualWorks?</span><o:p></o:p></li><li class=3D"MsoListParagr=
aph" style=3D"margin-left:0cm;mso-list:l0 level1 lfo3"><span style=3D"font-=
size:11.0pt">Does anyone know how to intercept windows messages and return =
a result for them from within VisualWorks Smalltalk code?</span><o:p></o:p>=
</li></ol>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">&nbsp;</span><o:p><=
/o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Thanks in advance,<=
/span><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:11.0pt">Mark</span><o:p></o=
:p></p>
</blockquote>
</div>
</div>
</div>
</body>
</html>

--_e39b0ab5-a8cc-4257-93ef-6a30544d5724_
Content-Description:
 mediagenix-baseline_light_600x40_476d4020-d5be-4afc-b4ba-c52a5c350ce7.png
Content-Type: image/png; name=
	"mediagenix-baseline_light_600x40_476d4020-d5be-4afc-b4ba-c52a5c350ce7.png"
Content-Disposition: inline; filename=
	"mediagenix-baseline_light_600x40_476d4020-d5be-4afc-b4ba-c52a5c350ce7.png"
Content-Transfer-Encoding: base64
Content-ID:
 <mediagenix-baseline_light_600x40_476d4020-d5be-4afc-b4ba-c52a5c350ce7.png>

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

--_e39b0ab5-a8cc-4257-93ef-6a30544d5724_
Content-Description:
 mediagenix-signature_gradient_583x2_914692b5-3f5f-4311-bb2a-3bfa15bd6fc2.png
Content-Type: image/png; name=
	"mediagenix-signature_gradient_583x2_914692b5-3f5f-4311-bb2a-3bfa15bd6fc2.png"
Content-Disposition: inline; filename=
	"mediagenix-signature_gradient_583x2_914692b5-3f5f-4311-bb2a-3bfa15bd6fc2.png"
Content-Transfer-Encoding: base64
Content-ID:
 <mediagenix-signature_gradient_583x2_914692b5-3f5f-4311-bb2a-3bfa15bd6fc2.png>

iVBORw0KGgoAAAANSUhEUgAAAkcAAAACCAYAAABSSXgBAAAACXBIWXMAABwgAAAcIAHND5ueAAAC
ZUlEQVRYhYVWwbUcMQhDxzSROvLSfyd5vw7n4MEIAfZe1oNBEhjPgL+/f5adny8hz25bZwsGW2YG
LCNjQgIs2+Eb8YzPtr71MuxtmFmHDaLp8Enfjmch4XOgKYZ9T14NR+V/xEgtkPYQmgQ3+bW5ocEj
v6IZee8SA7CIzdXnsLUU7RSveYRvnLXmoL0TeKdDUlwfX+tzzJJ79oEByxYQsofzw9lcR2PUsMtH
MK++dnJFc96dNn9+1bjads7QHhEOtYFAXWOpMWvmK028bX81vAl7xdr7u8Po+iTwP6DPBgJm7idW
8YmzSnXv6v/UaLmu5z2M0KbnMuC3WrxvGdfM+F5Hb6/0nHAFu5yh5Jdt9RzW9zXIvc895v3qOul+
EK/WhHmLrkZvt277jHj4+zfhJy62XXQUvEnrwJOguv67abzpmHhEU/ec4h85FX7hvOm86mpywJ9f
/1beoX8/aF/D9gcDdPji38X7eg9AcQnKzeKGU1zjWPT8N4zyj7r/wMwDg+QoWh1rDXFcF9BwyPr0
ApRYx/Yh0F8RkkNpDphpF2dMsaebHUNAiw8zsI4p75Fnn2/b+Cd+94HWNdX0xEe/IW18rloXWtw+
1pxL5IQ2vzlnJPuntL7IiXzbLwNiq63XlTSm/1zfaUBhrhh0Bg1DHTLmMMgJb/zDdDAPW74LqY3Q
99WkpecW3HGv1uT24Znw68DM5yND6TW239N6TzX1/nOQF16pD/uUeq9k794DoAFK79yVa/J5xBW9
q6lnwzOt9S6wz1XvpOmhfcxJ8af1K6cb98CZYi96dX/Sd4tRrmus83zt/R/MQk3tiw1GGgAAAABJ
RU5ErkJggg==

--_e39b0ab5-a8cc-4257-93ef-6a30544d5724_--

--_000_AM8PR05MB795488AAC2F83365B9D00710FAD5AAM8PR05MB7954eurp_--