Ir para conteúdo
Fórum Script Brasil

Churc

Veteranos
  • Total de itens

    1.198
  • Registro em

  • Última visita

Posts postados por Churc

  1. .. se eu utilizar essa forma os comandos do delphi não funcionan? EX:

    a pessoa digita no DOS:

    ''' -g

    e quando ela fizer isso ativa o comando do Delphi.

    ShowMessage

    entende?

    exato, não funcionam... esquece tudo que for janela, forms, messages... único contato que voce tem com o usuário é na tela do DOS em modo texto

    abrxx

  2. 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.

  3. Utilize 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

    opa

    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

  4. 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

    http://www.rarlabs.com

    abrxxx

  5. 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

  6. 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

  7. 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

  8. 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ão
    uses
      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

  9. 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 em
    arqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'*'+'.gz');
    ficando
    arqs.Add('TRAFEGO_POS_'+QR_FTP.FieldByName('UF').AsString+'_'+QR_FTP.FieldByName('CICLO').AsString+'_'+ANO_MES_CICLO+'.gz');

    não daria certo também?

    abrxx

  10. 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

  11. 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

  12. 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

  13. 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

    fileblockedchars.jpg

    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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

×
×
  • Criar Novo...