Ir para conteúdo
Fórum Script Brasil
  • 0

Apis


rodfraga

Pergunta

A questão é: Eu estava dando uma olhada no API-Guide(muito bom aliás), e vi coisas como Ver se uma janela está aberta (mas não sei usar sempre, pois se procuro por Calculator, com a calculadora aberta, não acha. Resumindo, eu não sei quais são os nomes que as janelas adqüirem), etc. Porém, algumas eu não entendi direito seu uso. Eu queria saber, o que há de tão fantástico que eu possa fazer com elas? O que é mais fantástico dentre essas coisas? Alguém pode me dar um exemplo?

Rodrigo

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

A questão é: Eu estava dando uma olhada no API-Guide(muito bom aliás), e vi coisas como Ver se uma janela está aberta (mas não sei usar sempre, pois se procuro por Calculator, com a calculadora aberta, não acha. Resumindo, eu não sei quais são os nomes que as janelas adqüirem), etc.

Presumo que você esteja usando a API FindWindow para isso, certo? Se for, ela sempre retorna o número que identifica uma janela, quando seu segundo parâmetro é o nome (título que fica na barra de tarefas) do programa. Exemplo que acha a calculadora:

    h = FindWindow(vbNullString, "Calculadora")
    MsgBox h

O primeiro parâmetro não precisa ser especificado, mas, se fosse o caso, você teria de fornecer a classe da janela (que é uma string que varia de uma janela para outra, mas que pode ser obtida através de outra API que não me lembro agora qual é).

Porém, algumas eu não entendi direito seu uso. Eu queria saber, o que há de tão fantástico que eu possa fazer com elas? O que é mais fantástico dentre essas coisas? Alguém pode me dar um exemplo?

Isso é normal. Essas APIs são o que compõe o sistema operacional. Todas as janelas que você está vendo nesse momento em seu desktop foram criadas usando as APIs CreateWindow e/ou CreateWindowEx. Com essa API também se cria todos os botões e outros tantos controles que estão nestas janelas. A API SendMessage está o tempo todo sendo utilizada para enviar "comandos" para as janelas, como minimizar, maximizar ou fechar, além de outros como o pressionamento de teclas e os cliques do mouse. Quando você está usando um programa e alterna para outro, a API BringWindowToTop ou SetFocus é usada para trazer o programa para frente a fim de que você o veja. Quando você copia um arquivo de um local para outro, a API CopyFile é usada para isso. APIs como a BitBlt e StretchBlt estão sendo usadas nesse momento para "desenhar" os objetos nas janelas. Sua conexão à Internet que você está usando agora recebe e envia os dados através das APIs de sockets. Existem APIs específicas que lidam com a inclusão, remoção e alteração de chaves e dados no Registro do Windows.

Como você pode ver, as APIs dominam no que diz respeito ao sistema operacional. E elas são uma forma de deixar que nós, relés mortais, usemos esses recursos tão preciosos e quem nem sempre estão ao nosso alcance com as linguagens de programação. Usaremos todas? Não. Precisaremos de todas? Muito menos. Precisaremos de algumas? Quase com certeza. Só como exemplo, o XPlayer se utiliza de, aproximadamente, umas 30 APIs do Windows. O Máximas usa umas 15 APIs. Porém, é claro que, dependendo do tipo de aplicação, talvez você nunca tenha que usar API.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

huh.gif

Duas palavras débeis: Do maaaaaaaaaaaaau... Brincadeira... tongue.gif

Mas olha só, eu entendo, o Máximas eu imaginava(estou usando ele mas não me dou bem com o Outlook Express) que usasse, mas não tantas...

E uma pergunta... Como você decora todas? Há quanto tempo você mexe com computação cara? Sem querer ser puxa saco, mas você sabe demais! blink.gif

Editado:

Quanto a API era a FindWindow mesmo, porém, o exemplo passa o nome da janela como primeiro parâmetro! E ele pega o índice 0 para o caso de não achar janela, é isso mesmo? Passando o nome da janela como segundo parâmetro é o que estamos vendo na barra de tarefas?

Link para o comentário
Compartilhar em outros sites

  • 0

huh.gif

Duas palavras débeis: Do maaaaaaaaaaaaau... Brincadeira... tongue.gif

Mas olha só, eu entendo, o Máximas eu imaginava(estou usando ele mas não me dou bem com o Outlook Express) que usasse, mas não tantas...

Sim, usa. Porém, algumas não mais necessárias e pretendo removê-las para deixar o código mais enxuto.

E uma pergunta... Como você decora todas? Há quanto tempo você mexe com computação cara? Sem querer ser puxa saco, mas você sabe demais! blink.gif

Tá doido!? biggrin.gif Ninguém decora APIs. Por isso que existe o API-Guide e o API Viewer. Com o tempo você acaba guardando o nome delas (apenas o nome!) e para que servem. Daí, quando precisa, vai no API-Guide ou no API Viewer e pega a declaração das mesmas.

Mexo com computadores (é claro que no começo só utilizava para joguinho) desde os 6 ou 7 anos de idade (tenho 20 agora). Com programação mexo só há uns 5 ou 6 anos aproximadamente.

Editado:

Quanto a API era a FindWindow mesmo, porém, o exemplo passa o nome da janela como primeiro parâmetro! E ele pega o índice 0 para o caso de não achar janela, é isso mesmo? Passando o nome da janela como segundo parâmetro é o que estamos vendo na barra de tarefas?

biggrin.gif

O número retornado pela API FindWindow não é um índice; é um "handle". Um handle é um número que identifica uma determinada janela (quando se fala em "janela", no caso de APIs, significa também cada botão, listbox, textbox, etc). Muitas outras APIs precisam de um argumento chamado hWND que é justamente esse número. Nenhuma janela tem um handle igual a 0, então quando a API retorna esse valor é porque não encontrou a janela especificada. E a declaração dela é a seguinte:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Portanto, o nome da janela fica no segundo parâmetro sim (lpWindowName) e não no primeiro (lpClassName).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Ah valeu, é que eu devo ter mexido no exemplo e acabei trocando coisinhas... Mas então o nome da janela é o do programa ou o que tá na barra de tarefas? Por exemplo, ele encontra "Notepad" mas não "Sem título"(que é o nome da janela na barra de tarefas).

E sem querer continuar uma entrevista, mas é que eu realmente amei programação, se me perguntarem qual meu futuro, eu já sei. E uma coisa que eu aprendi nesses meus tão breves 13 anos de vida, é que conselhos são bem-vindos. Então:

Você fez curso? De quê? Você recomenda? De quê?

E enquanto não faço, como posso ficar melhor? (Aceito respostas dos mais experientes como o moderador William, do baixo, quer dizer, do Pigmeu(anda sumindo, não?))... É que eu sou meio apressadinho e queria tanto ter um ritmo produtivo maior do que o meu atual... tongue.gif

Rodrigo

Link para o comentário
Compartilhar em outros sites

  • 0

Ah valeu, é que eu devo ter mexido no exemplo e acabei trocando coisinhas... Mas então o nome da janela é o do programa ou o que tá na barra de tarefas? Por exemplo, ele encontra "Notepad" mas não "Sem título"(que é o nome da janela na barra de tarefas).

Tanto na janela quando na barra de tarefas fica o mesmo título. No caso do Bloco de Notas, fica "Sem título - Bloco de Notas" assim que o mesmo é aberto. E isso fica tanto na janela quanto na barra de tarefas.

E sem querer continuar uma entrevista, mas é que eu realmente amei programação, se me perguntarem qual meu futuro, eu já sei. E uma coisa que eu aprendi nesses meus tão breves 13 anos de vida, é que conselhos são bem-vindos. Então: Você fez curso? De quê? Você recomenda? De quê?

Nunca fiz curso. Como já havia dito antes, fiz 2º Grau técnico. Porém, já tinha começado a programar antes disso, e sinceramente, o que se aprende na escola é praticamente uma noção da coisa. Não sei se cursos específicos são mais completos; porém acho que nada é melhor do que a prática e o auto-aprendizado.

E enquanto não faço, como posso ficar melhor? (Aceito respostas dos mais experientes como o moderador William, do baixo, quer dizer, do Pigmeu(anda sumindo, não?))... É que eu sou meio apressadinho e queria tanto ter um ritmo produtivo maior do que o meu atual...  tongue.gif

Hehehe... tudo ao seu tempo. E acho que nada é melhor do que a prática. Idealize projetos e tente realizá-los. Faça programas à toa (eu mesmo tenho dezenas deles) com os conhecimentos adquiridos. Aprenda novas linguagens e novos paradigmas; em suma, acumule conhecimentos. Creio que a maioria dos que ajudam aqui no fórum, incluindo você, o William, o PiGmEu, etc., são capazes de ajudar exatamente porque já passaram pelas situações em que os iniciantes e até mesmo os mais experientes já passaram. E, para finalizar:

"Aprender é a unica coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende." (Leonardo da Vinci)

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

É, estou pensando em ir pro CEFET...

Então tudo isso foi com prática? Legal... Eu realmente não confio em cursos.

Ah e continuando com a API...

Eu estou falando que a FindWindow acha se eu procurar por Notepad, mas não por Sem título...

Link para o comentário
Compartilhar em outros sites

  • 0
É, estou pensando em ir pro CEFET...

Então tudo isso foi com prática? Legal... Eu realmente não confio em cursos.

Ah e continuando com a API...

Eu estou falando que a FindWindow acha se eu procurar por Notepad, mas não por Sem título...

Ah, agora entendi. Você então está procurando pela classe da mesma e não pelo título. Exemplo:

Debug.Print FindWindow("Notepad", vbnullstring)
Debug.Print FindWindow(vbnullstring, "Sem título - Bloco de Notas")

Ambos vão retornar a mesma coisa. Existe uma óbvia vantagem no caso da classe, que é o fato de que ela não muda como o título da janela.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E enquanto não faço, como posso ficar melhor? (Aceito respostas dos mais experientes como o moderador William, do baixo, quer dizer, do Pigmeu(anda sumindo, não?))... É que eu sou meio apressadinho e queria tanto ter um ritmo produtivo maior do que o meu atual... 

Acho que tudo já foi dito cara...

Hehehe... tudo ao seu tempo. E acho que nada é melhor do que a prática. Idealize projetos e tente realizá-los. Faça programas à toa (eu mesmo tenho dezenas deles) com os conhecimentos adquiridos. Aprenda novas linguagens e novos paradigmas; em suma, acumule conhecimentos. Creio que a maioria dos que ajudam aqui no fórum, incluindo você, o William, o PiGmEu, etc., são capazes de ajudar exatamente porque já passaram pelas situações em que os iniciantes e até mesmo os mais experientes já passaram. E, para finalizar:

"Aprender é a unica coisa de que a mente nunca se cansa, nunca tem medo e nunca se arrepende." (Leonardo da Vinci)

Nada melhor do que a prática mesmo...

Só assim para se aprender melhor biggrin.gif

Então...

Treine wink.gif

Abraços,

William Rodrigues

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...