Ola a todos,Buscando uma forma de resolver alguns problemas na rede da empresa que trabalho, visto que muitas maquinas ficavam ligadas a noite toda resolvi criar uma solucao para acabar com esse problema.Uma das alternativa que encontrei foi fazer uma GPO para agendar o desligamento das maquinas, mas pensei em fazer algo que fosse util a todos.Criei uma aplicacao em C# que executa um comando remoto de ShutDown nos equipamento. Simples de ser usado, sem necessidade de instalacao.Vamos ao que interessa. O link: http://www.4shared.com/rar/eXKSNSVhce/ShutDownRemote.html e como ele funciona.Apos a descompactacao do arquivo, encontraremos a aplicacao:Ao executarmos a aplicacao encontraremos a seguinte tela.Para essa tela vamos precisar preencher todos os campos. O arquivo maquinas e um arquivo .txt com o nome das maquinas que deverao ser desligadas.OBS: cada nome de maquina devera ficar em uma linha. Sendo assim se tivermos 20 maquinas teremos 20 linhas no arquivo.Clicando no botao ao lado do campo "Arquivo Maquinas", abriremos uma caixa de dialogo para escolhermos os arquivos com os nomes das maquinas.Arquivo escolhido, agora e preencher os demais campos e clicar no botao ShutDown para iniciar o desligamento das maquinas.Na tela das maquinas que serao desligadas aparecera a seguinte mensagem.Apos isso o computador iniciara o processo de desligamento.Espero que essa aplicacao ajude a todos e caso tenham alguma duvida ou sugestao basta entrar em contato atraves do Blog ou pelo meu e-mail danielsmenezes@gmail.comDaniel S. MenezesAnalista de SistemasProgramador AdvPLProgramador C# (.Net) Funcao CAPITAL()Funcao para avaliar uma string passada como parametro alterando a primeira letra de cada palavra para maiuscula e as demais letras para minusculas.Sintaxe: CAPITAL(cTexto)Parametros:cTexto-> String a ser avaliadaRetorno:String Contendo a string original com as modificacoes necessarias para atender acondicao da funcao.Ex:ALERT(CAPITAL("LUIZ INACIO LULA DA SILVA")) Ola,Essa semana me deparei com o seguinte problema, fazer a regua do Protheus funcionar.Observei os manuais, pesquisei varias coisas na internet e cheguei a uma solucao simples e funcional.Chamando a funcao Processa(Acao, cTitulo, cMensagem, cParam).onde Acao e o programa que iremos utilizar para realizar o que queremos, cTitulo e a mensagem que ira aparecer na barra de titulo da caixa de processamento, cMensagem e a mesagem que vai aparecer logo acima da regua, cParam e o parametro (.T. ou .F.) que define se o botao de cancelar estara ativo ou nao.Abaixo temos um exemplo da tela e abaixo da tela temos o codigo fonte utilizado.#Include "TopConn.ch"/*UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEIIIIIIIIIINIIIIIIIIIIEIIIIIIINIIIIIIIIIIIIIIIIIIIIEIIIIIINIIIIIIIIIIIIIoPrograma 3cTest oAutor 3Daniel Menezes o Data 3 03/29/12 oIIIIIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIIII1oDesc. 3 oo 3 oIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII1oUso 3 AP oEIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII14*/User Function cTestProcessa( {|| xProc()}, "Tela de Processamento" , "Realizando Consulta...", .T.)Static Function xProcPrivate nRecxPesq()ProcRegua(nRec) // Cria a regua com a quantidade de registros contatosDbSelectArea("PSQ")PSQ->(DbGoTop()) // Na contagem de registros o sistema posiciona no ultimo registros, usamos para reposicionar no primeiro registro.Do While PSQ->(!Eof()) IncProc(PSQ->(FILIAL + " - " + MAT + " - " + SubStr(NOME,1,25))) //Altera o texto da regua em tempo de execucao. PSQ->(DbSkip())EndDoPSQ->(dbCloseArea())ReturnStatic Function xPesqcArqSRA := RetSqlName("SRA") cQry:= " SELECT A.RA_FILIAL AS FILIAL, A.RA_MAT MAT, LTRIM(A.RA_NOME) NOME cQry+= " FROM " + cArqSRA + " A cQry+= " WHERE A.D_E_L_E_T_ <> '*' " cQry+= " AND A.RA_SITFOLH IN (' ','F')"TCQUERY cQry NEW ALIAS "PSQ"Count To