Ta ai uma coisa que eu fazia quando estava aprendendo a programar, programinhas aparentemente bobos, mas que serviam para ir conhecendo as API's do Windows.
Esse programa em especifico eu fiz a muitos anos atrás, ele consiste em usar a DLL User32 do Windows para controlar a posição do cursor do Mouse na tela, de maneira que quando o mouse chega em uma certa área ele é "transportado" para outra.
Pode parecer um programa bobo, mas alem de permitir conhecer melhor as funções de algumas API's também podemos aprender alguns conceitos interessantes na informatica, tipo a HAL, sigla para Hardware Abstraction Layer, ou Camada de Abstração de Hardware em português.
Muita gente deve estar se perguntando o que é isso...? Bom a HAL basicamente é um camada de software que esta entre o usuário e os periféricos do computador, o que é essencial para manter a principal característica responsável pelo sucesso do IBM PC, a padronização!
Obviamente nós temos no mercado dezenas, se não centenas de fabricantes de Hardware, já se perguntou como um aplicativo consegue rodar em praticamente qualquer computador independente do fabricante?
Então, como existe essa camada de abstração os aplicativos nunca acessam o hardware diretamente, eles apenas fazem uma "requisição" dos dados e o Sistema Operacional faz o resto.
Pensem na HAL como se fosse um tradutor, por exemplo ao invés de todo mundo tentar aprender todos os idiomas existentes (o que é basicamente impossível) é mais fácil todo mundo aprender um idioma comum (como o inglês por exemplo), dessa maneira você pode se comunicar em qualquer lugar desde que tenha um interprete que traduza o idioma local em inglês para você! Nessa analogia a camada de abstração seria o idioma universal que é falado por todos os aplicativos para um determinado sistema operacional e os interpretes seriam os Drivers que o fabricante disponibiliza para aquele sistema, traduzindo o idioma universal para uma linguagem que o Hardware entenda (e vice-versa).
Bom, mas o que isso tem a ver com os programas que eu fazia quando era moleque pra sacanear meus amigos?
Basicamente os aplicativos não acessam o hardware diretamente, quando um aplicativo detecta o input do Mouse por exemplo, ele não esta lendo os dados que o Mouse esta enviando para o computador, o aplicativo na verdade esta recebendo apenas os dados que o Sistema Operacional disponibiliza pra ele, e é por isso que podemos controlar o comportamento do cursor do Mouse 100% com software!
Isso pode parecer esquisito, mas é muito útil... Alem da vantagem da padronização também é possível fazer um hardware se comportar como outro, alguns conversores de interfaces de comunicação funcionam assim por exemplo.
Forçando um pouco a barra da pra dizer que um computador funciona de maneira similar ao nosso corpo, por exemplo, para enxergar os nossos olhos enviam um sinal elétrico através do nosso sistema nervoso e o nosso cérebro conforma a imagem no nosso Cortex Visual, mas nosso cérebro também consegue formar imagens sem NENHUM estimulo visual! Bizarro isso, mas nós humanos também temos a nossa própria Camada de Abstração de Hardware, e com isso podemos gerar estímulos sensoriais mesmo que eles não venham diretamente dos nossos "sensores" biológicos, alias, os sonhos são basicamente isso, o seu cérebro trabalhando e gerando imagens com os olhos "desligados". rsrs
Enfim... Ta ai o código pra quem quiser:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Public Class Form1 Public Declare Auto Function SetCursorPos Lib "User32.dll" (ByVal X As Integer, ByVal Y As Integer) As Long Public Declare Auto Function GetCursorPos Lib "User32.dll" (ByRef lpPoint As Point) As Long Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 300 ' Configura o timer para 300 mili Segundos End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Timer1.Start() ' Inicia o timer End Sub Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick ' Rotina de interrupção por overflow do timer1 Dim atualPOS As New Point ' Criar novo ponto para armazenar posição do Mouse GetCursorPos(atualPOS) ' Salva posição do mouse If atualPOS.X >= 0 And atualPOS.X < 500 Then 'Se a posição X do mouse esta entre 0 e 500 If atualPOS.Y >= 0 And atualPOS.Y < 300 Then 'Se a posição Y do mouse esta entre 0 e 300 SetCursorPos(730, 600) ' Move o Mouse para X=730, y=600 End If End If End Sub End Class |
O form inteiro só precisa ter um botão, que no código é usado para iniciar o processo, disparando a contagem do timer1.
Com isso da pra controlar a posição do cursor na tela, mas e pra simular uns clicks... Como faz???
Moleza! É só copiar isso pro header do programa:
1 2 3 4 5 6 7 | Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) Declare Function mouse_event Lib "user32.dll" Alias "mouse_event" (ByVal dwFlags As Int32, ByVal dX As Int32, ByVal dY As Int32, ByVal cButtons As Int32, ByVal dwExtraInfo As Int32) As Boolean Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' Key press do botão Direito Public Const MOUSEEVENTF_RIGHTUP = &H10 ' Key prelease do botão Direito Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' Key press do botão Esquerdo Public Const MOUSEEVENTF_LEFTUP = &H4 ' Key prelease do botão botão esquerdo |
Ai é só usar a função mouse_event de acordo com o botão que você quer pressionar:
1 2 3 4 5 6 7 | ' Click Esquerdo mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) ' Pressiona o Botão mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) ' Solta o Botão ' Click Direito mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) ' Pressiona o Botão mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0) ' Solta o Botão |
Bom, por hoje é isso! Espero que tenham gostado...
Nenhum comentário:
Postar um comentário