É muito simples o exemplo:
Este exemplo eu usei a hwgui, mas pode ser adaptado perfeitamente para o harbour console.
Código: Selecionar todos
*********************************************************************
* Programa : Bloqueio *
* Autor : Alexandre Simões *
* Data : 27/03/2014 *
* Descricao: Proteger o desktop do usuário *
*********************************************************************
#include "hbcompat.ch"
#include "common.ch"
#include "set.ch"
#include "hwgui.ch"
STATIC nSeconds
FUNCTION Main
LOCAL oIconApp:=HIcon():AddResource("ICON_1")
LOCAL addX:=20, nWidth:=640, nHeight:=500, addY:=20
PRIVATE oDialogWindow, oLabel, oTimer, lFecharWindow:=.F.
PRIVATE aMensagens:={Space(10)+'Banner (letreiro)'+Space(10),' Letreiro com HwGui',' Banner com HwGui'}, nTam:=15 //9 //20
PREPARE FONT oFont NAME "Tahoma" WIDTH nTam HEIGHT -26 //-13
addY += 30
hDC := hwg_Getdc( hwg_Getactivewindow() )
hwg_SelectObject( hDC, oFont:handle )
aMetr := hwg_GetTextMetric( hDC )
aArea := hwg_GetDeviceArea( hDC )
aRect := hwg_GetWindowRect( hwg_GetActiveWindow() )
hwg_Releasedc( hwg_Getactivewindow(), hDC )
cCaption:=aMensagens[1]
nLen:=Len(cCaption)
nLenArray:=4
nHeight := ( aMetr[ 1 ] + 1 ) * 1 + nLenArray + addY + nLenArray
nWidth := (nLen * aMetr[ 2 ]) + 25 + 250
INIT DIALOG oDialogWindow ;
TITLE "Banner" ;
ICON oIconApp ;
AT 0,0 ;
SIZE nWidth + 20, nHeight ;
FONT oFont ;
COLOR 16760439 ;
STYLE DS_CENTER + WS_VISIBLE + WS_SYSMENU
@ 0,0 SAY oLabel CAPTION "Bloqueando a estação em 30 segundo(s) - 99:99:99";
FONT oFont ;
STYLE SS_CENTER + WS_BORDER ;
COLOR hwg_RGB(0,0,255) BACKCOLOR 16777172
nAltura :=40 //40
nPosicao:=80 //63
oLabel:bSize := { | o, x, y | hwg_MoveWindow( o:handle, addX / 2, nHeight - nPosicao, x - addX , nAltura ) }
Liga_Timer(oDialogWindow,.T.)
oDialogWindow:Center()
oDialogWindow:Activate() // Parâmetro .T. = NOMODAL, .F. ou () = MODAL
RETURN Nil
FUNCTION Liga_Timer(oJanela,lLiga)
MEMVAR oTimer
IF lLiga
SET TIMER oTimerTempo of oJanela VALUE 1000 ACTION {|| MensTime(30)}
ELSE
oJanela:oTimer:End()
ENDIF
RETURN Nil
FUNCTION MensTime(nTime)
IF nSeconds = Nil
nSeconds:=Seconds()
ENDIF
IF Seconds() - nSeconds >= nTime
BloquearEstacao("%windir%\System32\rundll32.exe user32.dll,LockWorkStation",.F.)
nSeconds:=Seconds()
ELSE
oLabel:caption:="Bloqueando a estação em "+StrZero(nTime,2)+" segundo(s) - "+SecToTime(Seconds()-nSeconds)
ENDIF
hwg_doevents()
RETURN Nil
FUNCTION BloquearEstacao(cComando,lEspera)
LOCAL oShell, lOk:=.T.
DEFAULT lEspera TO .T.
TRY
oShell:=WIN_OleCreateObject( "WScript.Shell" )
CATCH
TRY
oShell:=WIN_OleCreateObject( "WScript.Shell" )
CATCH
lOk:=.F.
END
END
IF lOk
TRY
oShell:Run( "%comspec% /c " + cComando, 0, lEspera )
CATCH
lOk:=.F.
END
oShell:=Nil
ENDIF
RETURN lOk
