AHK no mínimo. Encadernador

Idéia


Ei. Sou desenvolvedor iniciante em C # .NET (como iniciante no segundo ano). Eu estava cansado de escrever todo tipo de calculadora, etc., então me perguntei: "O que estou perdendo no Windows?" E a resposta que eu vim me deu a idéia: "Tudo". Havia o Binder, um projeto que me permitiu aprender muito sobre C #, .NET e WPF, e me deu um bom software de que tanto gostava que decidi mostrá-lo a todos.

Sobre o próprio programa


O encadernador destina-se, inesperadamente, a vinculações. Essas ligações podem ser configuradas para qualquer combinação de teclas: botão + 2 modificadores (CTRL, Shift, ALt, Win), bem como scripts de stick neles. O script é escrito em um idioma interno, que tentei tornar o mais semelhante possível ao C #.
O princípio é o mesmo do AutoHotKey. O programa vem com uma DLL, na qual lentamente adiciono várias funções (agora são 49). Na minha opinião, a linguagem Binder já pode ser considerada uma linguagem de programação interpretada, embora pouco capaz, porque já existe uma construção if-else, loops while e repeat, funções (também assíncronas), instruções break e return, int, double, bool, tipos de dados string.

No programa, os fichários funcionam globalmente em todo o PC, e a simulação de teclas tirada do AHK pode simular pressionamentos de tecla em quase todas as aplicações.

A primeira tarefa que eu queria resolver com o Binder era mostrar / ocultar ícones da área de trabalho. E assim, o primeiro script que adicionei é ShowHideDesktopIcons (bool show). Mas aqui surge a pergunta: como esconder e mostrar tanto com um botão? Eu decidi adicionando o parâmetro "Bind switch" aos binders, o que permite pendurar 2 scripts em 1 bind de uma só vez, que são executados por sua vez. Já no Binder, você pode fazer uma filtragem automática ou, por exemplo, uma ligação, Ctrl + Shift + C, que adicionará o texto selecionado à área de transferência e não a substituirá, ou uma ligação para desligar / reiniciar o PC. Uma das mais úteis é a ligação "Super Alt + F4", que recebe o processo da janela ativa e o mata. O programa tem suporte para variáveis: você pode salvar qualquer valor usando SetVar () e obtê-lo GetVar (). Hoje, com atributos criados para executar scripts,e o primeiro foi Block, que bloqueia o pressionamento de tecla da ligação até que seu thread principal seja concluído. Em um futuro próximo, está planejado adicionar espaços para nome para transferir variáveis ​​de um script para outro.

Uma adição útil, eu acho, é a função Record, que registra todas as ações do teclado e do mouse, transformando-as imediatamente em um script para o Binder.

Na janela de ajuda, você pode encontrar todas as funções disponíveis, e em breve aparecerão atributos para scripts.

Todas as ligações podem ser salvas em um arquivo para não perder.

Nas configurações, você pode ativar o lançamento do programa com o Windows, configure o arquivo de ligação padrão a ser aberto.



Quero observar uma coisa conveniente: ao usar construções aninhadas (por exemplo, se houver algum tempo), depois de clicar no botão "Salvar", o script será formatado de maneira bonita.

Sintaxe


No Binder, a sintaxe familiar para todos os programadores foi feita à semelhança do C #.

Por exemplo, uma chamada para a função MsgBox (como qualquer outra) fica assim:

MsgBox(" ", "    ");

Quando essa linha é executada, o resultado será o seguinte:



MsgBox () aceita os parâmetros, você pode vê-los para cada função na janela de ajuda.

Para ajudar, todas as funções são classificadas pelo tipo de valor de retorno:



qualquer pessoa que tenha escrito em C ++ / C # entenderá imediatamente como isso funciona, exceto o primeiro tipo: funções do grupo "Valores não retornáveis" retornam os parâmetros passados ​​a eles.
Por exemplo:

MsgBox(MsgBox("Hello"));

2 vezes exibirá uma mensagem com o texto "Olá".

A partir dessa linha, mais um detalhe importante pode ser entendido: algumas funções podem ser transferidas para parâmetros por outras.

Além das funções integradas, o programa possui vários designs. Deve-se notar que eu tenho toda uma estrutura considerada como 1 equipe; portanto, no final de cada uma delas, você precisa colocar ;. Vou removê-lo mais tarde.

Construção If-else.


Funciona como em qualquer outro idioma:

if(<1>)
{
<1>
}
else if(<2>)
{
<2>
}
....
else
{<,    false>};

Você pode escrever o máximo que quiser, escrever / não escrever mais, em geral, como quiser. O principal é que entre parênteses <condição> deve ser do tipo Booleano. Por exemplo, você pode escrever true lá, e a condição sempre será satisfeita.

Repetir construção


repeat é o loop mais simples do programa, deve haver um valor Int entre parênteses e simplesmente repete a ação o número especificado de vezes, por exemplo:

repeat(SumInt(2,3))
{
    MsgBox("");
};

5 vezes exibe a mensagem "Olá".

Possui 2 modificações:

1) async repeat (). Um thread separado será alocado para sua execução, ou seja, imediatamente após seu início, as funções após a sua execução.

2) allasync repeat () começará imediatamente a executar o código dentro de si o número especificado de vezes, por exemplo:

allasync repeat(5)
{
    MsgBox("Hello");
};

Ao mesmo tempo, ele exibirá 5 mensagens:



Enquanto construção


Enquanto - literalmente do inglês. - enquanto a condição for verdadeira. Executa funções dentro de si, desde que a condição seja verdadeira entre parênteses. Essa condição deve ser do tipo booleano.

Você pode abortar forçosamente a execução do loop usando a instrução break; Exemplo:

SetVar("i", 0);
while(true)
{
    SetVar("i", SumInt(GetVar("i"), 1));
    MsgBox(GetVar("i"));
    if(MoreThan(GetVar("i"), 10))
    {
        break;
    };
    
};
MsgBox("");

Imprima mensagens com números de 1 a 11 e saia.

O While também possui uma modificação do async while, que simplesmente o executa em um encadeamento separado, permitindo que você continue executando o código principal.

Funções


No Binder, você pode declarar e usar suas funções e passar parâmetros para elas

func f1(text)
{
MsgBox(ReplaceString(text, "\", " habr "));
};
f1(GetDesktopPath());

Minha saída: As



funções também podem retornar valores, para isso você precisa usar a instrução de retorno:

func f1(text)
{
    return MsgBox(ReplaceString(text, "\", " habr "));
};
MsgBox(f1(GetDesktopPath()));

Agora, o mesmo resultado, apenas a mensagem é exibida 2 vezes.

Sobre o grupo


Assim, você pode criar qualquer coisa com base no Binder, você só precisa de funções na biblioteca, o que eu posso acrescentar de maneira muito simples, para isso, preciso apenas de idéias. Essa é uma das razões para criar o grupo VKontakte vk.com/public192980751 . O Binder é totalmente gratuito e estou pronto para ajudar com qualquer dúvida sobre o programa. Por favor, apoie-me simplesmente aconselhando o que adicionar, testando o projeto ou simplesmente assinando o grupo.

PS O projeto apareceu no GitHub github.com/Electrominch/Binder

All Articles