اگر از تصمیم گیری ویندوز برای اینکه به کدام پنجره نگاه کنید خسته شده اید، در اینجا نحوه ایجاد یک کلید فوری برای متوقف کردن آن آورده شده است.
آیا این بسیار آزاردهنده نیست که حداقل در ویندوز، هر پنجره ای در هر جایی از صفحه ظاهر شود؟ آیا این تصادفی بودن روزانه اعصاب شما را تحت تأثیر قرار می دهد و ترجیح می دهید کنترل بیشتری روی قرارگیری ویندوز خود روی صفحه داشته باشید؟ خوب، اکنون به لطف AutoHotKey می توانید.
در این آموزش خواهیم دید که چگونه می توانید این مشکل را با اسکریپت AutoHotKey حل کنید. ما آن را طوری می سازیم که هر پنجره ای را با فشار یک کلید به مرکز صفحه شما منتقل کند. شیرین به نظر می رسد؟ بیایید ببینیم چگونه انجام می شود!
نحوه تنظیم یک کلید میانبر پنجره با AutoHotKey
نیمی از نبرد هنگام ایجاد یک اسکریپت، چگونگی کارکرد آن قبل از تایپ یک کاراکتر است. بنابراین، اجازه دهید چنین برنامه عملیاتی را به زبان انگلیسی ساده بسازیم که سپس به یک فیلمنامه “جهش” می دهیم.
“مشکل” ویندوز دارد
ویندوز (مانند “مستطیل چیزهای روی صفحه نمایش ما”، نه سیستم عامل) تمایل دارد در هر نقطه از صفحه نمایش ظاهر شود. حواس پرتی است و همچنین زمانی که به طور مکرر اتفاق می افتد می تواند آزاردهنده باشد. به خصوص زمانی که با چندین درخواست کننده مواجه می شوید که در نقاط مختلف ظاهر می شوند و انتظار ورودی کاربر را دارند.
راه حل مشکل
جدا از ارسال کلید و کلیک ماوس به هر پنجره ای، AutoHotKey می تواند آنها را نیز دستکاری کند. در گذشته دیدیم که چگونه میتوانید از AutoHotKey برای پین کردن پنجرهها “همیشه در بالا” با استفاده از میانبر صفحه کلید استفاده کنید. با این حال، این بار از توانایی های دستکاری پنجره AutoHotKey برای موارد زیر استفاده خواهیم کرد:
- “خواندن” شناسه پنجره فعال.
- ابعاد آن (عرض و ارتفاع) را نیز بخوانید.
- ابعاد مانیتور را بخوانید.
- ابعاد مانیتور و پنجره را برای محاسبه مختصات بهینه برای نمایش پنجره مذکور در مرکز صفحه ترکیب کنید.
- پنجره را به آن مختصات منتقل کنید.
در نهایت موارد بالا را به یک میانبر ترسیم می کنیم. به این ترتیب، میتوانید به جای استفاده از آن در تمام ویندوزها، آن را «در صورت تقاضا» نامید – که میتواند با برنامهها و بازیهای تمام صفحه تداخل داشته باشد.
توجه داشته باشید که در این آموزش، ما مستقیماً به AutoHotKey می پردازیم. اگر با آن آشنا نیستید و می خواهید از قبل بیشتر بدانید، راهنمای سریع AutoHotKey ما را برای مبتدیان بررسی کنید.
ابتدا، HotKey را تنظیم کنید
ما اشاره کردیم که چگونه تابعی را که ایجاد می کنیم به یک میانبر نگاشت می کنیم. با این حال، احتمالاً بهتر است با آن قسمت شروع کنیم تا آن را از سر راه برداریم.
با دانلود نصب کننده از سایت رسمی AutoHotKey شروع کنید. به جای نسخه بتای v2 یا نسخه منسوخ شده 1.0، به سراغ نسخه «جاری» بروید. سپس، آن را روی رایانه شخصی خود نصب کنید.
File Explorer را اجرا کنید (سریعترین راه با کلید ترکیبی Windows Key + E است) و به مسیری که می خواهید اسکریپت خود را ایجاد کنید بروید. با نصب AutoHotKey، برخی از گزینه های جدید در منوی کلیک راست ظاهر می شوند. بنابراین، روی فضای خالی پنجره File Explorer کلیک راست کرده و New > AutoHotKey Script را انتخاب کنید.
به فایل اسکریپت خود یک نام بدهید و سپس روی آن کلیک راست کرده و آن را ویرایش کنید. اگر از یک برنامه ویرایش متن سازگار با کد مانند Visual Studio Code یا Notepad++ استفاده نمی کنید، از Windows Notepad استفاده کنید. از ویرایشگرهایی مانند Wordpad خودداری کنید، زیرا می توانند نحو بی فایده (برای هدف) را به “کد” شما اضافه کنند.
هنگامی که در ویرایشگر انتخابی خود هستید، میبینید که اسکریپت AutoHotKey شما از قبل دارای خطوطی است که در بالا از قبل پر شدهاند. آنها به دلایل ثبات و سازگاری آنجا هستند. آنها قابل تغییر هستند، اما برای این آموزش آنها را همانطور که هستند رها کنید.
دو یا سه خط زیر آنها را “حرکت دهید” و میانبری را وارد کنید که عملکرد شما را راه اندازی می کند. می توانید با استفاده از “+” برای Shift، “^” برای CTRL، “!” یک ترکیب کلید ایجاد کنید. برای Alt، و “#” برای کلید ویندوز، و همچنین هر کلید “عادی” از صفحه کلید (حروف و اعداد).
به عنوان مثال، برای اینکه ترکیب CTRL + Y اسکریپت خود را راه اندازی کند، از:
^y::
دوگانه “:” مانند این است که بگویید: “هی، AutoHotKey، لطفا رشته یا ترکیب کلید سمت چپ را به همه چیز در سمت راست نگاشت”.
با فشار دادن Enter، دو یا سه خط زیر آن را جابهجا کنید و عبارت «return» را تایپ کنید که پایان عملکرد خاص را مشخص میکند. نتیجه کامل باید به شکل زیر باشد:
^y::
; This is a comment.
return
“؛ این یک نظر است.” خط دقیقاً همان است، یک نظر در “کد” اسکریپت که AutoHotKey آن را اجرا نخواهد کرد. برای اهداف مستندسازی وجود دارد تا جایی را که در مراحل زیر «کد» اسکریپت را وارد میکنیم مشخص کنیم.
اگر در گذشته از راهنمای ما در مورد ایجاد کلیدهای میانبر مخصوص برنامه با AutoHotKey پیروی کرده اید، در این مورد… این کار را نکنید. شما می خواهید کلید میانبر پنجره شما “جهانی” باشد تا هر پنجره را از هر برنامه ای در مرکز قرار دهد. اگر آن را به یک برنامه خاص “گره بزنید”، فقط روی ویندوز این برنامه عمل می کند.
جزئیات پنجره فعال را دریافت کنید
ما می خواهیم میانبر ما روی پنجره فعال عمل کند و همچنین به ابعاد آن برای محاسبات خود نیاز داریم. ما می توانیم آن جزئیات را با موارد زیر پیدا کنیم:
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%
خط نظری را که در قسمت قبل به اسکریپت اضافه کرده بودیم با دو خط بالا جایگزین کنید. نتیجه؟
- خط اول عنوان پنجره فعال را می گیرد.
- خط دوم عرض و ارتفاع آن را می خواند و آنها را با کلمات/متغیرهای “Width” و “Height” ترسیم می کند، که در ادامه برای محاسبات خود از آنها استفاده خواهیم کرد.
ما جزئیات پنجره فعال را دریافت کردیم، اما برای رسیدن به هدفمان به ابعاد ناحیه قابل مشاهده مانیتور نیز نیاز داریم. خوشبختانه، پیدا کردن آنها حتی ساده تر است.
در مورد ناحیه مانیتور اولیه چطور؟
برای یافتن عرض و ارتفاع مانیتور اصلی خود به دستورات اضافی نیاز نداریم. AutoHotKey با دو متغیر از پیش تعیین شده ارائه می شود که از قبل حاوی این اطلاعات برای ما هستند: “A_ScreenWidth” و “A_ScreenHeight”.
بنابراین، هنگامی که آنها را در بخش بعدی می بینید، آنها از قبل دارای عرض و ارتفاع مانیتور اصلی هستند. برای تعیین مقادیر صحیح به آنها نیازی نیست. بنابراین، ما می توانیم آنها را به طور مستقیم در محاسبات خود استفاده کنیم.
زمان محاسبه موقعیت هدف
ما می توانیم محاسبات را مستقیماً در نقاطی از اسکریپت که به آنها نیاز داریم وارد کنیم. با این حال، اگر آنها را به دو متغیر نگاشت کنیم و سپس از آن متغیرها در اسکریپت خود استفاده کنیم، برای خوانایی آسان تر و بهتر است.
بنابراین، اجازه دهید “TargetX” را به عنوان متغیری که مختصات افقی را نگه می دارد و “TargetY” را به عنوان متغیری با مختصات عمودی جایی که باید پنجره را حرکت دهیم تا در مرکز صفحه نمایش داده شود، برویم.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...
TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.
بیایید آن خطوط را به زبان انگلیسی ساده رمزگشایی کنیم:
- “TargetX” و “TargetY” دو متغیر هستند.
- “:=” به AutoHotKey اطلاع می دهد که متغیرها باید با نتایج محاسبات سمت راست برابر باشند و این نتایج باید به عنوان اعداد در نظر گرفته شوند.
- “(A_ScreenWidth/2)” عرض کامل مانیتور را بر دو تقسیم می کند.
- “(Width/2)” همین کار را برای عرض پنجره فعال انجام می دهد.
با موارد بالا، نیمی از عرض پنجره فعال را از نصف عرض صفحه کم می کنیم. آنچه باقی می ماند فضای سمت چپ پنجره است – از سمت چپ صفحه و تا جایی که پنجره باید ظاهر شود. خط دوم همین کار را می کند اما برای ارتفاع.
حالا برای تغییر موقعیت پنجره
با تجهیز به دانش قدرتمندی که از دستورات عرفانی که در بالا دیدیم به دست آمده است، اکنون می توانیم افسون جادویی خود را بسازیم که آیین انتقال از راه دور پنجره را کامل می کند. یا به زبان انگلیسی ساده، از دستور WinMove در AutoHotKey برای حرکت دادن پنجره ها در اطراف صفحه استفاده کنید.
WinMove از ما انتظار دارد که حداقل با سه اطلاعات به آن “تغذیه” کنیم تا کار خود را انجام دهد: عنوان پنجره مورد نظر و مختصات مکان انتقال آن. از آنجایی که قبلاً آن قطعات اطلاعات را به متغیرها نگاشت کرده ایم، دستور به همین سادگی است:
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
در بالا:
- “WinMove” دستور AutoHotKey است که یک پنجره را به اطراف حرکت می دهد.
- “%ActiveWindowTitle%” متغیری است که عنوان پنجره فعال در آن ترسیم شده است.
- “%TargetX%” و “%TargetY%” مختصات افقی و عمودی محل حرکت پنجره هستند.
همچنین میتوانید اندازه پنجرهها را با WinMove تغییر دهید، از آنهایی که دارای متنهای خاص در عنوان یا محتوای آنها هستند صرفنظر کنید، و غیره. از آنجایی که این ویژگیها خارج از محدوده این مقاله هستند، برای اطلاعات بیشتر در مورد آنها، اسناد رسمی AutoHotKey را در دستور WinMove بررسی کنید.
فیلمنامه نهایی
در نهایت به چالش برانگیزترین قسمت سفر خود می رسیم. خود را برای مرحله بعدی آماده کنید که انتظار دارد اسکریپت را ذخیره کنید و خب… آن را اجرا کنید.
بله، همین بود – فیلمنامه کامل است، و کاری جز امتحان کردن آن وجود ندارد. از میانبری که تعریف کرده اید استفاده کنید و هر پنجره فعال به مرکز صفحه شما منتقل می شود.
فایل اسکریپت نهایی، همانطور که در یک ویرایشگر متن باز می شود، باید چیزی شبیه به این باشد:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
^y::
WinGetTitle, ActiveWindowTitle, A ; Get the active window's title for "targetting" it/acting on it.
WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window's position, used for our calculations.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Calculate the horizontal target where we'll move the window.
TargetY := (A_ScreenHeight/2)-(Height/2) ; Calculate the vertical placement of the window.
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates.
return
توجه داشته باشید که می توانید اسکریپت بالا را کپی کنید، آن را در Notepad یا یک ویرایشگر متن مشابه قرار دهید و آن را با پسوند AHK ذخیره کنید. سپس، با نصب AutoHotKey، آن را “اجرا کنید” تا هر پنجره ای را هر زمان که CTRL + Y را فشار می دهید، در مرکز قرار دهید. اگر آن میانبر را دوست ندارید، خط “^y::” را به یک کلید ترکیبی دیگر تغییر دهید. به عنوان مثال، !+c:: تابع را با کلیدهای ترکیبی Shift + Alt + C ترسیم می کند.
!+c::
آهنگ اضافه
برای راحتی شما، ما تصمیم گرفتهایم یک اسکریپت ثانویه را ایجاد کرده و اضافه کنیم که برای کسانی که تنظیمات مانیتور دوگانه دارند مفید باشد.
برای ساده نگه داشتن این مقاله، به جای آن اطلاعاتی در مورد نحوه عملکرد اسکریپت در آن در قالب نظرات قرار داده ایم. می توانید آنها را از تکرار خود حذف کنید.
داستان کوتاه تفاوت آن با اسکریپت بالا این است که ما همچنین یک متغیر PositionToggle و مقداری “منطق IF” اضافه می کنیم. سپس از آن ها برای “تلنگر زدن” پنجره بین مانیتورها استفاده می کنیم. ما باید توجه داشته باشیم که این یک راه حل بی ظرافت و “هک” برای مشکل است. با این حال، ما آن را به کد سادهتر ترجیح میدهیم، زیرا این رویکرد برای همه افرادی که با AutoHotKey آشنا نیستند، آسانتر قابل درک و تغییر دادن است.
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
PositionToggle = 1 ; Use a number as a toggle for marking on which monitor the window should appear.
^y::
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%
If PositionToggle = 1 ; Check the toggle's state and "do what's between the curly brackets" if it's set to 1 for our primary monitor.
{
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
PositionToggle = 2 ; "Flick" the toggle so that if we reuse the hotkey, our active window will move to the second monitor.
}
Else If PositionToggle = 2 ; Have we used the hotkey before, "flicking" the toggle number to the second monitor? Then the script should instead do what's between the following curly brackets instead of the ones above.
{
SysGet, Mon2, Monitor, 2 ; Get the second monitor's details
Mon2Width := Mon2Right - Mon2Left ; Calculate the second monitor's actual width.
Mon2Height := Mon2Bottom - Mon2Top ; Calculate the second monitor's actual height.
TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor's width since AutoHotKey can't move windows on individual monitors but across their combined "surface".
TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor's vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor's top isn't equal to 0 (like the primary one's).
PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor.
}
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates.
return
یک پنجره را با یک کلید در مرکز قرار دهید، راه آسان
و اکنون کار شما تمام شده است! اگر همه چیز به خوبی کار می کند، اکنون می توانید از کلید میانبر تازه راه اندازی شده خود برای وسط پنجره در هر زمان استفاده کنید.