Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

scorpio

[Resolvido] Restaurar aplicativo que está no SysTray

Recommended Posts

Pessoal,

 

Estou precisando restaurar um aplicativo que está no systray (fica no relógio). Tentei pegar o Handle do App pelos processos, mas quando ele está no SysTray, me retorna 0. O título que poderia me ajudar, retorna vazio.

 

O aplicativo que quero restaurar, não é o do projeto. É um executável independente do meu.

 

O código:

Dim Processos() As System.Diagnostics.Process
  Processos = System.Diagnostics.Process.GetProcessesByName(processName)

  For Each Processo As System.Diagnostics.Process In Processos
	MsgBox(Processo.MainWindowHandle)
  Next

Tendo o Handle ou o título da janela, já consigo restaurar, utilizando a API SetWindowPlacement.

O problema é que não existe janela!?! Pois está escondido

 

Alguém tem alguma idéia de como posso recuperar o título ou o Handle? Se tiver outro caminho para restaurar o App também serve :lol:.

 

 

 

Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui.

 

<Runtime.InteropServices.DllImport("user32.dll")> _
		Private Shared Function ShowWindow(ByVal HWND As System.IntPtr, ByVal WindowStyle As Integer) As Boolean
	End Function

	Private Enum WindowShowStyle As Integer
		''' <summary>Hides the window and activates another window.</summary>
		''' <remarks>See SW_HIDE</remarks>
		Hide = 0
		'''<summary>Activates and displays a window. If the window is minimized
		''' or maximized, the system restores it to its original size and
		''' position. An application should specify this flag when displaying
		''' the window for the first time.</summary>
		''' <remarks>See SW_SHOWNORMAL</remarks>
		ShowNormal = 1
		''' <summary>Activates the window and displays it as a minimized window.</summary>
		''' <remarks>See SW_SHOWMINIMIZED</remarks>
		ShowMinimized = 2
		''' <summary>Activates the window and displays it as a maximized window.</summary>
		''' <remarks>See SW_SHOWMAXIMIZED</remarks>
		ShowMaximized = 3
		''' <summary>Maximizes the specified window.</summary>
		''' <remarks>See SW_MAXIMIZE</remarks>
		Maximize = 3
		''' <summary>Displays a window in its most recent size and position.
		''' This value is similar to "ShowNormal", except the window is not
		''' actived.</summary>
		''' <remarks>See SW_SHOWNOACTIVATE</remarks>
		ShowNormalNoActivate = 4
		''' <summary>Activates the window and displays it in its current size
		''' and position.</summary>
		''' <remarks>See SW_SHOW</remarks>
		Show = 5
		''' <summary>Minimizes the specified window and activates the next
		''' top-level window in the Z order.</summary>
		''' <remarks>See SW_MINIMIZE</remarks>
		Minimize = 6
		'''   <summary>Displays the window as a minimized window. This value is
		'''   similar to "ShowMinimized", except the window is not activated.</summary>
		''' <remarks>See SW_SHOWMINNOACTIVE</remarks>
		ShowMinNoActivate = 7
		''' <summary>Displays the window in its current size and position. This
		''' value is similar to "Show", except the window is not activated.</summary>
		''' <remarks>See SW_SHOWNA</remarks>
		ShowNoActivate = 8
		''' <summary>Activates and displays the window. If the window is
		''' minimized or maximized, the system restores it to its original size
		''' and position. An application should specify this flag when restoring
		''' a minimized window.</summary>
		''' <remarks>See SW_RESTORE</remarks>
		Restore = 9
		''' <summary>Sets the show state based on the SW_ value specified in the
		''' STARTUPINFO structure passed to the CreateProcess function by the
		''' program that started the application.</summary>
		''' <remarks>See SW_SHOWDEFAULT</remarks>
		ShowDefault = 10
		''' <summary>Windows 2000/XP: Minimizes a window, even if the thread
		''' that owns the window is hung. This flag should only be used when
		''' minimizing windows from a different thread.</summary>
		''' <remarks>See SW_FORCEMINIMIZE</remarks>
		ForceMinimized = 11

	End Enum

	Public Shared Sub RestoreWindow(ByVal className As String)
		Dim HWND As IntPtr
		HWND = FindWindow(className, vbNullString)
		ShowWindow(HWND, WindowShowStyle.Restore)
	End Sub

Para utilizar:

- Chame o método RestoreWindow, passando o nome da classe da janela.

 

Atenção!

O nome da classe não é o nome da classe que você utiliza no .Net.

Para pegar o nome da classe eu utilizei uma ferramento que vem com o Visual Studio 6, se chama Microsoft Spy++.

 

 

 

Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.