Página 1 de 1

Application topmost

Publicado: Mar Jul 28, 2015 10:44 am
por Timm
Hi!

Is it possible to make an application topmost after calling it with Execute()?

::hProcessIE := Execute( AppData:cBrowserExecute )

SetWindowPos( ???, HWND_TOPMOST, 0, 0, 0, 0, nOr( SWP_NOMOVE, SWP_NOSIZE ) )

Best regards, Timm.

Re: Application topmost

Publicado: Mar Jul 28, 2015 11:37 am
por ignacio
Not tested:

Código: Seleccionar todo

FOR EACH hWnd IN EnumWindows()
  IF GetWindowThreadProcessID( hWnd ) == hMyProcessID
    SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 0, 0, nOr( SWP_NOMOVE, SWP_NOSIZE ) )
    EXIT
  ENDIF
NEXT

#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>

HB_FUNC( GetWindowThreadProcessId ) // GetWindowThreadProcessId( hWnd ) --> hProcesssID
{
   hb_retnl( GetWindowThreadProcessId( (HWND) hb_parnl( 1 ), NULL ) );
}
#pragma ENDDUMP
Regards,

Re: Application topmost

Publicado: Mar Jul 28, 2015 2:49 pm
por Timm
Ingnacio,

sorry, the code does not work.

GetWindowThreadProcessID( hWnd ) is never hMyProcessID

Best regards, Timm.

Re: Application topmost

Publicado: Mar Jul 28, 2015 7:09 pm
por ignacio
Try with:

Execute( AppData:cBrowserExecute,"c:\StartDirectory", .f., SW_SHOWNORMAL, @nProcessID )

Regards,

Re: Application topmost

Publicado: Mié Jul 29, 2015 8:18 am
por Timm
Hi Ignacio,

no, it does not work.

Best regards, Timm.

Re: Application topmost

Publicado: Mié Jul 29, 2015 9:31 am
por ignacio
Then, I believe your only chance is to use GetWindowText( hWnd ). No more clues. Sorry.

Regards,

Re: Application topmost

Publicado: Mié Jul 29, 2015 11:56 am
por Timm
Ignacio,

GetWindowText( hWnd ) works for me, many thanks!

Best regards, Timm.

Re: Application topmost

Publicado: Mié Jul 29, 2015 12:44 pm
por ignacio
Great!! Glad to help :-)