ফোকাস-ফলোস-মাউস ("অ্যাক্টিভ উইন্ডো ট্র্যাকিং") সক্ষম করার জন্য উইন্ডোজটির আসলে একটি পতাকা রয়েছে, যা রাক্ষস "সিস্টেমপ্যারামিটারসআইএনফো" উইন 32 এপিআই কলের মাধ্যমে সহজেই সক্ষম করা যায় । পতাকাটি সক্ষম করতে তৃতীয় পক্ষের প্রোগ্রাম রয়েছে যেমন এক্স-মাউস নিয়ন্ত্রণগুলি , বা আপনি পাওয়ারশেল ব্যবহার করে সরাসরি কলটি সম্পাদন করতে পারেন।
pvParam
যুক্তিটি কীভাবে ব্যবহৃত হয় সে সম্পর্কে ডকুমেন্টেশন সবসময়ই পরিষ্কার থাকে না এবং এই নির্দিষ্ট পতাকাটি সেট করার সময় কিছু পাওয়ারশেল স্নিপেট ভুলভাবে একটি মানকে পয়েন্টার দিয়ে দেয়, এটি সর্বদা হিসাবে ব্যাখ্যা করা শেষ হয় true
, অর্থাত্ তারা দুর্ঘটনাক্রমে পতাকাটি সক্ষম করার জন্য কাজ করে, তবে এটি আবার অক্ষম করার জন্য নয়।
নীচে একটি পাওয়ারশেল স্নিপেট রয়েছে যা কলটি সঠিকভাবে সম্পাদন করে। এটিতে যথাযথ ত্রুটি-যাচাইও অন্তর্ভুক্ত রয়েছে এবং আমি বংশবৃদ্ধির চেয়ে পরিষ্কার-পরিচ্ছন্নতার দিকে যাওয়ার চেষ্টা করেছি, এর অন্যান্য কার্যকারিতার জন্য মোড়ক যুক্ত করা আরও সহজ করার জন্য SystemParametersInfo
, আপনার আগ্রহী কিছু খুঁজে পাওয়া উচিত।
এই জাতীয় স্টাফগুলির জন্য সহায়ক সহায়তার জন্য পিনভোকনেটনে চিৎকার করুন ।
Add-Type -TypeDefinition @'
using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
public static class Spi {
[System.FlagsAttribute]
private enum Flags : uint {
None = 0x0,
UpdateIniFile = 0x1,
SendChange = 0x2,
}
[DllImport("user32.dll", SetLastError = true)]
private static extern bool SystemParametersInfo(
uint uiAction, uint uiParam, UIntPtr pvParam, Flags flags );
[DllImport("user32.dll", SetLastError = true)]
private static extern bool SystemParametersInfo(
uint uiAction, uint uiParam, out bool pvParam, Flags flags );
private static void check( bool ok ) {
if( ! ok )
throw new Win32Exception( Marshal.GetLastWin32Error() );
}
private static UIntPtr ToUIntPtr( this bool value ) {
return new UIntPtr( value ? 1u : 0u );
}
public static bool GetActiveWindowTracking() {
bool enabled;
check( SystemParametersInfo( 0x1000, 0, out enabled, Flags.None ) );
return enabled;
}
public static void SetActiveWindowTracking( bool enabled ) {
// note: pvParam contains the boolean (cast to void*), not a pointer to it!
check( SystemParametersInfo( 0x1001, 0, enabled.ToUIntPtr(), Flags.SendChange ) );
}
}
'@
# check if mouse-focus is enabled
[Spi]::GetActiveWindowTracking()
# disable mouse-focus (default)
[Spi]::SetActiveWindowTracking( $false )
# enable mouse-focus
[Spi]::SetActiveWindowTracking( $true )