Churc
-
Total de itens
1.198 -
Registro em
-
Última visita
Posts postados por Churc
-
-
amigo sinceramente não da pra entender!!
que mensagem? Mensagem na janelinha do DOS? que mensagem?
entende que assim é difícil compreeender o que voce quer fazer
teste isso
{$APPTYPE CONSOLE} program bla; uses Windows; var i: Integer; szParams: String; procedure GetParams; var i: Integer; begin for i := 1 to ParamCount do if (i = 1) then szParams := ParamStr(i) else szParams := szParams + ' ' + ParamStr(i); end; begin if ParamCount < 1 then begin writeln('Não foram passados parametros!'); Writeln('Encerrando...'); Halt(1); end; GetParams; if Pos('-g', LowerCase(szParams)) > 0 then Writeln('Tipo essa mensagem voce diz?!'); end.
-
opaUtilize a "ParamStr(Index: integer)"..assim ParamStr(0) = 'c:\caminho\pasta\programa.exe';
ParamStr(1) = 'parametro1';
ParamStr(2) = 'parametro2';
ParamStr(3) = 'parametro3';
ParamStr(4) = 'parametro4';
ParamStr(5) = 'parametro5';
espero ter ajudado
a desvantagem de usar assim é que de qualquer forma teria que andar por todos os parametros para verificar se o usuário passou algum então daria na mesma
ou seja, de qualquer forma teria que dar um loop nos parametros para verificar quantos foram passados e tal...
já pegando todos os passados e armazenando numa String acredito que de para utilizar de uma forma mais fácil
é minha opinião rs
abrxx
-
eu aconselharia voce fazer o seguinte, use o Winrar criando um SFX compactando esse conteúdo e junto faça um .exe que é só uma tela, tipo essas de AutoRuns de programas que abre assim que inserimos cds de programas...
nas opções do SFX você coloca para descompactar tudo na pasta que está sendo executada ou qualquer outra e rodar sua telinha de autorun
vantagem é que vai compactado tudo... se voce colocar dentro do seu exe não vai compactado, a menos que voce compacte e depois extraia do .exe descompactando... mas daria bem mais trabalho teria que usar componentes de compactação
nas opcões do SFX voce pode também colocar pra ele não mostrar tela nenhuma, apenas descompactar tudo e rodar sua telinha de auto run
Download Winrar
abrxxx
-
ressucitando este tópico, esqueci dele rs
então, se no Texto conter esse Alias (PR, EP, M, F) voce pode copiá-la com alguma função exemplo
function GetAlias(dbCb: TDBComboBox): String; var iSep: Integer; begin iSep := Pos('-', dbCb.Text); if iSep > 0 then //se achou o separador - Result := Copy(dbCb.Text, 1, iSep - 2) else Result := dbCb.Text; //se não tiver o separador retorna o mesmo texto que foi passado end;
Então se nos items do DBCombbox tiver esse "Alias" da pra usar a função acima exemplo
o item selecionado do DbComboBox tem o texto "M - Masculino"
ai voce pega
String = GetAlias(dbcombobox1.Items[dbcombobox1.ItemIndex]);
retornaria o M
se o item selecionado for "EP - Empregado" retornaria EP
seria isso?
abrxx
-
não entendi rs
da um exemplo ou explica melhor se possível!
...
abrx
-
os parametros são passados na janela do DOS e não no seu programa...
exemplo, clique em Iniciar, executar e digite: cmd e de Enter
no DOS navegue até a pasta em que voce compilou o exemplo que te passei e chame exemplo
bla.exe aqui qualquer coisa
o programa vai te dizer
"aqui qualquer coisa"
se fosse -g ele iria te dizer que voce passou como parametro "-g"
teste o exemplo que te passei ;)
abrxxx
-
opa
acredito que se o jogo for em DirectX, OpenGL, SendMessage ou PostMessage não funciona pois os mesmos só funcionam em janelas que possam "receber mensagens" e jogos emulados assim a janela que emula o DirectX, OpenGL não tem nenhuma referência com o que está sendo emulado no caso o jogo...
SendInput funcionaria, mas não no seu caso já que voce quer manter a janela minimizada...
eu na minha "opinião" acredito que não seja possível...
agora por exemplo, daria se você fizesse isso através de endereços de memória do jogo... mas ai é outra história hehe
você teria que saber os endereços de memória do jogo e de cada coisa pra poder ler e escrever emulando uma ação do usuário...
não sei se tem haver, mas um exemplo disso que estou dizendo é o TibiaBOT
abraxx
-
Certo, então faz o seguinte, crie um novo aplicativo e feche a Unit 1 e não salve ela...
Depois vai no Menu "Project > View Source"
pra testar, no View Source você terá o código do Aplicativo, apague tudo e cole isto...
{$APPTYPE CONSOLE} program bla; uses Windows; var i: Integer; szParams: String; procedure GetParams; var i: Integer; begin for i := 1 to ParamCount do if (i = 1) then szParams := ParamStr(i) else szParams := szParams + ' ' + ParamStr(i); end; begin if ParamCount < 1 then begin writeln('Não foram passados parametros!'); Writeln('Encerrando...'); Halt(1); end; GetParams; Writeln('Parametro passado: ' + szParams); end.
salve como Bla e compile e rode via DOS.... pra voce identificar os parametros passados utilize o Pos() no szParams exemplo, voce quer saber se foi passado ble em parametros entãouses SysUtils; ... GetParams; if Pos('ble', LowerCase(szParams)) > 0 then Writeln('O parametro ble foi passado!) else Writeln('não foi passado o parametro ble!');
e por ai vai
detalhe, para que o compilador identifique que voce está fazendo um programa DOS, não se esqueça de deixar lá na primeira linha o {$APPTYPE CONSOLE}
lembrando também que é claro, esqueça forms e tudo mais rs
abrax
-
-
opa
fera ainda não entendo o porque do asterisco já que literalmente voce passa o nome do arquivo inteiro... o asterisco em computação é um wildcard que simboliza todos os arquivos de um determinado tipo ou tudo que contém entre x* ou *x, que é como voce está fazendo porém praticamente voce passa o nome do arquivo inteiro rs
isto
IdFTP1.List(ListBox1.Items, '*.gz', false);
listaria todos os arquivos do tipo .gz que está na pasta do FTP
isto
IdFTP1.List(ListBox1.Items, 'etspaz*', false);
listaria todos os arquivos que contém etspaz no nome tipo etspazbla.gz, etspazble.txt e tal
Unix permite nomes de arquivos com asterisco, mas Windows não então com certeza este script a qual voce se refere é em Unix?
arqs é referente a uma StringList?
o que voce pode tentar é
var sl: TStringList; iA, iB: Integer; begin sl := TStringList.Create; IdFTP1.List(sl, '*.gz', false); //lista todos os arquivos .gz if sl.Count > 0 then //encontrou arquivos, vamos comparar com os que voce quer listar for iA := 0 to sl.Count - 1 do //anda um por um dos encontrados no FTP e compara com os que voce quer for iB := 0 to arqs.Count - 1 do if AnsiCompareText(sl[iA], arqs[iB]) = 0 then ListBox1.Items.Add(arqs[iB]); FreeAndNil(sl); end;
AnsiCompareText compara os nomes sem ser em case-sensitive e verifica se é igual, neste caso não necessitaria mais do asterisco emarqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'*'+'.gz');
ficandoarqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'.gz');
não daria certo também?
abrxx
-
Fala Geomar!
Então brother, eu escrevi escrevi escrevi e no fim de tudo cheguei a conclusao de há como burlar facilmente, basta alterar a data do computador que o usuário quer logar denovo...
Há outros meios usando Sockets, que fazem com que dois programas se comunicam em rede mas acho um tanto que complicado para isso...
de qualquer forma, segue a minha antiga idéia
...vamos botar a cabeça pra funcionar hein hehe
você é bem inteligente, então vou dar os passos aqui e voce faz ok?
primeiro crie dois campos nesta mesma tabela de acessos, um para a Data e outro para a Hora
eu não sei que banco de dados voce usa e os esquemas dos campos então não sei te dizer o tipo do campo
um campo é referente a Data, vamos chamá-lo de "LastSeemDate" ou seja, última data visto...
o outro campo é referente a Hora, vamos chamá-lo então de "LastSeemTime", última hora em que foi visto...
a idéia é ter um timer da paleta System do Delphi no seu programa, na tela em que o usuário visualizará após ter logado no sistema, com o Interval para 300000 que equivale a 5 minutos, com a propriedade Enabled para True e no evento OnTimer deste timer, voce grava no banco de dados a Data e Hora atual
se quiser aumentar ou diminuir o tempo, faça 1000 x 60 x numero de minutos
Interval de 1000 = 1 segundo, x 60 igual a 1 minuto ou seja, para tres minutos faça na calculadora: 1000 x 60 x 3 e por ai vai, ai coloque o resultado na propriedade Interval do Timer...
Até aqui tudo certo, tudo que este timer irá fazer é ficar atualizando estes campos com a data e hora da última vez em que o usuário foi visto
Depois na parte em que voce checa se o usuário está logado na rede, voce tambem verifica a última data e hora que ele foi visto e compara com a data atual
uses
DateUtils;
... (seu codigo de verificar se o usuario esta logado)
if isEmpty then
if (LastSeemDate = Now) and (MinutesBetween(LastSeemTime, Time) <= 5) then
O usuario esta logado else
não esta então pode conceder acesso
entendeu?
porém é como falei, da pra burlar facilmente...
espero q alguém tenha outra idéia e se surgir alguma te dou um toque!
abrxx
-
nativo?
olha eu aconselharia o ZeosLib, não é nativo masss acredito que seja um dos mais usados...
os nativos funcionam, mas estes OpenSources estão sempre sendo trabalhados e adaptados para as necessidades das pessoas...
Download ZeosLib - Baixe ZeosDBO
abraxx
-
Opa
Só uma opinião, se por acaso acontecer do sistema travar, a maquina travar e ter que reiniciar vai constar na tabela que o usuário está logado...
portanto, o que voce pode tambem é adicionar um timer no programa que escreva a data e hora em um campo desta mesma tabela a cada x minutos exemplo
a cada 5 minutos, ou seja, o timer com a propriedade para 300000, ele escreva no campo lastcheckh a Hora e lastcheckd o dia
assim quando um usuario for logar e retornar que esta logado, voce faz a comparacao de dias e da ultima hora checada.... se for maior do que uns 6 minutos significa que pode ter acontecido travamento ou se o dia for maior ou igual a 1
entendeu?
porque vamos supor,
Voce loga na Maquina A ok
A maquina trava ou cai a força, ou seja, o DesconectaUtilizador não vai ser chamado
A maquina reinicia e voce vai logar denovo...
PAM!
Voce já está logado! rs
entendeu?
espero que minha dica tenha sido útil e que eu não estou falando besteira na manhã deste feriado (ressaca) :blink:
ahuahuauha
abraxxx
-
fala Daniel, tranquilo e voce cara?
então, ai nesses outros exemplos
M - Masculino
F - Feminino
voce gostaria de pegar o que, o M ou F?
e
PR - Proprietário
EP - Empregado
PR ou EP tipo isso?
-
opa
se os números forem sequênciais então significa que o item 1 destes 3 dados como exemplo seria o ItemIndex 0 do dbcombobox
sendo assim voce poderia usar o ItemIndex como base tipo
Numero = InttoStr(dbcombobox.Items[dbcombobox.ItemIndex] + 1);
o mais 1 é para bater com a numeração já que uma index sempre inicia do 0
o Numero então seria 1 pro item 1 e assim sucessivamente...
não daria certo assim?
abrax
-
Opa
Na verdade o problema ai nem está no componente e nem no seu programa...
e sim porque o Windows não permite que sejam criados programas que em seu nome ou caminho contenham os seguintes caracteres
então neste caso, pense em uma outra alternativa ao invés de usar os asteriscos pois assim desta forma será impossível você salvar o arquivo com estes caracteres no nome...
uma dica é trocar o asterisco por um underline por exemplo...
exemplo
uses StrUtils; IdFTP1.get('/DIR_FTP/'+arq [x],AnsiReplaceStr(DIR_LOCAL\'+ arqs[x], '*', '_'),true );
ai o nome do arquivo salvo ficaria algo como
TRAFEGO_POS_AC_12_200906_.gz
abrxx
-
Na verdade, o exemplo do Daniel funciona apenas no seu "programa"...
se quiser fazer uma hotkey que funcione não importa o programa que está ativo na tela, tipo um jogo por exemplo, da uma olhada...
http://scriptbrasil.com.br/forum/index.php...0&hl=HotKey
abraxx
-
Fala Pirambu!
então brother, eu sinceramente não sei te dizer... eu nunca mexi com sistema de bina, tenho algumas noções lógicas que sempre de um jeito ou outro lemos na internet...
Agora esse exemplo que te passei eu simplesmente achei pelo google e era pra voce ter uma noção e tal... com certeza é algo que vai te dar dor de cabeça, incompatiblidade com modens e tal...
não sei te ajudar, aconselho voce buscar no google coisas como "Delphi Bina", "Bina in Delphi", "Delphi Bina Examples" e tal
Boa sorte!
;)
abraxx
-
Seguinte, primeiro de tudo a linha de telefone "precisa" estar com o Serviço de Bina habilitado...
Estando com o serviço de Bina habilitado na linha, tudo que voce precisa é um Fax Modem no PC exatamente, não necessita de um aparelho de Bina pois o que vai fazer isso é seu Software...
abraxx
-
Opa
não tem problema nenhum voce passar pro Edit como AsString desde que o que o AsString ta fazendo é dando um typecast no campo e transformando pra String, seria o mesmo que voce fizer InttoStr() ou StrtoInt()... varia conforme o tipo do campo...
Agora pra passar pro banco, o ideal é voce fazer o typecast para o tipo do campo... se o campo é do tipo Integer e a origem é uma String voce usa o StrtoInt();
quanto ao tópico triplicado, realmente ta dando IPS Driver Error ai demora mesmo ou melhor, trava rs
O jhonas deleta depois os duplicados e tal
abraxx
-
Opa
O que você pode fazer é usar Mutex ou Semáforos...
eu aconselho Mutex e acredito que desta forma voce não precisa de um controlador, tipo um monitor como havia mencionado...
exemplo, nos seus aplicativos voce coloca, em todos eles...
function MutexExiste(const szMagic: String): Boolean; var hMutex: THandle; begin hMutex := CreateMutex(nil, True, PChar(szMagic)); Result := LongBool(hMutex) and (GetLastError = ERROR_ALREADY_EXIST); if LongBool(hMutex) then CloseHandle(hMutex); end;
Coloque o código abaixo no fonte do seu programa, através do menu "Project > View Source" logo na primeira linha depois do begin...var hMutex: THandle; begin if MutexExiste('palavra_magica') then begin //já tem um aplicativo rodando e faz o que deseja fazer, tipo uma mensagem sei la Halt; end; //não tem nenhum aplicativo rodando, então podemos rodar esse e bloquear os proximos hMutex := CreateMutex(nil, True, 'palavra_magica'); //Descomenta abaixo caso queira tratar se der erro ao criar mutex, nunca aconteceu comigo rs //if hMutex = 0 then //deu erro então faca o que termine o aplicativo com um Halt? :( Application.CreateForm... ... Application.Initialize; Application.Run; //aqui o programa esta se fechando, vamos liberar para ser possivel abrir outro programa... CloseHandle(hMutex); end.
Troque a palavra magica por algo seu, tipo sei la nome do seu cachorro, só não coloque caracteres especiais tipo acento, virgula, e tal, usa texto limpo e sem traços, underline pode tipo "script_brasil"
Lembrando que pra todos os programas precisa ser a mesma palavra mágica, o segredo é que ela vai ser armazenada na memória e quando outro programa seu abre, a funcao MutexExiste retorna que já ta armazenada, ou seja, já tem algum outro programa seu aberto e não permite a execução...
espero que tenha entendido rs
abraxx
-
da uma olhada nesse Source
http://www.inf.ufsc.br/~prass/sources.html
vai em "Comunicação > Bina.zip"
espero que te ajude...
abrxx
-
Sim eu verifiquei o código... a flag FOF_NOCONFIRMATION...
porém acontece que usando a Shell do Windows as vezes tem algumas limitações, por exemplo, voce copia um executavel de um computador para outro, normalmente o Windows pergunta pra voce se voce deseja executar e tal, pra remover isso tem que desmarcar o "Sempre perguntar pra abrir este arquivo" ou ir nas propriedades dele pra desbloquear...
Se voce chamar a execução do arquivo em questão pelo Delphi utilizando ShellExecute() vai dar a mesma mensagem... já chamando por WinExec() não da... ou seja, imaginei que pudesse ser alguma limitação de operações de usar recursos da Shell... rs
Então foi uma idéia :)
abrxx
-
Opa
Tente copiar usando a Função CopyFile() ao invés de SHFileOperation
if CopyFile(PChar('caminho e nome do arquivo atual'), PChar('Caminho e nome do arquivo para onde vai'), False);
Pra sobrescrever caso existir deixe False, se não quiser sobrescrever coloque True
abraxx
Duvida Delphi com DOS
em Delphi, Kylix
Postado
abrxx