Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 147
  • Last Modified:

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 :

1abc123def1200

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.

Also,

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

Bolox


0
bolox
Asked:
bolox
  • 7
  • 5
1 Solution
 
TimCotteeCommented:
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.
0
 
boloxAuthor Commented:
ALT key modifier??????
0
 
TimCotteeCommented:
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.
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
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
sendkeys........
else
msgbox"Sabre is not open"
end if
0
 
TimCotteeCommented:
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
Err.Clear
AppActivate "sabre"
If Err.Number = 0 Then
 'It was activated successfully
Else
 '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.
0
 
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???

0
 
boloxAuthor Commented:
is there a way of saying..

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

B
0
 
TimCotteeCommented:
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.
0
 
boloxAuthor Commented:
Excellent yet again Tim,

You are my mentor

B
0
 
TimCotteeCommented:
You are welcome bolox, any time.
0
 
boloxAuthor Commented:
Not for a while, no points left again
0
 
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?

B
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 7
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now