Solved

Appactivate within a DO LOOP using vb.net 2005

Posted on 2009-04-02
3
561 Views
Last Modified: 2013-11-26
Hi,

I'm trying to add a System Tray icon  that will bring focus to Internet Explorer 7 and tab between all the windows within it. I'm writing this in VB using Visual Studio 2005. My knowledge of both VB and Visual Studio are limited. I've added a 'NotifyIcon' to a form. I don't actually need the form but this is only way I can see do add the notifyicon. I'm then basically activating the IE window and then using a sendkey to tab between the windows. I'm also using a sleep command. This is placed within  a simple DO LOOP. My problems are that when I double click the system tray icon my mouse and keyboard freeze. The only thing I can do is press ctrl-alt-del and this allows me to stop the process running. I know that is is caused by the do loop. The other problem is the sleep command. It won't neccesarily tab between the windows at the time period that I set. So if I set the sleep for 2 seconds, It will sometimes quickly move between the tabs and other times it will take many more seconds.
Also, if I run this as a simple .vbs file it works perfectly.
I've attached the code. Please help!
Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic.Interaction
Imports System.Threading
 
Public Class Form1
 
    Private Sub IE_Tab_MouseDoubleClick_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles IE_Tab.MouseDoubleClick
        Me.Hide()
        Dim WinFound As String
 
        WinFound = (" - Windows Internet Explorer")
 
        Do
            AppActivate(WinFound)
            SendKeys.Send("^{TAB}")
            Thread.Sleep(2000)
 
        Loop
 
    End Sub
End Class

Open in new window

0
Comment
Question by:planetzed
3 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24049917
You need a "responsive" Sleep():

    Private Sub Delay(ByVal DelayInSeconds As Integer)
        Dim ts As TimeSpan
        Dim targetTime As DateTime = DateTime.Now.AddSeconds(DelayInSeconds)
        Do
            ts = targetTime.Subtract(DateTime.Now)
            Application.DoEvents() ' keep app responsive
            System.Threading.Thread.Sleep(50) ' reduce CPU usage
        Loop While ts.TotalSeconds > 0
    End Sub

Example:

    Delay(10) ' hold for ten seconds
0
 

Accepted Solution

by:
planetzed earned 0 total points
ID: 24057469
Hi,

Thanks for your response. I've managed to solve the problem in a much simpler way (for me anyway) by simply replacing the sendkeys.send with sendkeys.sendwait. I do have another question though in that I can't find how that If I close IE it won't error out. In .vbs I was able to use the following code ;

Set WShell = CreateObject("WScript.Shell")

Do
WinFound = WShell.AppActivate(" - Windows Internet Explorer")

If (WinFound) Then

Wshell.SendKeys "^{TAB}"
Wscript.Sleep (10 * 1000)

End If

Loop Until Not WinFound

As WinFound controls the whole process, I am then able to stop the loop once IE is no longer an active process. I can't find how to make this happen in Visual Studio. Any ideas?
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction While answering a recent question about filtering a custom class collection, I realized that this could be accomplished with very little code by using the ScriptControl (SC) library.  This article will introduce you to the SC library a…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

832 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