09 Ago 2006 03:53
09 Ago 2006 22:35
10 Ago 2006 02:26
Public _SISTEMA
_SISTEMA = " SIADEM - Empresa v1.02 Demo"
Declare Integer FindWindow In WIN32API String, String
Declare Integer BringWindowToTop In WIN32API Integer
Declare Integer IsWindow In WIN32API Integer
janela = FindWindow(0, _SISTEMA)
If (IsWindow(janela)<>0) && verifica se existe uma janela com o nome
= BringWindowToTop(janela) && coloca a janela em cima de todas
_Screen.Caption = _SISTEMA
= Messagebox('SISTEMA JÁ ESTÁ EM USO NESTA MÁQUINA !!!', 000, 'Atenção')
Return
Endif
Release janela
Clear Dlls
CLEAR
Clear All
_SISTEMA = " SIADEM - Empresa v1.02 Demo"
_Screen.WindowState = 2
lcOnShutdown="ShutDown()"
On Shutdown &lcOnShutdown
On Error ErrorHandler(Error(),Program(),Lineno())
10 Ago 2006 04:54
rrfsistemas escreveu:Não sei se vai ajudar muito mas, eu faço da seguinte forma no meu sistema em Visual Fox Pro, com a API do Windows. ;)
Não sei como vc vai adaptar este códogo...
- Código:
Public _SISTEMA
_SISTEMA = " SIADEM - Empresa v1.02 Demo"
Declare Integer FindWindow In WIN32API String, String
Declare Integer BringWindowToTop In WIN32API Integer
Declare Integer IsWindow In WIN32API Integer
janela = FindWindow(0, _SISTEMA)
If (IsWindow(janela)<>0) && verifica se existe uma janela com o nome
= BringWindowToTop(janela) && coloca a janela em cima de todas
_Screen.Caption = _SISTEMA
= Messagebox('SISTEMA JÁ ESTÁ EM USO NESTA MÁQUINA !!!', 000, 'Atenção')
Return
Endif
Release janela
Clear Dlls
CLEAR
Clear All
_SISTEMA = " SIADEM - Empresa v1.02 Demo"
_Screen.WindowState = 2
lcOnShutdown="ShutDown()"
On Shutdown &lcOnShutdown
On Error ErrorHandler(Error(),Program(),Lineno())
}
HANDLE hMutex = CreateMutex(NULL,true,"RFFSISTEMAS_PROJ001");
if (GetLastError() == ERROR_ALREADY_EXISTS) {
//
// Mensagem de alerta ou o que quiser
//
if(hMutex) CloseHandle(hMutex);
return 0;
}
//
//
// Neste ponto você dá continuidade ao seu programa
// Mas note que o Mutex continua ativo no sistema.
//
//
ReleaseMutex(hMutex);
CloseHandle(hMutex);
{
30 Ago 2006 21:12
Maligno escreveu:Bom, é a idéia que o colega teve. Mas não é a forma "canônica" para evitar múltiplas instâncias do mesmo programa, até porque, a barra de títulos, para muitos programas, é um meio dinâmico de informação ao usuário. Assim, em alguns casos o título pode mudar totalmente.
01 Set 2006 02:55
Nesse caso também há outra solução. Já viu o WINTIT ?. Antes de executar meu aplicativo (através de arquivo de lote, BACTH) eu chamo o WINTIT para forçar que essa aplicação fique com o mesmo título na janela-WINDOWS.
Você ja conseguiu algo sobre essa minha idéia ?. Contamos com teu conhecimento em C, não esqueça por favor.
01 Set 2006 09:14
03 Set 2006 20:56
05 Set 2006 10:37
06 Set 2006 07:11
2.) O funcionamento do switch SETAPPTITLE, não fica gravado no ícone da janela ativa. Funciona em momento da execução do WAPI, mas quando o WAPI é finalizado, o título original da janela, retorna. Faltaria que ele mudasse também no próprio ícone, onde acessamos pela "Propriedades" do mesmo. Dessa forma, forçariamos a que esse ícone, mantenha sempre o título ao qual o programador designou.
3.) Sobre o parametro "TIME" adicional do switch FLASH. Fiquei pensando em qual seria a sua utilidade. Pensei em algo que seria muito útil, mas requer mais uma implementação neste switch (outro parâmetro).
Agora, todos nós poderemos verificar se a janela com título XXX, está aberta ou não. Isto impedirá que o nosso aplicativo seja aberto multipla vezes. No meu sistema ja implementei e funciona perfeitamente, embora eu ainda use o OL_95VMTITLE("Título novo") da OSLIB.
4.) O switch SETTASKBAR, não funciona com o parâmetro "ON" ou "OFF". E sim funciona com "SHOW" e "HIDE". Nesta forma, a janela desaparece (como é mencionado no seu arquivo fonte .C).
Nesse momento, a janela é abortada e cria uma tarefa chamada "WINOLDAP" com WIN98. Me pergunto: Para quê serviria esta opção ?. Também testei da seguinte maneira:
WAPI -SETTASKBAR:HIDE | WAPI -SETTASKBAR:SHOW
E desta forma, sim funciona. Só que a execução é momentânea.
SwpRunCmd("WAPI -SetTaskBar:HIDE,0,".",".")
Millisec(5000)
SwpRunCmd("WAPI -SetTaskBar:SHOE,0,".",".")
5.) O switch SETBUTTONX:(ON ou OFF ou DEL), funciona bem. Acho que serviria para o cliente não fechar através do "X".
Mas estou muito contente e muito agradecido ao colega MALIGNO. Acho que todos nós estamos em dívida por compartilhar seus conhecimentos conosco, enriquecendo cada vez mais os recursos que podemos obter com o Clipper e aplicativos feitos na "linguagem C".
06 Set 2006 09:52
Citação: escreveu:Mas o WAPI é transiente. Ao finalizar, volta o título antigo. Se você executá-lo através do seu programa, o título permanecerá até que o seu programa termine. Não ocorre isso?
Citação: escreveu:você poderia fazer sua janela picar 10 vezes com o comando WAPI FLASH:10,123. Claro que isso também poderia ser feito para alertar o usuário que uma outra instância do seu programa já existe.
Citação: escreveu:Note que OL_95VMTitle() e OL_95AppTitle() não funcionam em kernel NT. Só Windows 98 pra baixo.
Citação: escreveu:Desconheço totalmente essa "WINOLDAP". Vou ver se consigo algum Windos 98 pra fazer o teste.
06 Set 2006 11:41
Não, não ocorre isso MALIGNO (pelo menos com WIN98).
Na função FlashTitleBar do seu código fonte está: HWND WHandle = GetForegroundWindow(). Estarias colocando mais um parâmetro ?.
Como eu fisse: a modificação do título poderia ser feita no arquivo .PIF (do ícone do WIN98), porque o título dessa janela está escrito nesse arquivo .PIF (que poderia ser editado e gravado em baixo nível. Porém no caso do XP (não sei os outros), esse título está conforme o nome do arquivo .LNK (ícone do XP). Que renomeando esse arquivo .LNK você obterá o nome da janela para qual tenha sido mudado. Normalmente no WIN98 os ícones estão no \WINDOWS\DESKTOP e no XP normalmente estão no \DOCUME~1\XP\DESKTOP ou \documents and Settings\XP\Desktop.
Nesse caso, será que não poderias fazer algo para mudar no seu ícone também ?.
Mas eu acho que esta tarefa que fica e é adicional conforme a escução dessa opção do WAPI. Deveria ser eliminado, pois há relatos na WEB que diz trazer alguns inconvenientes na execução de outros sisemas (como deixar lento pela acumulação desses WINOLDAP e que também são considerado facilitadores para alocação de trojans, não sei se é veridico tudo isso). De todas formas, para quê poderia servir esta opção ??.
2. Outra opção usando a função FULLSCREEN() do colega Evolver:
www.sistemabr.com.br/clipper/fullscrn.zip que pudesse criar um arquivo indicando o tipo de exbição da janela.
A linguagem que eu acho THE BEST, sem dúvidas é a LINGUAGEM C. É com ela que o Clipper (e todas as outras também), podem executar coisas imagináveis. Como eu gostaria poder aprender e dominar essa liguagem !
06 Set 2006 12:33
Quando Pablo escreveu:Na função FlashTitleBar do seu código fonte está: HWND WHandle = GetForegroundWindow(). Estarias colocando mais um parâmetro ?.
Quando Maligno escreveu:Em suma: no XP funciona. No Windos 98 (pra baixo?) não funciona. Vou ter que pesquisar e arrumar outra estratégia. O estranho é que o MSDN diz que funciona.
Quando Maligno escreveu:Aquela "Propriedades" que aparece no menu do ícone se refere às propriedades do atalho da janela. Não acho boa idéia mudar no arquivo.
06 Set 2006 16:35
Acho que as vezes o meu português, não é aquelas coisas... hehe
Deixa eu esclarecer mais a minhas colocações após a sua última mensagem:
Eu quis dizer quer você vai ter que colocar um terceiro parâmetro na sua função FlashTitleBar() para que aceite o Handle da janela que quer ser piscada.
Que na sua aplicação WAPI, fizesse averificação do OS que estaria sendo usado para poder alterar nas "Propriedades do Ícone". Claro que isto difere para cada versão. Daí então eu esclarecí para cada situação de versão do OS poderia ser feito:
Sei que nesta minha sugestão estou forçando mesmo a questão de manter o nome da janela para o nome ORIGINAL e~fazer com que funcione os sistemas "NON-WINDOWS". Mas é básicamente isso, o que a função OL_95AppTitle() da OSLIB faz. Claro que teria que adaptar para o caso do XP e ME.
Desejo boa sorte sobre "o status da janela DOS". Eu sempre quis aprender C++, acho que o C da Microsoft seria o mais conveniente para o Clipper e não o do BORLAND. Mas este é outro assunto que irei precisar ajuda do colega, se for do seu agrado.
08 Set 2006 14:53