yet another VB question from Bolox

this one seems a bit trickier.........(i think)

I am in a travel agency, i want my VB database of discounted fares to communicate to another programme.

they will click on a button on my form i made, and it will pass the text AUTOMATICALLY to another programme they have open, called Sabre, it will type in :


and then press enter for them

Any ideas, i know how to do a copy to clip board, and then for them to paste it in to the programme, but i want to be even lazier.


If it is not too much bother, i want on the Sabre screen for the keys ALT and ENTER pressing befor the text is entered.

Thanx Experts


Who is Participating?
TimCotteeHead of Software ServicesCommented:
Then that is a bit more tricky. The AppActivate statement doesn't return whether or not it worked. However it does generate an error if no window is found that matches the name specified so:

On Error Resume Next
AppActivate "sabre"
If Err.Number = 0 Then
 'It was activated successfully
 'It doesn't exist so lets launch it:
 SabreApp = Shell("c:\program files\sabre\sabre.exe",vbNormalFocus)
 AppActivate SabreApp
End If
'Then use sendkeys as appropriate. You may want to automate logging in etc in the same way if you have had to launch the sabre application.

There are always other ways of course, including API calls which can make this much more reliable a method but you have to balance complexity and results.
TimCotteeHead of Software ServicesCommented:
You can use SendKeys to achieve this or DDE or even an API solution. Let us try sending keystrokes first:

SendKeys "%{ENTER}" & Text1.Text & "{ENTER}"

where % is the ALT key modifier and Text1.Text contains the information to send.

Of course before you do this you need to activate the sabre application. You could use

AppActivate "SABRE"

Assuming that the title of the window of the sabre application starts with "SABRE" if not then use whatever it does start with.
boloxAuthor Commented:
ALT key modifier??????
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

TimCotteeHead of Software ServicesCommented:
Pressing ALT + ENTER at the same time, the Ctrl, Alt & Shift keys are generally referred to as modifiers because they are not keypresses in their own right but modify the way the other keys pressed at the same time behave.
boloxAuthor Commented:
the method......

appActive "Sabre"

what if Sabre is not open on screen, this causes an error and crashes,

what is the best way to do this....

if appactive "sabre" then
msgbox"Sabre is not open"
end if
boloxAuthor Commented:
for some reason this does not work on this programme???

I have made a notpad called Sabre.txt opened that and that eworks great???

Maybe i should try your API ?

Any ideas?

It just kept up coming with your error,
Sabre is not loaded???

boloxAuthor Commented:
is there a way of saying..

open active window which has the textr "Sabre" in it somewhere????

TimCotteeHead of Software ServicesCommented:
Well you could use API solutions to enumerate all top level windows and find one that has the word sabre in it somewhere. Then set this window to have the focus.

Paste this code into a module:

Private strTitle As String
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret + 1
    If UCase(sSave) Like "*" & UCase(strTitle) & "*" Then
        SetForegroundWindow hwnd
        Putfocus hwnd
        EnumWindowsProc = False
    End If
    Debug.Print Str$(hwnd) + " " + sSave
    EnumWindowsProc = True
End Function

Public Sub ShowWindow(ByVal WindowTitle As String)
    strTitle = WindowTitle
    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
End Sub

Then call the ShowWindow Method like this:

Private Sub Command1_Click()
  ShowWindow "Sabre"
End Sub

The first window matching this name will be made the foreground window on the system.
boloxAuthor Commented:
Excellent yet again Tim,

You are my mentor

TimCotteeHead of Software ServicesCommented:
You are welcome bolox, any time.
boloxAuthor Commented:
Not for a while, no points left again
boloxAuthor Commented:
I know it has been a while, but i am just about to use this again.

If the window sare is not open, it goes into an infinite loop, trying to press the enterkey, (it only stopps if i press the windows key hence allowing the system to press enter)

Any ideas?

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.