Bring To Front of a Process/Other application

D

DraguVaso

Hi,

I want my application to bring another application to the Front.

I thought best way to do this was by the Process-model:
Dim c As Process = Process.GetCurrentProcess()
Dim p As Process
For Each p In Process.GetProcessesByName("EXTRA")
If Left(p.MainWindowTitle, 4) = "Appl" Then
'Here I should be able to Bring the Process to the Front!!!
Exit Function
End If
Next p

Does anybody nows how to do this? Or another solution?

Thanks!

Pieter
 
B

Bob Powell [MVP]

Windows Forms Tips and Tricks explains how to maintain a single instance of
an application and bring it to the front when it's activated.

http://www.bobpowell.net/tipstricks.htm


--
Bob Powell [MVP]
Visual C#, System.Drawing

Image transition effects, automatic persistent configuration and
design time mouse operations all in April's issue of Well Formed
http://www.bobpowell.net/wellformed.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/gdiplus_faq.htm

The GDI+ FAQ RSS feed: http://www.bobpowell.net/faqfeed.xml
Windows Forms Tips and Tricks RSS: http://www.bobpowell.net/tipstricks.xml
Bob's Blog: http://royo.is-a-geek.com/siteFeeder/GetFeed.aspx?FeedId=41
 
D

DraguVaso

Thanks!

I just found it myself like this:

Dim handle As IntPtr = prcSiclid.MainWindowHandle
Dim Win32Help As New Win32Helper
If Not IntPtr.Zero.Equals(handle) Then
Win32Helper.ShowWindow(handle, 1)
Win32Helper.SetForegroundWindow(handle)
End If

Public NotInheritable Class Win32Helper
<System.Runtime.InteropServices.DllImport("user32.dll", _
EntryPoint:="SetForegroundWindow", _
CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall, _
CharSet:=Runtime.InteropServices.CharSet.Unicode, SetLastError:=True)> _
Public Shared Function _
SetForegroundWindow(ByVal handle As IntPtr) As Boolean
' Leave function empty
End Function

<System.Runtime.InteropServices.DllImport("user32.dll", _
EntryPoint:="ShowWindow", _
CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall, _
CharSet:=Runtime.InteropServices.CharSet.Unicode, SetLastError:=True)> _
Public Shared Function ShowWindow(ByVal handle As IntPtr, _
ByVal nCmd As Int32) As Boolean
' Leave function empty
End Function

End Class ' End Win32Helper
 
C

Cor Ligthert

Hi Pieter,

I don't know, I did not really check everything you wrote, however did you
look already to the forms TopMost property?

Cor
 
D

DraguVaso

TopMost works in the application itself, but I don't think you can use it to
put another appliation on Top.
Even in the application itself TopMost doesn't always work fine. But the
"SetForegroundWindow" works always :)

Thansk anyways :)
 
H

Herfried K. Wagner [MVP]

* "DraguVaso said:
I want my application to bring another application to the Front.

I thought best way to do this was by the Process-model:
Dim c As Process = Process.GetCurrentProcess()
Dim p As Process
For Each p In Process.GetProcessesByName("EXTRA")
If Left(p.MainWindowTitle, 4) = "Appl" Then
'Here I should be able to Bring the Process to the Front!!!
Exit Function
End If
Next p

Does anybody nows how to do this? Or another solution?

'AppActivate'.
 
H

Herfried K. Wagner [MVP]

* "Cor Ligthert said:
I don't know, I did not really check everything you wrote, however did you
look already to the forms TopMost property?

This will make the window stay "always on top".
 
K

Ken Wagnitz

I tried Bob's C# code in his "Only one instance of an application"
article.
It didn't work for me in Windows 2000.

I then tried to email you about it Bob, but you are running FrontPage
extensions on your site, which didn't work for me. Presumably my
company firewall doesn't like them. Why you need FrontPage extensions
to handle a simple form is beyond me.

I am still looking for a solution to this problem. All I have found
on the net so far are solutions which don't work reliably, or guesses
from people (even Microsofties) who haven't tried what they are
suggesting.

Don't know if the barrier is .net, or Win2K/XP. I suspect the latter.

Ken.
 
D

DraguVaso

Hi,

I used this to bring another application to the Front:

Hope this helps,

Pieter

Public Sub BringExtraToFront()
Dim prc As Process
Dim clsProc As New clsProcesses
prc = clsProc.ProcessExtra 'gets me the
process based on the name
Dim handle As IntPtr = prc.MainWindowHandle
Dim Win32Help As New Win32Helper
If Not IntPtr.Zero.Equals(handle) Then
Win32Helper.ShowWindow(handle, 1)
Win32Helper.SetForegroundWindow(handle)
End If
End Sub


Option Explicit On

Public Class clsProcesses

Public Shared Function PrevInstance() As Process
Dim c As Process = Process.GetCurrentProcess()

' Durchlaufen aller Prozesse mit gleichem Namen.
Dim p As Process
For Each p In Process.GetProcessesByName(c.ProcessName)

' Aktuellen Prozess nicht beachten.
If p.Id <> c.Id Then

' Es kann mehrere Prozesse gleichen Namens geben, die von
' unterschiedlichen Programmen stammen.
If p.MainModule.FileName = c.MainModule.FileName Then

' Prozess der ersten gefundenen anderen Instanz
' zurückgeben.
Return p
End If
End If
Next p

' Keine andere Instanz gefunden.
Return Nothing
End Function

Public Shared Function ExtraOpen() As Boolean
' Durchlaufen aller Prozesse mit gleichem Namen.
Dim p As Process
For Each p In Process.GetProcessesByName("EXTRA")
If Left(p.MainWindowTitle, 4) = SessionName Then
Return True
Exit Function
End If
Next p
Return False
End Function

Public Shared Function ProcessExtra() As Process
' Durchlaufen aller Prozesse mit gleichem Namen.
Dim p As Process
For Each p In Process.GetProcessesByName("EXTRA")
If Left(p.MainWindowTitle, 4) = SessionName Then
Return p
Exit Function
End If
Next p
Return Nothing
End Function

Public Sub New()
'error-handler die alle errors voor zn rekening neemt
AddHandler System.Windows.Forms.Application.ThreadException,
AddressOf GlobalErrorHandler
End Sub
End Class

Public NotInheritable Class Win32Helper
<System.Runtime.InteropServices.DllImport("user32.dll", _
EntryPoint:="SetForegroundWindow", _
CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall, _
CharSet:=Runtime.InteropServices.CharSet.Unicode, SetLastError:=True)> _
Public Shared Function _
SetForegroundWindow(ByVal handle As IntPtr) As Boolean
' Leave function empty
End Function

<System.Runtime.InteropServices.DllImport("user32.dll", _
EntryPoint:="ShowWindow", _
CallingConvention:=Runtime.InteropServices.CallingConvention.StdCall, _
CharSet:=Runtime.InteropServices.CharSet.Unicode, SetLastError:=True)> _
Public Shared Function ShowWindow(ByVal handle As IntPtr, _
ByVal nCmd As Int32) As Boolean
' Leave function empty
End Function

End Class ' End Win32Helper
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top