ساخت یک ویدجت کاربردی در ویندوز ۱۱

قبل از هرچیز باید بگم چرا اصلا این ویدجت رو لازم دارم. من چند ویندزو مختلف دارم که هرکدوم کاربرد مختلفی دارند و همه البته روی یک سیستم بالا میان. برا یهمین لازم دونستم که به نوع یبه خودم توضیح بدم اینها هر کدوم چی هست. نکته مهم اینکه من بصورت دستی یک واتر مارک برای هر سیستمم ایجاد میکردم حالا با کمک هوش مصنوعی تونستم فایل زیر و اماده کنم تا اطلاعاتیکه میخوام رو توی سیستم نمایش بده. الان حتی میتونم اگه چیز دیگه ای هم لازم بود بهش اضافه کنم.
توی ویندزو ۱۱ لازم است ابتدا Power Shell رو ابتدا به صورت Run As Administrator باز کنید و دستور زیر رو اجرا کنید.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
در ادامه با هر ویرایش گر متنی که دارید میتونید فایل زیر رو ایجاد کنید:
# System Info Overlay Widget for Windows 11
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
# Get system info
$os = Get-CimInstance Win32_OperatingSystem
$winVersion = "$($os.Caption) $($os.Version)"
$winBuild = $os.BuildNumber
$computerName = $env:COMPUTERNAME
# === 2. Get Active IP Addresses (LAN & Wi-Fi) ===
$ips = @()
$adapters = Get-NetAdapter | Where-Object { $_.Status -eq 'Up' -and $_.InterfaceDescription -notlike "*Loopback*" }
foreach ($adapter in $adapters) {
$ipConfig = Get-NetIPAddress -InterfaceIndex $adapter.InterfaceIndex -AddressFamily IPv4 -ErrorAction SilentlyContinue
if ($ipConfig) {
$ips += "$($adapter.Name): $($ipConfig.IPAddress)"
}
}
$ipText = if ($ips.Count -gt 0) { ($ips -join "`n") } else { "No active network" }
# Create form (widget window)
$form = New-Object System.Windows.Forms.Form
$form.Text = "System Info"
$form.Size = New-Object System.Drawing.Size(340, 180)
$form.StartPosition = "Manual"
# --- SAFE POSITIONING IN BOTTOM-RIGHT ---
try {
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.WorkingArea
# Force integers
$screenWidth = [int]$screen.Width
$screenHeight = [int]$screen.Height
$formWidth = [int]$form.ClientSize.Width
$formHeight = [int]$form.ClientSize.Height
$x = $screenWidth - $formWidth - 40
$y = $screenHeight - $formHeight - 20
# Ensure non-negative
$x = [Math]::Max(0, $x)
$y = [Math]::Max(0, $y)
$form.StartPosition = 'Manual'
$form.Location = New-Object System.Drawing.Point($x, $y)
} catch {
# Fallback to default location if screen info fails
$form.StartPosition = 'CenterScreen'
}
#$form.Location = New-Object System.Drawing.Point(20, 20) # Top-left corner
# Remove always-on-top
$form.TopMost = $false
# Transparent background (black = transparent)
$form.FormBorderStyle = 'None'
$form.ShowInTaskbar = $false
$form.Opacity = 0.92
$form.BackColor = [System.Drawing.Color]::Black
$form.TransparencyKey = [System.Drawing.Color]::Black
# === 4. Create Label ===
$label = New-Object System.Windows.Forms.Label
$label.ForeColor = [System.Drawing.Color]::White
$label.Font = New-Object System.Drawing.Font("Segoe UI", 14)
$label.AutoSize = $false
$label.Size = $form.ClientSize
$label.TextAlign = "MiddleLeft"
#$label.Padding = New-Object System.Windows.Forms.Padding(10, 0, 0, 0) # Left padding for readability
$label.Text = "$winVersion `nPC: $computerName `n$ipText"
# Add label to form
$form.Controls.Add($label)
# Make it click-through (optional)
$form.TopMost = $false
$form.Show()
$form.Focus()
# Keep the window alive
while ($form.Created) {
[System.Windows.Forms.Application]::DoEvents()
Start-Sleep -Milliseconds 100
}
این فایل رو با نام دلخوام و پسوند ps1 ذخیره کنید. خوب فایل ما آماده شد. برای تست کردن روی اون راست کلیک کنید و Run with PowerShell رو بزنید. باید ویدجت شما بالا بیاد.
حالا میخوایم همین رو کاری کنیم با بالا اومدن ویندوز خودش بالا بیاد و لازم نباشه هر بار به صورت دستی بازش کنیم. برای این کار مسیر زیر رو برید:
1- Press `Win + R` , type `shell:startup`, hit enter.
2- Right-click → New → Shortcut
3- location:
-- powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Path\To\SystemInfoWidget.ps1"
4- Name it (e.g., "SysInfo Widget").
راه دیگه ای که داریم هم اینکه یک فایل با پسوند vbs بسازید و متن زیر رو توش کپی کنید:
CreateObject("Wscript.Shell").Run "powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -File ""F:\SystemInfoWidget.ps1""", 0, False
حالا برای این فایل جدید در shell:startup یک میانبر با ادرس زیر بسازید:
wscript.exe "F:\RunWidget.vbs"



