bolox
asked on
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
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
ASKER
ALT key modifier??????
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.
ASKER
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
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
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???
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???
ASKER
is there a way of saying..
open active window which has the textr "Sabre" in it somewhere????
B
open active window which has the textr "Sabre" in it somewhere????
B
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.
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.
ASKER
Excellent yet again Tim,
You are my mentor
B
You are my mentor
B
You are welcome bolox, any time.
ASKER
Not for a while, no points left again
ASKER
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
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
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.