AHK minimum. Map

Ide


Hei. Saya seorang pemula C # .NET developer (sebagai pemula tahun kedua). Saya bosan menulis segala macam kalkulator, dll. Jadi saya bertanya pada diri sendiri: "Apa yang saya lewatkan di Windows?" Dan jawaban yang saya datangi memberi saya ide: "Segalanya." Jadi ada Binder, sebuah proyek yang memungkinkan saya untuk belajar banyak tentang C #, .NET dan WPF, dan yang memberi saya beberapa perangkat lunak yang baik yang sangat saya sukai sehingga saya memutuskan untuk menunjukkannya kepada semua orang.

Tentang program itu sendiri


Binder dimaksudkan, secara tak terduga, untuk mengikat. Binding ini dapat dikonfigurasi untuk kombinasi tombol apa saja: tombol + 2 pengubah (CTRL, Shift, ALt, Win), serta menempelkan skrip pada mereka. Script ditulis dalam bahasa internal, yang saya coba buat semirip mungkin dengan C #.
Prinsipnya sama dengan di AutoHotKey. Program ini dilengkapi dengan DLL, di mana saya perlahan menambahkan berbagai fungsi (ada 49 di antaranya sekarang). Menurut pendapat saya, bahasa Binder sudah dapat dianggap sebagai bahasa pemrograman yang ditafsirkan, meskipun sedikit mampu, karena sudah ada konstruksi if-else, sementara dan ulangi loop, fungsi (asynchronous too), break dan return pernyataan, int, double, bool, tipe data string.

Dalam program ini, pengikat bekerja secara global di seluruh PC, dan simulasi kunci yang diambil dari AHK dapat mensimulasikan penekanan tombol di hampir semua aplikasi.

Tugas pertama yang ingin saya selesaikan dengan Binder adalah menampilkan / menyembunyikan ikon desktop. Dan skrip pertama yang saya tambahkan adalah ShowHideDesktopIcons (bool show). Tapi di sini muncul pertanyaan, bagaimana membuat keduanya bersembunyi dan tampil dengan satu tombol? Saya memutuskan dengan menambahkan parameter "Bind switch" ke binder, yang memungkinkan Anda untuk menggantung 2 skrip pada 1 bind sekaligus, yang dieksekusi secara bergantian. Sudah sekarang di Binder Anda dapat membuat autoclicker, atau misalnya, bind, Ctrl + Shift + C, yang akan menambahkan teks yang dipilih ke clipboard, dan tidak menggantinya, atau mengikat untuk mematikan / me-restart PC. Salah satu yang paling berguna adalah ikatan "Super Alt + F4", yang menerima proses jendela aktif dan membunuhnya. Program ini memiliki dukungan untuk variabel: Anda dapat menyimpan nilai apa pun menggunakan SetVar (), dan mendapatkannya GetVar (). Hari ini dengan atribut yang dibuat untuk mengeksekusi skrip,dan yang pertama adalah Block, yang memblokir keystroke dari bind sampai utas utamanya selesai. Dalam waktu dekat, direncanakan untuk menambahkan ruang nama untuk mentransfer variabel dari satu skrip ke skrip lain.

Tambahan yang berguna, saya pikir, adalah fungsi Rekam, yang merekam semua tindakan dari keyboard dan mouse, segera mengubahnya menjadi skrip untuk Binder.

Di jendela bantuan Anda dapat menemukan semua fungsi yang tersedia, dan segera akan muncul atribut untuk skrip.

Semua binding dapat disimpan ke file agar tidak hilang.

Dalam pengaturan Anda dapat mengaktifkan peluncuran program dengan Windows, konfigurasikan file binding default untuk dibuka.



Saya ingin mencatat hal yang nyaman: ketika menggunakan konstruksi bersarang (misalnya, jika di dalam sementara), setelah mengklik tombol "Simpan", skrip akan diformat dengan indah.

Sintaksis


Dalam Binder, sintaksis yang akrab bagi semua programmer dibuat dalam kemiripan dengan C #.

Misalnya, panggilan ke fungsi MsgBox (seperti yang lain) terlihat seperti ini:

MsgBox(" ", "    ");

Ketika baris ini dieksekusi, hasilnya adalah sebagai berikut:



MsgBox () menerima parameter, Anda bisa melihatnya untuk setiap fungsi di jendela bantuan.

Untuk membantu, semua fungsi diurutkan berdasarkan jenis nilai kembali:



Siapa pun yang menulis dalam C ++ / C # akan segera memahami cara kerjanya, kecuali untuk tipe pertama: fungsi dari grup "Nilai yang Tidak Kembali", mengembalikan parameter yang diteruskan ke mereka.
Contohnya:

MsgBox(MsgBox("Hello"));

2 kali akan menampilkan pesan dengan teks "Halo".

Dari baris ini, satu detail lagi yang penting dapat dipahami: beberapa fungsi dapat ditransfer ke parameter oleh yang lain.

Selain fungsi bawaan, program ini memiliki berbagai desain. Perlu dicatat bahwa saya memiliki seluruh struktur yang dianggap sebagai 1 tim, jadi pada akhir masing-masing Anda perlu menempatkan ;. Saya akan menghapusnya nanti.

Jika-konstruksi lain.


Ini berfungsi seperti dalam bahasa lain:

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

Anda dapat menulis sebanyak mungkin jika ingin, menulis / tidak menulis yang lain, secara umum, sesuka Anda. Hal utama adalah bahwa dalam tanda kurung <condition> harus bertipe Boolean. Misalnya, Anda dapat menulis true di sana, dan kondisinya akan selalu terpenuhi.

Ulangi konstruk


repeat adalah loop paling sederhana dalam program, harus ada nilai Int di dalam tanda kurung, dan itu hanya mengulangi tindakan yang ditentukan berapa kali, misalnya:

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

5 kali menampilkan pesan "Halo."

Ini memiliki 2 modifikasi:

1) async repeat (). Utas terpisah akan dialokasikan untuk pelaksanaannya, mis. segera setelah dimulai, fungsi setelah itu akan dieksekusi.

2) allasync repeat () akan segera mulai mengeksekusi kode di dalam dirinya sendiri beberapa kali, misalnya:

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

Pada saat yang sama ia akan menampilkan 5 pesan:



Sambil membangun


Sementara - secara harfiah dari bahasa Inggris. - sementara kondisinya benar. Melakukan fungsi di dalam dirinya sendiri selama kondisinya benar dalam tanda kurung. Kondisi ini harus dari tipe Boolean.

Anda dapat membatalkan eksekusi loop dengan paksa menggunakan pernyataan break; Contoh:

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

Cetak pesan dengan angka dari 1 hingga 11, dan keluar.

Sementara juga memiliki modifikasi async sementara, yang hanya menjalankannya di utas terpisah, memungkinkan Anda untuk terus mengeksekusi kode utama.

Fungsi


Di Binder, Anda dapat mendeklarasikan dan menggunakan fungsi Anda dan memberikan parameter kepada mereka

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

Output saya:



Fungsi juga dapat mengembalikan nilai, untuk ini Anda perlu menggunakan pernyataan kembali:

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

Sekarang hasilnya sama, hanya pesan yang ditampilkan 2 kali.

Tentang grup


Jadi, Anda dapat membuat apa saja berdasarkan Binder, Anda hanya perlu fungsi di perpustakaan, yang dapat saya tambahkan dengan sangat sederhana, untuk ini saya hanya perlu ide. Ini adalah salah satu alasan untuk membuat grup VKontakte vk.com/public192980751 . Binder benar-benar gratis, dan saya siap membantu dengan pertanyaan apa pun tentang program ini. Tolong dukung saya dengan hanya menyarankan apa yang akan ditambahkan, dengan menguji proyek, atau hanya dengan berlangganan ke grup.

PS Proyek ini muncul di GitHub github.com/Electrominch/Binder

All Articles