یکی از بهترین ویژگی های ویندوز 10 Task View است که می توانید از آن برای ایجاد دسکتاپ مجازی استفاده کنید. این دسکتاپ ها روشی عالی برای توزیع و سازماندهی پنجره های برنامه های باز شما هستند. می توانید کلید Windows + Tab را فشار دهید (کلید Windows را نگه دارید و Tab را فشار دهید) تا آنها را در Task View ببینید.

با این حال، یکی از ویژگی هایی که توسط مایکروسافت ارائه نشده است، امکان تغییر فوری به یک دسکتاپ مجازی خاص با میانبر صفحه کلید است. به عنوان مثال، اگر روی دسکتاپ 2 هستید و می خواهید به دسکتاپ 6 تغییر دهید، باید کلید →+Windows+Ctrl را چهار بار نگه دارید. داشتن میانبری که به طور خودکار به دسکتاپ شماره 6 تغییر می کند، بدون توجه به اینکه از کدام دسکتاپ استفاده می کنید، آسان تر خواهد بود.

این آموزش به شما نشان می دهد که چگونه میانبرهای صفحه کلید ایجاد کنید تا مستقیماً به هر دسکتاپ مجازی با شماره تغییر دهید. ما این کار را با استفاده از ابزار رایگان ویندوز، AutoHotkey انجام می دهیم.

ایجاد اسکریپت

1.    نصب کننده خارج می شود و یک فایل متنی جدید در Notepad باز می شود. فایل اسکریپت ماست. (اسکریپت یک فایل متنی ساده حاوی دستوراتی است که باید توسط برنامه دیگری اجرا شود، در این مثال، AutoHotkey.)

یادداشت

اسکریپت موجود در این صفحه بر اساس Windows Desktop Switcher است، یک اسکریپت منبع باز میزبانی شده در GitHub در github.com/pmb6tz/windows-desktop-switcher

2.    اسکریپت زیر را در سند Notepad خود کپی و پیست کنید:

; Globals

DesktopCount = 2 ; Windows starts with 2 desktops at boot

CurrentDesktop = 1 ; Desktop count is 1-indexed (Microsoft numbers them this way)

;

; This function examines the registry to build an accurate list of the current virtual desktops and which one we’re currently on.

; Current desktop UUID appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\1\VirtualDesktops

; List of desktops appears to be in HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops

;

mapDesktopsFromRegistry() {

global CurrentDesktop, DesktopCount

; Get the current desktop UUID. Length should be 32 always, but there’s no guarantee this couldn’t change in a later Windows release so we check.

IdLength := 32

SessionId := getSessionId()

if (SessionId) {

RegRead, CurrentDesktopId, HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SessionInfo\%SessionId%\VirtualDesktops, CurrentVirtualDesktop

if (CurrentDesktopId) {

IdLength := StrLen(CurrentDesktopId)

}

}

; Get a list of the UUIDs for all virtual desktops on the system

RegRead, DesktopList, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VirtualDesktops, VirtualDesktopIDs

if (DesktopList) {

DesktopListLength := StrLen(DesktopList)

; Figure out how many virtual desktops there are

DesktopCount := DesktopListLength / IdLength

}

else {

DesktopCount := 1

}

; Parse the REG_DATA string that stores the array of UUID’s for virtual desktops in the registry.

i := 0

while (CurrentDesktopId and i < DesktopCount) {

StartPos := (i * IdLength) + 1

DesktopIter := SubStr(DesktopList, StartPos, IdLength)

OutputDebug, The iterator is pointing at %DesktopIter% and count is %i%.

; Break out if we find a match in the list. If we didn’t find anything, keep the

; old guess and pray we’re still correct :-D.

if (DesktopIter = CurrentDesktopId) {

CurrentDesktop := i + 1

OutputDebug, Current desktop number is %CurrentDesktop% with an ID of %DesktopIter%.

break

}

i++

}

}

;

; This functions finds out ID of current session.

;

getSessionId()

{

ProcessId := DllCall(“GetCurrentProcessId”, “UInt”)

if ErrorLevel {

OutputDebug, Error getting current process id: %ErrorLevel%

return

}

OutputDebug, Current Process Id: %ProcessId%

DllCall(“ProcessIdToSessionId”, “UInt”, ProcessId, “UInt*”, SessionId)

if ErrorLevel {

OutputDebug, Error getting session id: %ErrorLevel%

return

}

OutputDebug, Current Session Id: %SessionId%

return SessionId

}

;

; This function switches to the desktop number provided.

;

switchDesktopByNumber(targetDesktop)

{

global CurrentDesktop, DesktopCount

; Re-generate the list of desktops and where we fit in that. We do this because

; the user may have switched desktops via some other means than the script.

mapDesktopsFromRegistry()

; Don’t attempt to switch to an invalid desktop

if (targetDesktop > DesktopCount || targetDesktop < 1) {

OutputDebug, [invalid] target: %targetDesktop% current: %CurrentDesktop%

return

}

; Go right until we reach the desktop we want

while(CurrentDesktop < targetDesktop) {

Send ^#{Right}

CurrentDesktop++

OutputDebug, [right] target: %targetDesktop% current: %CurrentDesktop%

}

; Go left until we reach the desktop we want

while(CurrentDesktop > targetDesktop) {

Send ^#{Left}

CurrentDesktop–

OutputDebug, [left] target: %targetDesktop% current: %CurrentDesktop%

}

}

;

; This function creates a new virtual desktop and switches to it

;

createVirtualDesktop()

{

global CurrentDesktop, DesktopCount

Send, #^d

DesktopCount++

CurrentDesktop = %DesktopCount%

OutputDebug, [create] desktops: %DesktopCount% current: %CurrentDesktop%

}

;

; This function deletes the current virtual desktop

;

deleteVirtualDesktop()

{

global CurrentDesktop, DesktopCount

Send, #^{F4}

DesktopCount–

CurrentDesktop–

OutputDebug, [delete] desktops: %DesktopCount% current: %CurrentDesktop%

}

; Main

SetKeyDelay, 75

mapDesktopsFromRegistry()

OutputDebug, [loading] desktops: %DesktopCount% current: %CurrentDesktop%

; User config!

; This section binds the key combo to the switch/create/delete actions

LWin & 1::switchDesktopByNumber(1)

LWin & 2::switchDesktopByNumber(2)

LWin & 3::switchDesktopByNumber(3)

LWin & 4::switchDesktopByNumber(4)

LWin & 5::switchDesktopByNumber(5)

LWin & 6::switchDesktopByNumber(6)

LWin & 7::switchDesktopByNumber(7)

LWin & 8::switchDesktopByNumber(8)

LWin & 9::switchDesktopByNumber(9)

;CapsLock & 1::switchDesktopByNumber(1)

;CapsLock & 2::switchDesktopByNumber(2)

;CapsLock & 3::switchDesktopByNumber(3)

;CapsLock & 4::switchDesktopByNumber(4)

;CapsLock & 5::switchDesktopByNumber(5)

;CapsLock & 6::switchDesktopByNumber(6)

;CapsLock & 7::switchDesktopByNumber(7)

;CapsLock & 8::switchDesktopByNumber(8)

;CapsLock & 9::switchDesktopByNumber(9)

;CapsLock & n::switchDesktopByNumber(CurrentDesktop + 1)

;CapsLock & p::switchDesktopByNumber(CurrentDesktop – 1)

;CapsLock & s::switchDesktopByNumber(CurrentDesktop + 1)

;CapsLock & a::switchDesktopByNumber(CurrentDesktop – 1)

;CapsLock & c::createVirtualDesktop()

;CapsLock & d::deleteVirtualDesktop()

; Alternate keys for this config. Adding these because DragonFly (python) doesn’t send CapsLock correctly.

;^!1::switchDesktopByNumber(1)

;^!2::switchDesktopByNumber(2)

;^!3::switchDesktopByNumber(3)

;^!4::switchDesktopByNumber(4)

;^!5::switchDesktopByNumber(5)

;^!6::switchDesktopByNumber(6)

;^!7::switchDesktopByNumber(7)

;^!8::switchDesktopByNumber(8)

;^!9::switchDesktopByNumber(9)

;^!n::switchDesktopByNumber(CurrentDesktop + 1)

;^!p::switchDesktopByNumber(CurrentDesktop – 1)

;^!s::switchDesktopByNumber(CurrentDesktop + 1)

;^!a::switchDesktopByNumber(CurrentDesktop – 1)

;^!c::createVirtualDesktop()

;^!d::deleteVirtualDesktop()

3.    فایل را ذخیره کنید.

4.    این اسکریپت، AutoHotkey.ahk، در پوشه Documents شما قرار دارد. یک پنجره File Explorer جدید باز کنید (کلید Windows + E را فشار دهید) و به Documents بروید.

5.    اسکریپت را با دوبار کلیک کردن روی فایل اجرا کنید. هیچ اتفاقی نمی بینید، اما AutoHotkey اکنون اسکریپت را اجرا می کند.

چگونه کار می کند؟

این اسکریپت با ردیابی دسکتاپ مجازی که در حال حاضر از آن استفاده می کنید کار می کند. با نگه داشتن کلید پنجره و فشار دادن یک عدد بین 1 و 9، تعداد دفعات صحیح را به طور خودکار به چپ یا راست تغییر می دهد تا به دسکتاپ مورد نظر برسید. (اگر شماره دسکتاپ را فشار دهید که هنوز وجود ندارد، هیچ اتفاقی نمی افتد.)

تست کلیدهای میانبر جدید شما

برای آزمایش آن، ابتدا یک دسکتاپ مجازی جدید ایجاد کنید. برای انجام این کار، روی نماد Task View در نوار وظیفه خود کلیک کنید (یا کلید Windows + Tab را فشار دهید)، سپس روی + New Desktop کلیک کنید. یا از میانبر صفحه کلید Windows key+Ctrl+D استفاده کنید.

برای هر دسکتاپ مجازی جدیدی که می خواهید ایجاد کنید، این کار را یک بار انجام دهید. هر دسکتاپ اضافی در سمت راست دسکتاپ قبلی قرار دارد.

اکنون، می توانید با استفاده از میانبرهای صفحه کلید تعریف شده در اسکریپت، به هر یک از این دسکتاپ ها بروید. کلید ویندوز را نگه دارید و یک عدد بین 1 تا 9 را فشار دهید و به طور خودکار به آن دسکتاپ شماره گذاری شده سوئیچ می شوید. به عنوان مثال، کلید Windows + 3 را فشار دهید تا به سومین دسکتاپ مجازی از سمت چپ بروید.

توقف فیلمنامه

برای توقف استفاده از اسکریپت، به system tray خود بروید و روی نماد AutoHotkey که مانند یک “H” سبز بزرگ به نظر می رسد کلیک راست کنید تا منوی AutoHotkey Windows Notification ظاهر شود.

یادداشت

اگر نماد را نمی بینید، از دکمه ^ caret برای نمایش نمادهای مخفی استفاده کنید.

در این منو می‌توانید کلیدهای میانبر، مکث اسکریپت یا خروج کامل از AutoHotkey را به حالت تعلیق درآورید. هر یک از این اقدامات کلیدهای میانبر شما را به حالت عادی باز می گرداند.

اجرای خودکار اسکریپت خود هنگام شروع ویندوز

برای اجرای خودکار اسکریپت هر بار که ویندوز را راه اندازی می کنید، اسکریپت را به پوشه Startup خود منتقل کنید.

در ویندوز 10 و ویندوز 11، پوشه Startup در این آدرس قرار دارد:

[پوشه اصلی شما]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

این پوشه معمولاً پنهان است، بنابراین تنها در صورتی می‌توانید در File Explorer به آن دسترسی پیدا کنید که View → View Hidden Files را در بالای پنجره Explorer انتخاب کنید.

با این حال، همچنین می توانید با وارد کردن مسیر کامل دایرکتوری در کادر Run، مستقیماً به پوشه Startup دسترسی پیدا کنید. کلید Windows + R را فشار دهید تا کادر Run باز شود، سپس مسیر کامل فهرست را تایپ کنید. می توانید از متغیر محیطی %APPDATA% برای پر کردن خودکار ابتدای نام مسیر استفاده کنید. به عنوان مثال، می توانید این را در کادر Run تایپ کنید:

%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
وقتی Enter را فشار می دهید، آن پوشه در یک پنجره File Explorer جدید باز می شود.

حالا اسکریپت خود را به این پوشه منتقل کنید. اگر هنوز پوشه Documents خود را در پنجره دیگری باز دارید، AutoHotkey.ahk را به پوشه Startup بکشید و رها کنید.

اگر تصمیم گرفتید که هر بار که ویندوز را راه اندازی می کنید نمی خواهید اسکریپت به طور خودکار اجرا شود، این پوشه را دوباره باز کنید و اسکریپت را به جای دیگری منتقل کنید. شما همیشه می توانید آن را به صورت دستی با دوبار کلیک کردن روی آن اجرا کنید، مهم نیست در کجای رایانه شما قرار دارد.

یادداشت های اضافی

این اسکریپت میانبرهای پیش‌فرض ویندوز را برای Win+ (Number) لغو می‌کند، که معمولاً موارد را در نوار وظیفه شما باز می‌کند (Win+1 اولین مورد و غیره را باز می‌کند). با این حال، برخی از برنامه های داخلی ویندوز مانند تنظیمات یا فروشگاه، اسکریپت AutoHotkey را نادیده می گیرند. اگر هنگام امتحان کلیدهای میانبر روی یکی از این پنجره ها هستید، از رفتار کلید میانبر ویندوز استفاده می کند و به جای دسکتاپ جدید، چیزی را از نوار وظیفه شما باز می کند. نکته دیگری که باید متوجه شوید این است که AutoHotkey در واقع بین دسکتاپ های مجازی شما به سرعت و به سرعت یک به یک به چپ و راست سوئیچ می کند. اگر به دسکتاپ مجازی برخورد کند که در آن یکی از این برنامه‌های ویژه باز است، تغییر نمی‌کند و روی آن دسکتاپ می‌ماند.

متأسفانه، میانبرهای پیش فرض ویندوز را نمی توان غیرفعال کرد، که ناخوشایند است، اما مگر اینکه یکی از این پنجره های برنامه را باز کنید، اسکریپت AutoHotkey به خوبی کار می کند. اسکریپت معمولاً با 95 درصد برنامه های دیگر شما کاملاً کار می کند.

با این حال، اگر ترجیح می دهید، می توانید اسکریپت AutoHotkey خود را برای استفاده از کلید ترکیبی متفاوت ویرایش کنید.

در حال ویرایش اسکریپت AutoHotkey شما

دفترچه یادداشت را باز کنید (Start → Windows Accessories → Notepad).

در Notepad، فایل AutoHotkey را باز کنید. اگر از قبل پوشه Startup را باز کرده‌اید، می‌توانید نماد را روی پنجره Notepad بکشید و رها کنید تا فایل باز شود.

یا می توانید با رفتن به File → Open in Notepad و وارد کردن نام فایل %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\AutoHotkey.ahk آن را باز کنید.

هنگامی که فایل باز است، می توانید تغییراتی در اسکریپت مطابق با نیاز خود ایجاد کنید. به عنوان مثال، اگر ترجیح می دهید از ترکیب کلید میانبر Caps Lock+(Number) استفاده کنید، به دنبال این خطوط در اسکریپت باشید:

LWin & 1::switchDesktopByNumber(1)
LWin & 2::switchDesktopByNumber(2)
LWin & 3::switchDesktopByNumber(3)
LWin & 4::switchDesktopByNumber(4)
LWin & 5::switchDesktopByNumber(5)
LWin & 6::switchDesktopByNumber(6)
LWin & 7::switchDesktopByNumber(7)
LWin & 8::switchDesktopByNumber(8)
LWin & 9::switchDesktopByNumber(9)

در این خطوط، LWin را به CapsLock تغییر دهید:

CapsLock & 1::switchDesktopByNumber(1)
CapsLock & 2::switchDesktopByNumber(2)
CapsLock & 3::switchDesktopByNumber(3)
CapsLock & 4::switchDesktopByNumber(4)
CapsLock & 5::switchDesktopByNumber(5)
CapsLock & 6::switchDesktopByNumber(6)
CapsLock & 7::switchDesktopByNumber(7)
CapsLock & 8::switchDesktopByNumber(8)
CapsLock & 9::switchDesktopByNumber(9)

تغییرات خود را ذخیره کنید و روی اسکریپت دوبار کلیک کنید تا در AutoHotkey به روز شود. اگر اشتباهی در اسکریپت خود مرتکب شدید، AutoHotkey آن را اجرا نمی کند و به شما پیغام خطا می دهد. در غیر این صورت، از شما می‌خواهد اسکریپتی را که قبلاً در حال اجرا است، به‌روزرسانی کنید:

Yes را انتخاب کنید تا تغییرات جدید شما اعمال شوند.

اگر ایده ای برای ترکیب کلید میانبر متفاوت دارید، می توانید آن را به هر ترکیب کلید میانبر که قبلاً استفاده نشده است تغییر دهید.

انتخاب یک ترکیب کلید

AutoHotkey کلمات و کاراکترهای خاص خود را دارد که برای نمایش کلیدهای صفحه کلید در اسکریپت های خود استفاده می کند. به عنوان مثال، کلید Ctrl با علامت تعجب نشان داده می شود. برای استفاده از Ctrl+(Number) به عنوان ترکیب کلید میانبر، می توانید “& CapsLock” را به “!” در فیلمنامه شما سپس خطوط به شکل زیر در می آیند:

!1::switchDesktopByNumber(1)
!2::switchDesktopByNumber(2)
!3::switchDesktopByNumber(3)
!4::switchDesktopByNumber(4)
!5::switchDesktopByNumber(5)
!6::switchDesktopByNumber(6)
!7::switchDesktopByNumber(7)
!8::switchDesktopByNumber(8)
!9::switchDesktopByNumber(9)

توجه داشته باشید که وقتی از نماد به جای کلمه استفاده می کنید، نباید از “&” در نحو اسکریپت استفاده کنید. این قانون یکی از قوانین خاصی است که AutoHotkey در زبان برنامه نویسی خود استفاده می کند.

0
0