Página 1 de 1

Como testar se hwgui está em uso?

Enviado: 27 Ago 2024 20:42
por JoséQuintas
wvg2.png
Preciso bloquear a execução do fivewin, caso hwgui esteja rodando.
Alguma idéia de como testar se hwgui tem alguma coisa aberta?

Como testar se hwgui está em uso?

Enviado: 27 Ago 2024 20:51
por JoséQuintas
Esqueci de uma coisa importante:

O teste normal não serve pra multithread.
Len() de aWindows e aDialogs não serve.

Como testar se hwgui está em uso?

Enviado: 28 Ago 2024 14:36
por alxsts
Olá!

Talvez consiga usando a função Type() do [x]Harbour:

Código: Selecionar todos

? Type( 'hMainWindow()' ) --> "UI"
? Type( 'hMainWindow():new()' ) --> "UI"
? Type( 'hDialog()' ) --> "UI"
? Type( 'hDialog():new()' ) --> "UI"
O retorno "UI" indica que a função foi linkeditada na aplicação. Não quer dizer que esteja sendo executada no momento da chamada da função Type().

Como testar se hwgui está em uso?

Enviado: 28 Ago 2024 15:05
por JoséQuintas
A idéia é boa, mas não dá.

Estou linqueditando hwgui e fivewin, juntos, hwgui e suas funções sempre vão existir.

Acho que não vai ter opção.

Janela aberta é visivel somente na thread, então não dá pra testar janela aberta, porque na thread atual nunca vai ter.

Deixar com erro mesmo, é coisa temporária.

Como testar se hwgui está em uso?

Enviado: 28 Ago 2024 15:19
por JoséQuintas
Pronto resolvido.

Usar normal, com controle único de janelas.

Código: Selecionar todos

PRGFLAGS=-m -n -w3 -es2 -ge1 -DHB_NO_GTGUI=YES
##PRGFLAGS=-m -n -w3 -es2 -ge1 -DMT_EXPERIMENTAL -DHB_NO_GTGUI=YES
Agora a lista volta a ser geral, e não por thread.

Código: Selecionar todos

FUNCTION HWGUIInUse()

   IF Len( hWindow():aWindow ) > 0
      RETURN .T.
   ENDIF
   IF Len( hDialog():aDialogs ) > 0
      RETURN .T.
   ENDIF
   IF Len( hDialog():aModalDialogs ) > 0
      RETURN .T.
   ENDIF
   
   RETURN .F.