I have an application which calls an external process. I would like this process to be open as soon as it is called. i.e. with no user interaction.

This is because I would like to send Keys to it to interact.
I know how crude this is but this is a thrid party application that my boss has promised will open is a specific way.

Dim procSungard As System.Diagnostics.Process = _
           New System.Diagnostics.Process()
           procSungard.StartInfo.FileName = _
           System.Environment.GetFolderPath_
          (Environment.SpecialFolder.ProgramFiles)&_
          "sungard/sungard.exe"
          procSungard.StartInfo.WindowStyle = _
          System.Diagnostics.ProcessWindowStyle.Normal


           If iCode = 1 Then

            procSungard.Start()

            System.Threading.Thread.Sleep(100)
            System.Windows.Forms.SendKeys.Send("{Tab}")
            End If

So I declare the process, get its expected location and set a window style.
Is there any way to give it focus on load?
Spinner

Recommended Answers

All 3 Replies

100 ms is a quite short time to application load. Instead of System.Threading.Thread.Sleep(100) you may try procSungard.WaitForInputIdle(10000) . You'll have a higher chances that the app is actually loaded, UI running and thus app is processing message queue.
Setting focus requires API calls.
Get handle to application window: Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long And set focus: Public Declare Function SetFocusAPI Lib "user32.dll" Alias "SetFocus" (ByVal hWnd As Long) As Long so the "set focus to Sungard app" would look something like this

Dim hWnd As Long
hWnd = FindWindow(vbNullString, "Sungard")
SetFocusAPI(hWnd)
' SendKeys

I didn't test the code but it's quite simple. One thing I do know for sure, SendKeys is never a 100% sure way to send keys :)

Just happened to see this:

Private Declare Function OpenIcon Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As 
Long) As Long

Dim hWnd As Long
hWnd = FindWindow(vbNullString, "Sungard")
OpenIcon hWnd
SetForegroundWindow hWnd
' SendKeys

tx guys ... u r really helping me out

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.