最少为AHK。活页夹

理念


嘿。我是C#.NET开发人员的初学者(作为第二年的初学者)。我已经厌倦了编写各种计算器等,所以我问自己:“ Windows中缺少什么?” 我得到的答案让我有了主意:“一切。” 因此,有一个Binder项目,该项目使我可以学习很多有关C#、. NET和WPF的知识,并且为我提供了一些我非常喜欢的优秀软件,因此我决定向所有人展示。

关于程序本身


活页夹旨在用于绑定。可以为任何组合键配置这些绑定:按钮+ 2个修饰符(CTRL,Shift,ALt,Win)以及它们上的粘贴脚本。该脚本以内部语言编写,我尝试使其与C#尽可能相似。
其原理与AutoHotKey中的相同。该程序带有一个DLL,在其中我慢慢添加了各种功能(现在有49个)。在我看来,Binder语言已经可以被认为是一种解释型编程语言,尽管能力不强,因为已经有一个if-else构造,while和repeat循环,函数(也是异步的),break和return语句,int,double,bool和字符串数据类型。

在该程序中,绑定程序可在整个PC上全局运行,并且从AHK进行的键模拟可以在几乎所有应用程序中模拟键击。

我想用Binder解决的第一个任务是显示/隐藏桌面图标。因此,我添加的第一个脚本是ShowHideDesktopIcons(布尔显示)。但是这里出现一个问题,如何用一个按钮同时隐藏和显示?我通过将“ Bind switch”参数添加到活页夹中来决定它,它允许您一次将2个脚本挂在1个绑定上,然后依次执行。现在,已经可以在Binder上创建一个自动单击器,或者例如一个绑定,Ctrl + Shift + C,它将选择的文本添加到剪贴板,而不是替换它,或者使用绑定关闭/重新启动PC。最有用的方法之一是“ Super Alt + F4”绑定,它接收活动的窗口进程并杀死它。该程序支持变量:您可以使用SetVar()保存任何值,并获取它的GetVar()。今天,有了执行脚本的属性,第一个是Block,它阻止绑定的击键,直到其主线程完成。在不久的将来,计划添加名称空间以将变量从一个脚本传输到另一个脚本。

我认为,“记录”功能是一个有用的附加功能,它记录了键盘和鼠标的所有动作,并立即将它们转换为Binder的脚本。

在帮助窗口中,您可以找到所有可用的功能,很快就会出现脚本的属性。

可以将所有绑定保存到文件中,以免丢失。

在设置中,您可以启用Windows启动程序,配置要打开的默认绑定文件。



我想指出一个方便的事情:当使用嵌套结构时(例如,如果在while内),单击“保存”按钮后,脚本的格式会很漂亮。

句法


在Binder中,所有程序员都熟悉的语法类似于C#。

例如,对MsgBox函数(如其他任何函数)的调用如下所示:

MsgBox(" ", "    ");

执行此行后,结果将如下所示:



MsgBox()接受参数,您可以在帮助窗口中看到每个函数的参数。

为了帮助您,所有函数均按返回值的类型进行排序:



用C ++ / C#编写的任何人都将立即了解其工作原理,但第一种类型除外:“非返回值”组中的函数将返回传递给它们的参数。
例如:

MsgBox(MsgBox("Hello"));

2次将显示一条带有文本“ Hello”的消息。

从这一行,可以了解一个更重要的细节:某些功能可以由其他功能转换为参数。

除了内置功能之外,该程序还具有多种设计。应该注意的是,我的整体结构属于1个团队,因此在每个团队的末尾都需要放置;。稍后再删除。

If-else构造。


它的工作方式与其他任何语言一样:

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

通常,您可以根据需要编写其他内容,也可以编写/不编写其他内容。最主要的是,括号中的<condition>应该为Boolean类型。例如,您可以在此处写入true,并且条件将始终得到满足。

重复构造


repeat是程序中最简单的循环,括号中必须有一个Int值,它只是将操作重复指定的次数,例如:

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

5次显示消息“ Hello”。

它有2处修改:

1)异步重复()。将为其执行分配一个单独的线程,即 刚开始之后,将立即执行之后的功能。

2)allasync repeat()将立即开始在其内部执行指定次数的代码,例如:

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

同时它将显示5条消息:



虽然构造


虽然-字面意思是英语。-条件为真时。只要括号中的条件为真,就在自身内部执行功能。此条件必须为布尔类型。

您可以使用break语句强制中止循环执行;例:

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

打印数字从1到11的消息,然后退出。

While还对async while进行了修改,它仅在单独的线程中执行它,从而使您可以继续执行主代码。

功能


在Binder中,您可以声明和使用函数并将参数传递给它们

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

我的输出:



函数也可以返回值,为此,您需要使用return语句:

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

现在,结果相同,仅显示该消息2次。

关于小组


因此,您可以在Binder的基础上创建任何东西,只需要库中的函数,我可以非常简单地添加它,为此,我只需要思路。这是创建VKontakte组vk.com/public192980751的原因之一活页夹是完全免费的,对于有关该程序的任何问题,我都愿意提供帮助。请通过简单地建议要添加的内容,测试项目或订阅小组来支持我。

PS该项目出现在GitHub github.com/Electrominch/Binder

All Articles