Skip to Content
Technical Articles
Author's profile photo Stefan Schnell

SendKeys from VBA to a session window

In context of the posting from mic jones here I check different ways of SendKey from an Excel VBA application to a session window.

At first I identfiy the handle of the session window and set it in foreground with the following code

Private Declare Function SetForegroundWindow Lib "user32.dll" _
  (ByVal hWnd As Long) As Long

hWnd = Session.ActiveWindow.Handle
SetForegroundWindow hWnd

 

After that I use different methods of SendKeys:

  1. Standard VBA SendKeys, but it doesn’t work.SendKeys “+{DOWN}”, True 
  2. SendKeys via SendMessage, but it doesn’t work.Private Declare Function SendMessageA Lib “user32.dll” _
      (ByVal hWnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long

    SendMessageA hWnd, &H100, vbKeyShift, 0
    SendMessageA hWnd, &H100, vbKeyDown, 0
    SendMessageA hWnd, &H101, vbKeyDown, 0
    SendMessageA hWnd, &H101, vbKeyShift, 0
    DoEvents 
  3. SendKeys via keybd_event, but it doesn’t work.Private Declare Sub keybd_event Lib “user32.dll” _
      (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

    keybd_event &H10, 0, 0, 0
    keybd_event &H28, 0, 0, 0
    keybd_event &H28, 0, 2, 0
    keybd_event &H10, 0, 2, 0 
  4. SendKeys via Windows Scripting Host and this works very fine.Dim wsh As WshShell
    Set wsh = CreateObject(“WScript.Shell”)
    wsh.SendKeys “+{DOWN}”

Maybe someone can use this information or show different ways.

Assigned Tags

      5 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo mic grasso
      mic grasso

      Hi Stefan

      This is what I used - for option 1 - plain old send keys. I needed a sleep. In the code - not myself!

                  Dim hwnd As Long

                  hwnd = ses.ActiveWindow.Handle

                  SetForegroundWindows hwnd

                  SendKeys "+{DOWN}", True  ' move down

                  sleep 250 ' library call

      Author's profile photo Former Member
      Former Member

      Thanks for sharing this information!  🙂

      Author's profile photo Sayuti Azmi
      Sayuti Azmi

      Dear Stefan,

      For the purpose of scrolling down a GuiTableControl object, I found using Page Down key works as well.

      We can use the GuiMainWindow.SendVKey 82 from SAP Scripting API to do this.

      Thanks,

      Sayuti

      Author's profile photo Márcio Vieira
      Márcio Vieira

      Dear Stefan,

      I'm having difficulty resolving an issue that seemed simple, but not being ...

      ... While trying to save a table in "RTF" format opens the window "Save As", but I'm not able to access it through the AutoIt functions, after searching here in the forum, I found a solution that uses the user32 .dll but this in VBScript. It would be possible you help me convert the code to AutoIt?


      The link this script here: Support on VB script for report


      ...posted by


      Thank you.

      Márcio.

      Author's profile photo Stefan Schnell
      Stefan Schnell
      Blog Post Author

      Hello Marcio,

      you can find a solution here.

      Cheers

      Stefan