GREEBA
asked on
Use of AppActivate with VB.NET
The following piece of code in Button5 has been working to enter a much used application every day for the last year.
I initially had problems in gettting the sendkeys to work but found that typing the AppActivate line twice fixed the problem.
I have now added an additional Button6 to my apllication with very little code in it and have not altered the code in Button5 at all.
The problem is that external program gets to the point where the "Open Company" screen is active but my program does not sendkeys (the original problem before I typed the AppActivate line twice) and so it just waits at the correct screen but goes no further.
I cant understand how Button5 does not work anymore given that I have not altered the code for that Button at all.
If anyone can suggest whats wrong or give an alternative solution I'll be very grateful. I am using Windows 2000 Professional and VB.NET
'My Coding follows..
'I have this at the top of my program..
Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
'Other code follows here ...
'Then...
'Routine to open a third party program and enter predifined values into its User Name / Password screen and also enter a predefined date
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim i As Integer
Dim strprodate As String
Dim DUM As String
Try
'start the payroll program
Shell("c:\Payroll Programs\payroll.exe", vbNormalFocus)
' next line to create a pause while the external program starts up
DUM = InputBox("YOU MUST CLICK OK in this little box when Payroll list appears... ", "CLICK OK ON THIS LITTLE BOX WHEN PAYROLL LIST APPEARS", , 200, 50)
' get predefined value from external file
FileOpen(1, "C:\STATUS\STATUS.CUR", OpenMode.Input)
Input(1, DUM)
Input(1, DUM)
Input(1, DUM)
Input(1, DUM)
Input(1, strprodate)
FileClose(1)
' set focus on the Open Company form... does not work unless statement is written twice... I dont know why...
Microsoft.VisualBasic.Inte raction.Ap pActivate( "Open Company")
Microsoft.VisualBasic.Inte raction.Ap pActivate( "Open Company")
'send characters to the active form
' these tabs get me to the correct screen
System.Windows.Forms.SendK eys.Send(" {tab}{tab} {tab}{tab} {tab}")
' I always want to start on the third line down so I go up to the top of the form and then down three lines
For i = 1 To 5
System.Windows.Forms.SendK eys.Send(" {Up}")
Next
For i = 1 To 3
System.Windows.Forms.SendK eys.Send(" {Down}")
Next
System.Windows.Forms.SendK eys.SendWa it("{Enter }MANAGER{t ab}{tab}")
System.Windows.Forms.SendK eys.SendWa it(strprod ate)
' password is blank so just hit enter
System.Windows.Forms.SendK eys.SendWa it("{enter }")
Finally
End Try
End Sub
I initially had problems in gettting the sendkeys to work but found that typing the AppActivate line twice fixed the problem.
I have now added an additional Button6 to my apllication with very little code in it and have not altered the code in Button5 at all.
The problem is that external program gets to the point where the "Open Company" screen is active but my program does not sendkeys (the original problem before I typed the AppActivate line twice) and so it just waits at the correct screen but goes no further.
I cant understand how Button5 does not work anymore given that I have not altered the code for that Button at all.
If anyone can suggest whats wrong or give an alternative solution I'll be very grateful. I am using Windows 2000 Professional and VB.NET
'My Coding follows..
'I have this at the top of my program..
Option Strict Off
Option Explicit On
Imports VB = Microsoft.VisualBasic
'Other code follows here ...
'Then...
'Routine to open a third party program and enter predifined values into its User Name / Password screen and also enter a predefined date
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
Dim i As Integer
Dim strprodate As String
Dim DUM As String
Try
'start the payroll program
Shell("c:\Payroll Programs\payroll.exe", vbNormalFocus)
' next line to create a pause while the external program starts up
DUM = InputBox("YOU MUST CLICK OK in this little box when Payroll list appears... ", "CLICK OK ON THIS LITTLE BOX WHEN PAYROLL LIST APPEARS", , 200, 50)
' get predefined value from external file
FileOpen(1, "C:\STATUS\STATUS.CUR", OpenMode.Input)
Input(1, DUM)
Input(1, DUM)
Input(1, DUM)
Input(1, DUM)
Input(1, strprodate)
FileClose(1)
' set focus on the Open Company form... does not work unless statement is written twice... I dont know why...
Microsoft.VisualBasic.Inte
Microsoft.VisualBasic.Inte
'send characters to the active form
' these tabs get me to the correct screen
System.Windows.Forms.SendK
' I always want to start on the third line down so I go up to the top of the form and then down three lines
For i = 1 To 5
System.Windows.Forms.SendK
Next
For i = 1 To 3
System.Windows.Forms.SendK
Next
System.Windows.Forms.SendK
System.Windows.Forms.SendK
' password is blank so just hit enter
System.Windows.Forms.SendK
Finally
End Try
End Sub
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I have found the problem. I has increased the size of my form to accomodate Button6. This form was used to activate the external program that was freezing up and not accepting the SendKeys statements. I reduced the size of my form back to its original size and it now works fine with Button6 squashed in on it. So it seems that the size of overlapping forms can affect the SendKeys command even though the form I am sending the Sendkeys commands to is the highlighted active form.
Both the Shell command and the Process.Start work if the form is its original size. Wierd.
As AlexFM was the only respondent I give all the points to you and thanks for you interest.
Jim
Both the Shell command and the Process.Start work if the form is its original size. Wierd.
As AlexFM was the only respondent I give all the points to you and thanks for you interest.
Jim
ASKER
Half way there as the program works in Debug mode when I am in VB.Net but when I build it into a .MSI file and install it
it freezes at the same point as it did before I used the Process.Start function.
I seem to missing something still.
Jim