Solved

yet another VB question from Bolox

Posted on 2002-05-29
12
130 Views
Last Modified: 2010-05-02
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
Comment
Question by:bolox
  • 7
  • 5
12 Comments
 
LVL 43

Expert Comment

by:TimCottee
Comment Utility
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
 
LVL 1

Author Comment

by:bolox
Comment Utility
ALT key modifier??????
0
 
LVL 43

Expert Comment

by:TimCottee
Comment Utility
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
 
LVL 1

Author Comment

by:bolox
Comment Utility
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
 
LVL 43

Accepted Solution

by:
TimCottee earned 100 total points
Comment Utility
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
 
LVL 1

Author Comment

by:bolox
Comment Utility
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
What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

 
LVL 1

Author Comment

by:bolox
Comment Utility
is there a way of saying..

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

B
0
 
LVL 43

Expert Comment

by:TimCottee
Comment Utility
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
 
LVL 1

Author Comment

by:bolox
Comment Utility
Excellent yet again Tim,

You are my mentor

B
0
 
LVL 43

Expert Comment

by:TimCottee
Comment Utility
You are welcome bolox, any time.
0
 
LVL 1

Author Comment

by:bolox
Comment Utility
Not for a while, no points left again
0
 
LVL 1

Author Comment

by:bolox
Comment Utility
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

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now