Olá a todos, Hoje e por responsabilidade deste post, onde muitos utilizadores perguntaram se não existia uma aplicação semelhante mas para Windows (isso foi como musica para os meus ouvidos, porque neste meio é difícil inventar coisas novas), pus mãos à obra e vou-vos mostrar então oferecer e demonstrar essa aplicação.
Como devem calcular este não é um programa linear nem fácil de se fazer portanto não vou disponibilizar o código apenas mostrar excertos e dizer-vos o que utilizei. Posto isto, o assunto de hoje será interoperabilidade aplicação-aplicação / aplicação-Windows.
Nos tempos do Vb6, C++ e anteriores o modo de comunicar com o que hoje conhecemos como eventos era através de mensagens para o sistema operativo, hoje em dia funciona da mesma maneira mas o .NET poupa-nos essa dor de cabeça, mas o que hoje um “clique” do botão faz é enviar uma série de mensagens para o SO como qual a tecla premida se esta em modo “hold”, etc, tudo isto são mensagens ao SO, só que nós como programadores desta nova geração já não temos de lidar com isso, mas de vez em quando como é o caso desta aplicação temos de o fazer.
Referências:
Aqui deixo uns bons sites para servir de referência. http://www.bbdsoft.com/ascii.html http://api.farmanager.com/en/winapi/virtualkeycodes.html http://www.pinvoke.net/index.aspx
A nossa aplicação:
Bom esta aplicação e como já referi em cima, permite que ao escolher-mos qual o programa podemos gravar as alterações de tempos a tempos, por exemplo ao escrever no notepad, trabalhos no Photoshop, tudo é gravado por nós, assim evitamos os dissabores de nos apercebermos que não tínhamos o trabalho gravado quando falta a luz ou o sistema nos deixa na mão. Para começar e para podermos interagir com o sistema operativo precisamos de importar dois namespaces
Com estes namespaces importados podemos então ter acesso ao método Process, que nos irá dar acesso a todos os processos que estão em execução na nossa máquina e isso faz-se da seguinte maneira:
Para o nosso projecto correr no tray e não como uma janela normal existem uns truques. O que eu fiz foi (existem n formas) fazer o override do load da form e colocar estes parâmetros
Depois no load da form
Em cada intervalo de tempo que definimos o nosso timer vai chamar o método t_Tick este método é o que irá fazer todo o trabalho de enviar as mensagens para a aplicação que definimos. E que obviamente não poderei aqui colocar o seu código. Para que tudo isto funcione temos de “ir fundo” e trablhar com algo que muitos programadores nunca viram nem ouviram falar.
São métodos que o namespace System.Runtime.InteropServices nos disponibiliza, e que nos permitem enviar mensagens para aplicações e para o Windows.
Com estes métodos podemos interagir com as API (Application Programming Interface) do Windows, neste caso apenas iremos interagir com o USER ou seja com a livraria User32.dll e para fazer isso temos de a importar [DllImport(“User32.DLL”)] Com esta API podemos interagir com janelas, menus, caixas de dialogo ícones, etc.. é o que é utilizado pelos programas de themes do Windows.
Código:
Por exemplo este é o código que chamamos quando queremos uma messageBox
[DllImport(“User32.dll”)] public static extern int MessageBox(int h, string m, string c, int type); Usamos o atributo dllimport e indicamos o nome da biblioteca que queremos aceder User32.dll. E chamamos esta função externa para nós mas que esta na API do Windows nomeadamente na biblioteca(dll) do User32.dll
Para o nosso caso especifico importamos: Para aceder á janela da aplicação que queremos interagir: [DllImport(“user32.dll”)] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
Eventos do teclado. No nosso caso se o Ctrl está premido: [DllImport(“user32.dll”)] public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);
E a mais importante, a função que nos permite enviar mensagens para outras aplicações: [DllImport(“user32.dll”, SetLastError = true)] static extern bool PostMessage(HandleRef hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
Bom e chegamos ao fim do nosso tutorial se tiverem interesse nesta matéria aconselho-vos a explorar os sites que indiquei em cima principalmente o Pinvoke que é um wiki para interoperabilidade.
Explorem muito bem porque ao saber interagir com o windows e outras aplicações poderão atingir uma infinidade de coisas, por exemplo criar janelas e barras de scroll a vosso gosto, etc.
Espero que gostem da aplicação e para a semana cá estarei e para voltar ao rumo normal irei falar de Typed Datasets e de Linq.
Um abraço a todos e boa programação.
Nota: Consegui testar a aplicação em muitos programas como a versão Cs4 da adobe, notepad, notepad++, paint, etc. De momento o único que ainda não consegui interacção foi com o Office 2007 e não testei com o 2003, portanto se virem mais incompatibilidades avisem.