AHK على الأقل. بيندر

فكرة


مهلا. أنا مطور مبتدئ C # .NET (كمبتدئ في السنة الثانية). لقد سئمت من كتابة جميع أنواع الآلات الحاسبة ، وما إلى ذلك ، لذلك سألت نفسي: "ما الذي أفقده في Windows؟" والجواب الذي جئت إليه أعطاني فكرة: "كل شيء". لذلك كان هناك Binder ، وهو مشروع سمح لي بتعلم الكثير عن C # و .NET و WPF ، والذي أعطاني بعض البرامج الجيدة التي أحببتها كثيرًا لدرجة أنني قررت عرضها على الجميع.

عن البرنامج نفسه


الموثق مخصص ، بشكل غير متوقع ، للربط. يمكن تكوين هذه الروابط لأي مجموعة مفاتيح: زر + 2 معدِّلات (CTRL و Shift و ALt و Win) ، بالإضافة إلى نصوص العصا عليها. النص مكتوب بلغة داخلية ، حاولت أن أجعلها مشابهة قدر الإمكان لـ C #.
المبدأ هو نفسه الموجود في AutoHotKey. يأتي البرنامج مع DLL ، والذي أضيف فيه وظائف مختلفة ببطء (هناك 49 منها الآن). في رأيي ، يمكن اعتبار لغة Binder بالفعل لغة برمجة مترجمة ، على الرغم من أنها غير قادرة ، لأن هناك بالفعل بنية if-else ، أثناء تكرار الحلقات والوظائف (غير المتزامنة أيضًا) وعبارات الفاصل والإرجاع ، أنواع بيانات int و double و bool و string.

في البرنامج ، تعمل المجلدات على مستوى العالم في جميع أنحاء جهاز الكمبيوتر ، ويمكن لمحاكاة المفتاح المأخوذة من AHK محاكاة ضغطات المفاتيح في جميع التطبيقات تقريبًا.

كانت المهمة الأولى التي أردت حلها باستخدام Binder هي إظهار / إخفاء رموز سطح المكتب. وبالتالي فإن أول برنامج نصي أضفته هو ShowHideDesktopIcons (عرض منطقي). ولكن هنا يطرح السؤال ، كيف تجعل كل من الاختباء والعرض مع زر واحد؟ لقد قررت ذلك عن طريق إضافة معلمة "Bind switch" إلى المجلدات ، مما يسمح لك بتعليق سكريبتَين على رابط واحد في وقت واحد ، يتم تنفيذهما بدوره. بالفعل الآن على Binder ، يمكنك إنشاء نقرة تلقائية ، أو على سبيل المثال ، ربط ، Ctrl + Shift + C ، والذي سيضيف النص المحدد إلى الحافظة ، وليس استبداله ، أو ربط لإيقاف / إعادة تشغيل جهاز الكمبيوتر. واحدة من أكثرها فائدة هي ربط "Super Alt + F4" ، الذي يتلقى عملية النافذة النشطة ويقتلها. يدعم البرنامج المتغيرات: يمكنك حفظ أي قيمة باستخدام SetVar () والحصول عليها GetVar (). اليوم بسمات تنفيذ النصوص ،وكان الأول هو Block ، الذي يمنع ضغط المفتاح حتى يتم إكمال الخيط الرئيسي. في المستقبل القريب ، من المخطط إضافة مساحات أسماء لنقل المتغيرات من برنامج نصي إلى آخر.

أعتقد أن إضافة مفيدة هي وظيفة التسجيل ، التي تسجل جميع الإجراءات من لوحة المفاتيح والماوس ، وتحولها على الفور إلى برنامج نصي لـ Binder.

في نافذة المساعدة ، يمكنك العثور على جميع الوظائف المتاحة ، وسيظهر قريبًا سمات للنصوص البرمجية.

يمكن حفظ جميع الروابط في ملف حتى لا تفقد.

في الإعدادات يمكنك تمكين تشغيل البرنامج مع Windows ، تكوين ملف الربط الافتراضي ليتم فتحه.



أريد أن أشير إلى شيء مناسب: عند استخدام الإنشاءات المتداخلة (على سبيل المثال ، إذا كان ذلك داخل الوقت) ، بعد النقر فوق الزر "حفظ" ، سيتم تنسيق البرنامج النصي بشكل جميل.

بناء الجملة


في Binder ، تم بناء الجملة المألوفة لجميع المبرمجين على غرار C #.

على سبيل المثال ، يبدو استدعاء دالة MsgBox (مثل أي وظيفة أخرى) كما يلي:

MsgBox(" ", "    ");

عند تنفيذ هذا الخط ، ستكون النتيجة كما يلي:



يقبل MsgBox () المعلمات ، يمكنك رؤيتها لكل وظيفة في نافذة التعليمات.

للمساعدة ، يتم فرز جميع الدالات حسب نوع القيمة



المرتجعة : أي شخص كتب في C ++ / C # سيفهم على الفور كيفية عمل ذلك ، باستثناء النوع الأول: تقوم الدالات من مجموعة "القيم غير المرتجعة" بإعادة المعلمات التي تم تمريرها إليهم.
على سبيل المثال:

MsgBox(MsgBox("Hello"));

ستعرض مرتين رسالة تحتوي على النص "Hello".

من هذا الخط ، يمكن فهم تفاصيل أخرى مهمة: يمكن نقل بعض الوظائف إلى المعلمات بواسطة الآخرين.

بالإضافة إلى الوظائف المضمنة ، فإن البرنامج لديه تصميمات مختلفة. وتجدر الإشارة إلى أن لدي أي هيكل كامل يعتبره فريق واحد ، لذلك في نهاية كل منهم تحتاج إلى وضع ؛. سأزيله لاحقًا.

بناء إذا آخر.


يعمل تمامًا مثل أي لغة أخرى:

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

يمكنك كتابة أي شيء آخر إذا أردت ، اكتب / لا تكتب أي شيء آخر ، بشكل عام ، كما تريد. الشيء الرئيسي هو أن بين قوسين يجب أن يكون من نوع Boolean. على سبيل المثال ، يمكنك أن تكتب صحيحًا هناك ، وسوف يتم استيفاء الشرط دائمًا.

كرر البناء


التكرار هو أبسط حلقة في البرنامج ، يجب أن تكون هناك قيمة Int بين قوسين ، وتكرر ببساطة الإجراء عدد المرات المحدد ، على سبيل المثال:

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

تعرض الرسالة 5 مرات رسالة "مرحبًا".

له تعديلان:

1) تكرار متزامن (). سيتم تخصيص مؤشر ترابط منفصل لتنفيذه ، أي مباشرة بعد بدايتها ، سيتم تنفيذ الوظائف بعد ذلك.

2) سيبدأ allasync تكرار () على الفور تنفيذ التعليمات البرمجية داخل نفسه عدد المرات المحدد ، على سبيل المثال:

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 واخرج.

بينما يحتوي أيضًا على تعديل غير متزامن بينما ، والذي ينفذه ببساطة في سلسلة محادثات منفصلة ، مما يسمح لك بمتابعة تنفيذ الكود الرئيسي.

المهام


في Binder ، يمكنك التصريح عن وظائفك واستخدامها وتمرير المعلمات إليها

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

المخرجات الخاصة بي:



يمكن أيضًا للوظائف إرجاع القيم ، لذلك تحتاج إلى استخدام عبارة الإرجاع:

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

الآن نفس النتيجة ، يتم عرض الرسالة فقط مرتين.

عن المجموعة


وبالتالي ، يمكنك إنشاء أي شيء على أساس Binder ، فأنت تحتاج فقط إلى وظائف في المكتبة ، والتي يمكنني إضافتها بكل بساطة ، لذلك أنا بحاجة إلى أفكار فقط. هذا أحد أسباب إنشاء مجموعة فكونتاكتي vk.com/public192980751 . Binder مجاني تمامًا ، وأنا على استعداد للمساعدة في أي سؤال حول البرنامج. من فضلك ادعمني ببساطة عن طريق تقديم المشورة بشأن ما يمكن إضافته ، أو عن طريق اختبار المشروع ، أو ببساطة عن طريق الاشتراك في المجموعة.

ملاحظة: ظهر المشروع على GitHub github.com/Electrominch/Binder

All Articles