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> </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> </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> </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> </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> </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:"= ;Calibri",sans-serif;mso-ligatures:none">From:</span></b><span style= =3D"font-size:11.0pt;font-family:"Calibri",sans-serif;mso-ligatur= es:none"> [email protected] <vwnc-request@lis= ts.siebelschool.illinois.edu> <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> </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:"Segoe UI",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 >> send:eventUnknown: and see if you are= lucky and can catch a 16r3D there?<o:p></o:p></p> <p><o:p> </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> </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"> </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"> </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"> </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"> </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"> </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"> </span><o:p><= /o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> &= 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"> </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"> </span><o:p><= /o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> &= nbsp; | c= allback old |</span><o:p></o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> &= 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; cal= lback :=3D CCallback</span><o:p></o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> &= nbsp; &nbs= p; &= nbsp; &nbs= p; &= 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; &nbs= p; &= nbsp; &nbs= p; &= nbsp; ofType: self WN= DPROC pointerType.</span><o:p></o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> &= 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; sel= f halt</span><o:p></o:p></p> <p class=3D"MsoNormal"><span style=3D"font-size:11.0pt"> </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"> </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"> </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"> </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"> </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_--