דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. מחשבים וטכנולוגיה
  3. עזרה הדדית - מחשבים וטכנולוגיה
  4. להורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה

להורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה

מתוזמן נעוץ נעול הועבר עזרה הדדית - מחשבים וטכנולוגיה
13 פוסטים 7 כותבים 254 צפיות 9 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • יאיר דניאלי יאיר דניאל

    יצרתי תוכנה קטנה ששומרת על כך שהמסך לא יכבה בעת שימוש בתוכנות מסויימות - לפי הגדרה אישית שלכם.

    הנה "נר תמיד" - תוכנה קטנה ממש (GPT ּ ג'מיני), שרצה ברקע ושומרת שבעת עבודה על אוצריא/זית/כרום ועוד רשימה של תוכנות, או כל תוכנה אחרת שתוסיפו לרשימה - המסך לא יכבה.

    • היא נמצאת במגש, ואפשר בכל רגע נתון לכבות ולסגור אותה משם, או ממנהל המשימות.

    בכבוד!
    a6a7e6a5-e8c7-409d-984d-b6ece598f66c.jpg

    NerTamid.exe

    • התוכנה מזהה אם אוצריא לדוגמא, פתוח ברקע, אם כן - המסך לא נכבה בכלל, אם לא - המסך עובד כרגיל.
    • יש אפשרות להפעיל ולכבות את התוכנה, גם בלי לסגור אותה.
    • יש אפשרות שהתוכנה תפעל עם עליית המחשב - באופן אוטומטי.
    • יש בועת מידע אם התוכנה מופעלת/נכבית - בכדי שתדעו בדיוק מה הסטטוס שלה.
    • התוכנה רצה ברקע, ופועלת משורת המשימות.

    אשמח להערות!

    תמונות בספויילר


    aa05266f-c4e6-498d-85e7-8097654370ac-image.png
    c65f7843-6cf9-44cb-9bf2-195cc36c9b40-image.png

    857ea6e7-65ac-4e05-8080-ff7ba045b66d-image.png
    509a78b7-ba0a-442d-8df6-428c25f639c2-image.png
    e7ddf3b0-f8b3-41c3-a4c9-54a0d29fc0ac-image.png
    3c7dca3f-f056-48d3-bcd5-99d899a98a24-image.png
    d521c59f-a96c-4339-bce0-7875cbe3ee20-image.png
    31d46c39-1e25-4e9e-ad8f-f39beaaf4247-image.png

    הנה הקוד בפאוורשיל - למי שרוצה לעבור עליו:

    # התחלה שקטה ונקייה - ביטול כל הפלט המיותר
    $ErrorActionPreference = 'SilentlyContinue'
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
    [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
    
    # בדיקה שהתוכנה לא רצה כבר
    if ((Get-Process -Name ([System.Diagnostics.Process]::GetCurrentProcess().Name) -ErrorAction SilentlyContinue).Count -gt 1) { exit }
    
    # הגדרת Registry (במקום קבצים)
    $RegKey = "HKCU:\Software\NerTamid"
    if (!(Test-Path $RegKey)) { [void](New-Item $RegKey -Force) }
    
    # API
    $sig = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);'
    $win32 = Add-Type -MemberDefinition $sig -Name "Win32Sleep" -Namespace "Win32" -PassThru
    
    # --- טעינת נתונים ---
    # 1. רשימת ברירת מחדל (תמיד תופיע)
    $script:AvailableApps = [ordered]@{ 
        "אוצריא"="otzaria"; "זית"="Zayit"; "פרויקט השות"="Responsa"; 
        "אוצר החכמה"="Otzar"; "תורת אמת"="ToratEmet"; "מאגר DBS"="DBS"; 
        "Word"="WINWORD"; "Excel"="EXCEL"; "PowerPoint"="POWERPNT"; 
        "Chrome"="chrome"; "Edge"="msedge"; "Zoom"="Zoom" 
    }
    
    # 2. טעינת תוכנות אישיות שהמשתמש הוסיף בעבר מה-Registry
    $customStored = (Get-ItemProperty $RegKey -Name "CustomApps" -ErrorAction SilentlyContinue).CustomApps
    if ($customStored) {
        foreach ($pair in ($customStored -split ",")) {
            if ($pair -match "=") {
                $k,$v = $pair -split "="
                if (-not $script:AvailableApps.Contains($k)) { $script:AvailableApps[$k] = $v }
            }
        }
    }
    
    # 3. טעינת הבחירות של המשתמש
    $script:SelectedProcesses = (Get-ItemProperty $RegKey -Name "Selected" -ErrorAction SilentlyContinue).Selected -split ","
    $script:ManualOverride = $true
    
    # אייקון ראשי
    $ExePath = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName
    try { $script:MainIcon = [System.Drawing.Icon]::ExtractAssociatedIcon($ExePath) } catch { $script:MainIcon = [System.Drawing.SystemIcons]::Application }
    $notifyIcon = New-Object System.Windows.Forms.NotifyIcon -Property @{Icon=$script:MainIcon; Visible=$true; Text="נר תמיד"}
    
    function Show-Toast ($title, $msg) { 
        $notifyIcon.ShowBalloonTip(3000, $title, $msg, [System.Windows.Forms.ToolTipIcon]::Info) 
    }
    
    # פונקציית הליבה
    function Update-SleepState ($showMsg = $false) {
        $AnyRunning = $false
        
        # בדיקת תוכנות ועדכון אייקונים בזיכרון
        foreach ($appName in $script:AvailableApps.Keys) {
            $pName = $script:AvailableApps[$appName]
            
            # האם התוכנה רצה כרגע?
            $p = Get-Process -Name "$pName*" -ErrorAction SilentlyContinue | Select -First 1
            
            if ($p) {
                # אם היא רצה והמשתמש בחר בה - נמנע כיבוי
                if ($script:SelectedProcesses -contains $pName) { $AnyRunning = $true }
                
                # "לכידת" האייקון ושמירתו ב-Registry אם טרם נשמר
                if (!(Get-ItemProperty $RegKey -Name "Icon_$pName" -ErrorAction SilentlyContinue)) {
                    try {
                        $ms = New-Object System.IO.MemoryStream
                        [System.Drawing.Icon]::ExtractAssociatedIcon($p.MainModule.FileName).ToBitmap().Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
                        [void](Set-ItemProperty $RegKey -Name "Icon_$pName" -Value ([Convert]::ToBase64String($ms.ToArray())))
                    } catch {}
                }
            }
        }
        
        # קביעת מצב השינה
        $flags = if ($script:ManualOverride -and $AnyRunning) { [uint32]0x80000003 } else { [uint32]0x80000000 }
        [void][Win32.Win32Sleep]::SetThreadExecutionState($flags)
        
        # הצגת הודעה רק אם התבקשה (למשל בלחיצה ידנית)
        if ($showMsg) { 
            $status = if ($script:ManualOverride) { "מופעלת" } else { "מושבתת" }
            Show-Toast "נר תמיד" "מניעת כיבוי $status"
        }
    }
    
    # חלון אודות - כולל קישור
    function Show-About {
        $a = New-Object System.Windows.Forms.Form -Property @{Text="אודות"; Size="350,180"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterParent"; Icon=$script:MainIcon; FormBorderStyle="FixedDialog"; MaximizeBox=$false}
        
        $l = New-Object System.Windows.Forms.Label -Property @{Text="פותח על ידי יאיר דניאל מפורום מתמחים טופ"; AutoSize=$true; Location="30,30"}
        
        $lnk = New-Object System.Windows.Forms.LinkLabel -Property @{Text="למעבר לפרופיל המפתח לחץ כאן"; AutoSize=$true; Location="30,70"}
        $lnk.Add_Click({ [System.Diagnostics.Process]::Start("https://mitmachim.top/user/%D7%99%D7%90%D7%99%D7%A8-%D7%93%D7%A0%D7%99%D7%90%D7%9C") })
        
        $a.Controls.AddRange(@($l, $lnk))
        $a.ShowDialog()
    }
    
    # חלון הגדרות
    function Show-Settings {
        $s = New-Object System.Windows.Forms.Form -Property @{Text="הגדרות"; Size="300,250"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
        
        $chk = New-Object System.Windows.Forms.CheckBox -Property @{Text="הפעל עם עליית המחשב"; Location="30,30"; AutoSize=$true; Checked=(Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -ErrorAction SilentlyContinue)}
        
        $btnA = New-Object System.Windows.Forms.Button -Property @{Text="אודות"; Location="30,70"; Size="220,35"}
        $btnA.Add_Click({ Show-About })
        
        $btnS = New-Object System.Windows.Forms.Button -Property @{Text="שמור וסגור"; Location="30,120"; Size="220,50"}
        $btnS.Add_Click({ 
            if($chk.Checked){ [void](Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -Value $ExePath) }
            else{ [void](Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid") }
            $s.Close() 
        })
        
        $s.Controls.AddRange(@($chk, $btnA, $btnS)); $s.ShowDialog()
    }
    
    # חלון ניהול תוכנות
    function Show-AppSelection {
        $f = New-Object System.Windows.Forms.Form -Property @{Text="ניהול תוכנות"; Size="380,600"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
        
        $lv = New-Object System.Windows.Forms.ListView -Property @{View="Details"; CheckBoxes=$true; FullRowSelect=$true; Size="340,350"; Location="15,15"; SmallImageList=(New-Object System.Windows.Forms.ImageList -Property @{ImageSize="24,24"; ColorDepth="Depth32Bit"})}
        $lv.Columns.Add("שם התוכנה", 280) | Out-Null
        
        # מילוי הרשימה וטעינת אייקונים מה-Registry
        foreach ($name in $script:AvailableApps.Keys) {
            $p = $script:AvailableApps[$name]
            $item = New-Object System.Windows.Forms.ListViewItem($name)
            $item.Tag = $p
            $item.Checked = ($script:SelectedProcesses -contains $p)
            
            # שליפת אייקון שמור
            $b64 = (Get-ItemProperty $RegKey -Name "Icon_$p" -ErrorAction SilentlyContinue)."Icon_$p"
            if ($b64) { 
                try {
                    $bytes = [Convert]::FromBase64String($b64)
                    $ms = New-Object System.IO.MemoryStream(,$bytes)
                    $lv.SmallImageList.Images.Add([System.Drawing.Image]::FromStream($ms))
                    $item.ImageIndex = $lv.SmallImageList.Images.Count - 1
                } catch {}
            }
            [void]$lv.Items.Add($item)
        }
        
        # כפתור הוספה
        $btnAdd = New-Object System.Windows.Forms.Button -Property @{Text="➕ הוסף תוכנה ידנית"; Location="15,380"; Size="340,40"}
        $btnAdd.Add_Click({
            $n = [Microsoft.VisualBasic.Interaction]::InputBox("שם התוכנה להצגה:", "הוספה")
            if ($n) {
                $h = "איך מוצאים שם תהליך?`n1. פתח את התוכנה שרצית.`n2. פתח מנהל משימות (Ctrl+Shift+Esc)`n3. בלשונית 'פרטים' העתק את השם בלי ה- .exe"
                $p = [Microsoft.VisualBasic.Interaction]::InputBox($h, "הזן שם תהליך (למשל: WINWORD)", $n)
                
                if ($p) { 
                    # הוספה לרשימה הנוכחית ול-Registry
                    $script:AvailableApps[$n]=$p
                    
                    # שמירת רשימת ה-Custom ל-Registry כדי שתופיע בפעם הבאה
                    $customList = New-Object System.Collections.Generic.List[string]
                    foreach ($k in $script:AvailableApps.Keys) {
                        # אם זו לא תוכנת ברירת מחדל, נשמור אותה
                        if (-not ("אוצריא","זית","פרויקט השות","אוצר החכמה","תורת אמת","מאגר DBS","Word","Excel","PowerPoint","Chrome","Edge","Zoom" -contains $k)) {
                            $customList.Add("$k=$($script:AvailableApps[$k])") 
                        }
                    }
                    [void](Set-ItemProperty $RegKey -Name "CustomApps" -Value ($customList -join ","))
                    
                    $f.Close(); Show-AppSelection # רענון
                }
            }
        })
        
        $btnSave = New-Object System.Windows.Forms.Button -Property @{Text="שמור שינויים"; Location="15,440"; Size="340,50"}
        $btnSave.Add_Click({
            $sel = New-Object System.Collections.Generic.List[string]
            foreach($i in $lv.CheckedItems){$sel.Add($i.Tag)}
            $script:SelectedProcesses = $sel
            [void](Set-ItemProperty $RegKey -Name "Selected" -Value ($script:SelectedProcesses -join ","))
            Update-SleepState
            Show-Toast "נר תמיד" "השינויים נשמרו בהצלחה"
            $f.Close()
        })
        
        $f.Controls.AddRange(@($lv, $btnAdd, $btnSave))
        $f.ShowDialog()
    }
    
    # תפריט קליק ימני
    $menu = New-Object System.Windows.Forms.ContextMenu
    $mToggle = New-Object System.Windows.Forms.MenuItem("מניעת כיבוי פעילה", { 
        $script:ManualOverride = -not $script:ManualOverride
        $this.Checked = $script:ManualOverride
        # כאן הפעלנו את ה-ShowMsg = True
        Update-SleepState $true 
    })
    $mToggle.Checked = $true
    
    $mApps = New-Object System.Windows.Forms.MenuItem("ניהול תוכנות", { Show-AppSelection })
    $mSettings = New-Object System.Windows.Forms.MenuItem("הגדרות", { Show-Settings })
    $mExit = New-Object System.Windows.Forms.MenuItem("יציאה", { $notifyIcon.Visible=$false; [System.Windows.Forms.Application]::Exit(); Stop-Process -Id $PID -Force })
    
    $menu.MenuItems.AddRange(@($mToggle, $mApps, $mSettings, $mExit))
    $notifyIcon.ContextMenu = $menu
    
    # טיימר
    $timer = New-Object System.Windows.Forms.Timer -Property @{Interval = 30000}
    $timer.Add_Tick({ Update-SleepState })
    $timer.Start()
    
    # הודעת פתיחה
    Show-Toast "נר תמיד" "הלימוד שלך לא נעצר. גם המסך לא נכבה."
    Update-SleepState
    [System.Windows.Forms.Application]::Run()
    

    יש לתוכנה שני גירסאות קודמות - אם זה מעניין מישהו...

    גירסה ראשונה:
    אוצריא - שומר מסך
    שומר מסך - מיועד לתוכנת אוצריא בלבד.
    309e238d-1cb9-48eb-948e-ee02a085832f.jpg
    אוצריא שומר מסך.exe

    גירסה שניה:
    נר תמיד - שומר מסך לאוצריא וזית
    תוכנה לשמירת המסך בעת שימוש בתוכנות אוצריא וזית
    b5fbe287-d27b-43ed-bcc4-69a801805bbf (2).jpg
    nertamid.exe

    ה מנותק
    ה מנותק
    הרוששיבע
    כתב נערך לאחרונה על ידי
    #2

    @יאיר-דניאל
    נפלא. יישר כח.
    א. אגב, זה לא זולל סוללה ברקע?
    ב. הייתי שמח לרעיון לפיצ'ר שייתן אופציה בקלות לבטל כיבוי מסך ומצב שינה ולהפעיל בכפתור פשוט.

    יאיר דניאלי תגובה 1 תגובה אחרונה
    0
    • ה הרוששיבע

      @יאיר-דניאל
      נפלא. יישר כח.
      א. אגב, זה לא זולל סוללה ברקע?
      ב. הייתי שמח לרעיון לפיצ'ר שייתן אופציה בקלות לבטל כיבוי מסך ומצב שינה ולהפעיל בכפתור פשוט.

      יאיר דניאלי מנותק
      יאיר דניאלי מנותק
      יאיר דניאל
      כתב נערך לאחרונה על ידי
      #3

      @הרוששיבע כתב בלהורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה:

      א. אגב, זה לא זולל סוללה ברקע?

      לפי בדיקה שלי - ממש לא, זה בקושי לוקח.

      תגובה 1 תגובה אחרונה
      1
      • יאיר דניאלי יאיר דניאל

        יצרתי תוכנה קטנה ששומרת על כך שהמסך לא יכבה בעת שימוש בתוכנות מסויימות - לפי הגדרה אישית שלכם.

        הנה "נר תמיד" - תוכנה קטנה ממש (GPT ּ ג'מיני), שרצה ברקע ושומרת שבעת עבודה על אוצריא/זית/כרום ועוד רשימה של תוכנות, או כל תוכנה אחרת שתוסיפו לרשימה - המסך לא יכבה.

        • היא נמצאת במגש, ואפשר בכל רגע נתון לכבות ולסגור אותה משם, או ממנהל המשימות.

        בכבוד!
        a6a7e6a5-e8c7-409d-984d-b6ece598f66c.jpg

        NerTamid.exe

        • התוכנה מזהה אם אוצריא לדוגמא, פתוח ברקע, אם כן - המסך לא נכבה בכלל, אם לא - המסך עובד כרגיל.
        • יש אפשרות להפעיל ולכבות את התוכנה, גם בלי לסגור אותה.
        • יש אפשרות שהתוכנה תפעל עם עליית המחשב - באופן אוטומטי.
        • יש בועת מידע אם התוכנה מופעלת/נכבית - בכדי שתדעו בדיוק מה הסטטוס שלה.
        • התוכנה רצה ברקע, ופועלת משורת המשימות.

        אשמח להערות!

        תמונות בספויילר


        aa05266f-c4e6-498d-85e7-8097654370ac-image.png
        c65f7843-6cf9-44cb-9bf2-195cc36c9b40-image.png

        857ea6e7-65ac-4e05-8080-ff7ba045b66d-image.png
        509a78b7-ba0a-442d-8df6-428c25f639c2-image.png
        e7ddf3b0-f8b3-41c3-a4c9-54a0d29fc0ac-image.png
        3c7dca3f-f056-48d3-bcd5-99d899a98a24-image.png
        d521c59f-a96c-4339-bce0-7875cbe3ee20-image.png
        31d46c39-1e25-4e9e-ad8f-f39beaaf4247-image.png

        הנה הקוד בפאוורשיל - למי שרוצה לעבור עליו:

        # התחלה שקטה ונקייה - ביטול כל הפלט המיותר
        $ErrorActionPreference = 'SilentlyContinue'
        [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
        [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
        [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
        
        # בדיקה שהתוכנה לא רצה כבר
        if ((Get-Process -Name ([System.Diagnostics.Process]::GetCurrentProcess().Name) -ErrorAction SilentlyContinue).Count -gt 1) { exit }
        
        # הגדרת Registry (במקום קבצים)
        $RegKey = "HKCU:\Software\NerTamid"
        if (!(Test-Path $RegKey)) { [void](New-Item $RegKey -Force) }
        
        # API
        $sig = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);'
        $win32 = Add-Type -MemberDefinition $sig -Name "Win32Sleep" -Namespace "Win32" -PassThru
        
        # --- טעינת נתונים ---
        # 1. רשימת ברירת מחדל (תמיד תופיע)
        $script:AvailableApps = [ordered]@{ 
            "אוצריא"="otzaria"; "זית"="Zayit"; "פרויקט השות"="Responsa"; 
            "אוצר החכמה"="Otzar"; "תורת אמת"="ToratEmet"; "מאגר DBS"="DBS"; 
            "Word"="WINWORD"; "Excel"="EXCEL"; "PowerPoint"="POWERPNT"; 
            "Chrome"="chrome"; "Edge"="msedge"; "Zoom"="Zoom" 
        }
        
        # 2. טעינת תוכנות אישיות שהמשתמש הוסיף בעבר מה-Registry
        $customStored = (Get-ItemProperty $RegKey -Name "CustomApps" -ErrorAction SilentlyContinue).CustomApps
        if ($customStored) {
            foreach ($pair in ($customStored -split ",")) {
                if ($pair -match "=") {
                    $k,$v = $pair -split "="
                    if (-not $script:AvailableApps.Contains($k)) { $script:AvailableApps[$k] = $v }
                }
            }
        }
        
        # 3. טעינת הבחירות של המשתמש
        $script:SelectedProcesses = (Get-ItemProperty $RegKey -Name "Selected" -ErrorAction SilentlyContinue).Selected -split ","
        $script:ManualOverride = $true
        
        # אייקון ראשי
        $ExePath = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName
        try { $script:MainIcon = [System.Drawing.Icon]::ExtractAssociatedIcon($ExePath) } catch { $script:MainIcon = [System.Drawing.SystemIcons]::Application }
        $notifyIcon = New-Object System.Windows.Forms.NotifyIcon -Property @{Icon=$script:MainIcon; Visible=$true; Text="נר תמיד"}
        
        function Show-Toast ($title, $msg) { 
            $notifyIcon.ShowBalloonTip(3000, $title, $msg, [System.Windows.Forms.ToolTipIcon]::Info) 
        }
        
        # פונקציית הליבה
        function Update-SleepState ($showMsg = $false) {
            $AnyRunning = $false
            
            # בדיקת תוכנות ועדכון אייקונים בזיכרון
            foreach ($appName in $script:AvailableApps.Keys) {
                $pName = $script:AvailableApps[$appName]
                
                # האם התוכנה רצה כרגע?
                $p = Get-Process -Name "$pName*" -ErrorAction SilentlyContinue | Select -First 1
                
                if ($p) {
                    # אם היא רצה והמשתמש בחר בה - נמנע כיבוי
                    if ($script:SelectedProcesses -contains $pName) { $AnyRunning = $true }
                    
                    # "לכידת" האייקון ושמירתו ב-Registry אם טרם נשמר
                    if (!(Get-ItemProperty $RegKey -Name "Icon_$pName" -ErrorAction SilentlyContinue)) {
                        try {
                            $ms = New-Object System.IO.MemoryStream
                            [System.Drawing.Icon]::ExtractAssociatedIcon($p.MainModule.FileName).ToBitmap().Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
                            [void](Set-ItemProperty $RegKey -Name "Icon_$pName" -Value ([Convert]::ToBase64String($ms.ToArray())))
                        } catch {}
                    }
                }
            }
            
            # קביעת מצב השינה
            $flags = if ($script:ManualOverride -and $AnyRunning) { [uint32]0x80000003 } else { [uint32]0x80000000 }
            [void][Win32.Win32Sleep]::SetThreadExecutionState($flags)
            
            # הצגת הודעה רק אם התבקשה (למשל בלחיצה ידנית)
            if ($showMsg) { 
                $status = if ($script:ManualOverride) { "מופעלת" } else { "מושבתת" }
                Show-Toast "נר תמיד" "מניעת כיבוי $status"
            }
        }
        
        # חלון אודות - כולל קישור
        function Show-About {
            $a = New-Object System.Windows.Forms.Form -Property @{Text="אודות"; Size="350,180"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterParent"; Icon=$script:MainIcon; FormBorderStyle="FixedDialog"; MaximizeBox=$false}
            
            $l = New-Object System.Windows.Forms.Label -Property @{Text="פותח על ידי יאיר דניאל מפורום מתמחים טופ"; AutoSize=$true; Location="30,30"}
            
            $lnk = New-Object System.Windows.Forms.LinkLabel -Property @{Text="למעבר לפרופיל המפתח לחץ כאן"; AutoSize=$true; Location="30,70"}
            $lnk.Add_Click({ [System.Diagnostics.Process]::Start("https://mitmachim.top/user/%D7%99%D7%90%D7%99%D7%A8-%D7%93%D7%A0%D7%99%D7%90%D7%9C") })
            
            $a.Controls.AddRange(@($l, $lnk))
            $a.ShowDialog()
        }
        
        # חלון הגדרות
        function Show-Settings {
            $s = New-Object System.Windows.Forms.Form -Property @{Text="הגדרות"; Size="300,250"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
            
            $chk = New-Object System.Windows.Forms.CheckBox -Property @{Text="הפעל עם עליית המחשב"; Location="30,30"; AutoSize=$true; Checked=(Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -ErrorAction SilentlyContinue)}
            
            $btnA = New-Object System.Windows.Forms.Button -Property @{Text="אודות"; Location="30,70"; Size="220,35"}
            $btnA.Add_Click({ Show-About })
            
            $btnS = New-Object System.Windows.Forms.Button -Property @{Text="שמור וסגור"; Location="30,120"; Size="220,50"}
            $btnS.Add_Click({ 
                if($chk.Checked){ [void](Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -Value $ExePath) }
                else{ [void](Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid") }
                $s.Close() 
            })
            
            $s.Controls.AddRange(@($chk, $btnA, $btnS)); $s.ShowDialog()
        }
        
        # חלון ניהול תוכנות
        function Show-AppSelection {
            $f = New-Object System.Windows.Forms.Form -Property @{Text="ניהול תוכנות"; Size="380,600"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
            
            $lv = New-Object System.Windows.Forms.ListView -Property @{View="Details"; CheckBoxes=$true; FullRowSelect=$true; Size="340,350"; Location="15,15"; SmallImageList=(New-Object System.Windows.Forms.ImageList -Property @{ImageSize="24,24"; ColorDepth="Depth32Bit"})}
            $lv.Columns.Add("שם התוכנה", 280) | Out-Null
            
            # מילוי הרשימה וטעינת אייקונים מה-Registry
            foreach ($name in $script:AvailableApps.Keys) {
                $p = $script:AvailableApps[$name]
                $item = New-Object System.Windows.Forms.ListViewItem($name)
                $item.Tag = $p
                $item.Checked = ($script:SelectedProcesses -contains $p)
                
                # שליפת אייקון שמור
                $b64 = (Get-ItemProperty $RegKey -Name "Icon_$p" -ErrorAction SilentlyContinue)."Icon_$p"
                if ($b64) { 
                    try {
                        $bytes = [Convert]::FromBase64String($b64)
                        $ms = New-Object System.IO.MemoryStream(,$bytes)
                        $lv.SmallImageList.Images.Add([System.Drawing.Image]::FromStream($ms))
                        $item.ImageIndex = $lv.SmallImageList.Images.Count - 1
                    } catch {}
                }
                [void]$lv.Items.Add($item)
            }
            
            # כפתור הוספה
            $btnAdd = New-Object System.Windows.Forms.Button -Property @{Text="➕ הוסף תוכנה ידנית"; Location="15,380"; Size="340,40"}
            $btnAdd.Add_Click({
                $n = [Microsoft.VisualBasic.Interaction]::InputBox("שם התוכנה להצגה:", "הוספה")
                if ($n) {
                    $h = "איך מוצאים שם תהליך?`n1. פתח את התוכנה שרצית.`n2. פתח מנהל משימות (Ctrl+Shift+Esc)`n3. בלשונית 'פרטים' העתק את השם בלי ה- .exe"
                    $p = [Microsoft.VisualBasic.Interaction]::InputBox($h, "הזן שם תהליך (למשל: WINWORD)", $n)
                    
                    if ($p) { 
                        # הוספה לרשימה הנוכחית ול-Registry
                        $script:AvailableApps[$n]=$p
                        
                        # שמירת רשימת ה-Custom ל-Registry כדי שתופיע בפעם הבאה
                        $customList = New-Object System.Collections.Generic.List[string]
                        foreach ($k in $script:AvailableApps.Keys) {
                            # אם זו לא תוכנת ברירת מחדל, נשמור אותה
                            if (-not ("אוצריא","זית","פרויקט השות","אוצר החכמה","תורת אמת","מאגר DBS","Word","Excel","PowerPoint","Chrome","Edge","Zoom" -contains $k)) {
                                $customList.Add("$k=$($script:AvailableApps[$k])") 
                            }
                        }
                        [void](Set-ItemProperty $RegKey -Name "CustomApps" -Value ($customList -join ","))
                        
                        $f.Close(); Show-AppSelection # רענון
                    }
                }
            })
            
            $btnSave = New-Object System.Windows.Forms.Button -Property @{Text="שמור שינויים"; Location="15,440"; Size="340,50"}
            $btnSave.Add_Click({
                $sel = New-Object System.Collections.Generic.List[string]
                foreach($i in $lv.CheckedItems){$sel.Add($i.Tag)}
                $script:SelectedProcesses = $sel
                [void](Set-ItemProperty $RegKey -Name "Selected" -Value ($script:SelectedProcesses -join ","))
                Update-SleepState
                Show-Toast "נר תמיד" "השינויים נשמרו בהצלחה"
                $f.Close()
            })
            
            $f.Controls.AddRange(@($lv, $btnAdd, $btnSave))
            $f.ShowDialog()
        }
        
        # תפריט קליק ימני
        $menu = New-Object System.Windows.Forms.ContextMenu
        $mToggle = New-Object System.Windows.Forms.MenuItem("מניעת כיבוי פעילה", { 
            $script:ManualOverride = -not $script:ManualOverride
            $this.Checked = $script:ManualOverride
            # כאן הפעלנו את ה-ShowMsg = True
            Update-SleepState $true 
        })
        $mToggle.Checked = $true
        
        $mApps = New-Object System.Windows.Forms.MenuItem("ניהול תוכנות", { Show-AppSelection })
        $mSettings = New-Object System.Windows.Forms.MenuItem("הגדרות", { Show-Settings })
        $mExit = New-Object System.Windows.Forms.MenuItem("יציאה", { $notifyIcon.Visible=$false; [System.Windows.Forms.Application]::Exit(); Stop-Process -Id $PID -Force })
        
        $menu.MenuItems.AddRange(@($mToggle, $mApps, $mSettings, $mExit))
        $notifyIcon.ContextMenu = $menu
        
        # טיימר
        $timer = New-Object System.Windows.Forms.Timer -Property @{Interval = 30000}
        $timer.Add_Tick({ Update-SleepState })
        $timer.Start()
        
        # הודעת פתיחה
        Show-Toast "נר תמיד" "הלימוד שלך לא נעצר. גם המסך לא נכבה."
        Update-SleepState
        [System.Windows.Forms.Application]::Run()
        

        יש לתוכנה שני גירסאות קודמות - אם זה מעניין מישהו...

        גירסה ראשונה:
        אוצריא - שומר מסך
        שומר מסך - מיועד לתוכנת אוצריא בלבד.
        309e238d-1cb9-48eb-948e-ee02a085832f.jpg
        אוצריא שומר מסך.exe

        גירסה שניה:
        נר תמיד - שומר מסך לאוצריא וזית
        תוכנה לשמירת המסך בעת שימוש בתוכנות אוצריא וזית
        b5fbe287-d27b-43ed-bcc4-69a801805bbf (2).jpg
        nertamid.exe

        cfopuserC מנותק
        cfopuserC מנותק
        cfopuser
        כתב נערך לאחרונה על ידי
        #4

        @יאיר-דניאל תוכנה חמודה בהחלט.

        רק אומר שקיים פיצ'ר כזה בpowertoys בשם awake
        שמאפשר לבחור להשאיר את המחשב דולק לתמיד לזמן מסוים ועוד.
        (סמל של כוס קפה שמופיע בשורת המשימות למי שתוהה)

        ה צ 2 תגובות תגובה אחרונה
        3
        • cfopuserC cfopuser

          @יאיר-דניאל תוכנה חמודה בהחלט.

          רק אומר שקיים פיצ'ר כזה בpowertoys בשם awake
          שמאפשר לבחור להשאיר את המחשב דולק לתמיד לזמן מסוים ועוד.
          (סמל של כוס קפה שמופיע בשורת המשימות למי שתוהה)

          ה מנותק
          ה מנותק
          הרוששיבע
          כתב נערך לאחרונה על ידי
          #5

          @cfopuser כתב בלהורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה:

          רק אומר שקיים פיצ'ר כזה בpowertoys בשם awake
          שמאפשר לבחור להשאיר את המחשב דולק לתמיד לזמן מסוים ועוד.

          אתה יכול לתת יותר פרטים על התוכנה הזו?

          בנימין מחשביםב תגובה 1 תגובה אחרונה
          1
          • cfopuserC cfopuser

            @יאיר-דניאל תוכנה חמודה בהחלט.

            רק אומר שקיים פיצ'ר כזה בpowertoys בשם awake
            שמאפשר לבחור להשאיר את המחשב דולק לתמיד לזמן מסוים ועוד.
            (סמל של כוס קפה שמופיע בשורת המשימות למי שתוהה)

            צ מנותק
            צ מנותק
            צדיק וטוב לו 0
            כתב נערך לאחרונה על ידי
            #6

            @cfopuser זה לכלכ התוכנות.
            הקטע של @יאיר-דניאל - שאתה בוחר תוכנות שרק במידה והם פועלות, המחשב ישאר ער.

            תגובה 1 תגובה אחרונה
            0
            • ה הרוששיבע

              @cfopuser כתב בלהורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה:

              רק אומר שקיים פיצ'ר כזה בpowertoys בשם awake
              שמאפשר לבחור להשאיר את המחשב דולק לתמיד לזמן מסוים ועוד.

              אתה יכול לתת יותר פרטים על התוכנה הזו?

              בנימין מחשביםב מנותק
              בנימין מחשביםב מנותק
              בנימין מחשבים
              כתב נערך לאחרונה על ידי בנימין מחשבים
              #7

              @הרוששיבע כתב בלהורדה | נר תמיד - תוכנה לשמירת המסך דלוק בתוכנות מסויימות - לפי בחירה:

              אתה יכול לתת יותר פרטים על התוכנה הזו?

              https://mitmachim.top/post/1003857

              או יותר ישן
              כאן
              וכאן

              תגובה 1 תגובה אחרונה
              1
              • מ מחובר
                מ מחובר
                מגוון
                כתב נערך לאחרונה על ידי
                #8

                @יאיר-דניאל התוכנה גם מונעת לעבור למצב שינה רגיל / היברידי ?

                רעיון מעולה ונצרך לתוכנה כזאת
                יישר כח!!!

                יאיר דניאלי תגובה 1 תגובה אחרונה
                0
                • מ מגוון

                  @יאיר-דניאל התוכנה גם מונעת לעבור למצב שינה רגיל / היברידי ?

                  רעיון מעולה ונצרך לתוכנה כזאת
                  יישר כח!!!

                  יאיר דניאלי מנותק
                  יאיר דניאלי מנותק
                  יאיר דניאל
                  כתב נערך לאחרונה על ידי
                  #9

                  @מגוון לא

                  מ תגובה 1 תגובה אחרונה
                  1
                  • יאיר דניאלי יאיר דניאל

                    @מגוון לא

                    מ מחובר
                    מ מחובר
                    מגוון
                    כתב נערך לאחרונה על ידי
                    #10
                    פוסט זה נמחק!
                    תגובה 1 תגובה אחרונה
                    0
                    • יאיר דניאלי יאיר דניאל

                      יצרתי תוכנה קטנה ששומרת על כך שהמסך לא יכבה בעת שימוש בתוכנות מסויימות - לפי הגדרה אישית שלכם.

                      הנה "נר תמיד" - תוכנה קטנה ממש (GPT ּ ג'מיני), שרצה ברקע ושומרת שבעת עבודה על אוצריא/זית/כרום ועוד רשימה של תוכנות, או כל תוכנה אחרת שתוסיפו לרשימה - המסך לא יכבה.

                      • היא נמצאת במגש, ואפשר בכל רגע נתון לכבות ולסגור אותה משם, או ממנהל המשימות.

                      בכבוד!
                      a6a7e6a5-e8c7-409d-984d-b6ece598f66c.jpg

                      NerTamid.exe

                      • התוכנה מזהה אם אוצריא לדוגמא, פתוח ברקע, אם כן - המסך לא נכבה בכלל, אם לא - המסך עובד כרגיל.
                      • יש אפשרות להפעיל ולכבות את התוכנה, גם בלי לסגור אותה.
                      • יש אפשרות שהתוכנה תפעל עם עליית המחשב - באופן אוטומטי.
                      • יש בועת מידע אם התוכנה מופעלת/נכבית - בכדי שתדעו בדיוק מה הסטטוס שלה.
                      • התוכנה רצה ברקע, ופועלת משורת המשימות.

                      אשמח להערות!

                      תמונות בספויילר


                      aa05266f-c4e6-498d-85e7-8097654370ac-image.png
                      c65f7843-6cf9-44cb-9bf2-195cc36c9b40-image.png

                      857ea6e7-65ac-4e05-8080-ff7ba045b66d-image.png
                      509a78b7-ba0a-442d-8df6-428c25f639c2-image.png
                      e7ddf3b0-f8b3-41c3-a4c9-54a0d29fc0ac-image.png
                      3c7dca3f-f056-48d3-bcd5-99d899a98a24-image.png
                      d521c59f-a96c-4339-bce0-7875cbe3ee20-image.png
                      31d46c39-1e25-4e9e-ad8f-f39beaaf4247-image.png

                      הנה הקוד בפאוורשיל - למי שרוצה לעבור עליו:

                      # התחלה שקטה ונקייה - ביטול כל הפלט המיותר
                      $ErrorActionPreference = 'SilentlyContinue'
                      [void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
                      [void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
                      [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
                      
                      # בדיקה שהתוכנה לא רצה כבר
                      if ((Get-Process -Name ([System.Diagnostics.Process]::GetCurrentProcess().Name) -ErrorAction SilentlyContinue).Count -gt 1) { exit }
                      
                      # הגדרת Registry (במקום קבצים)
                      $RegKey = "HKCU:\Software\NerTamid"
                      if (!(Test-Path $RegKey)) { [void](New-Item $RegKey -Force) }
                      
                      # API
                      $sig = '[DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags);'
                      $win32 = Add-Type -MemberDefinition $sig -Name "Win32Sleep" -Namespace "Win32" -PassThru
                      
                      # --- טעינת נתונים ---
                      # 1. רשימת ברירת מחדל (תמיד תופיע)
                      $script:AvailableApps = [ordered]@{ 
                          "אוצריא"="otzaria"; "זית"="Zayit"; "פרויקט השות"="Responsa"; 
                          "אוצר החכמה"="Otzar"; "תורת אמת"="ToratEmet"; "מאגר DBS"="DBS"; 
                          "Word"="WINWORD"; "Excel"="EXCEL"; "PowerPoint"="POWERPNT"; 
                          "Chrome"="chrome"; "Edge"="msedge"; "Zoom"="Zoom" 
                      }
                      
                      # 2. טעינת תוכנות אישיות שהמשתמש הוסיף בעבר מה-Registry
                      $customStored = (Get-ItemProperty $RegKey -Name "CustomApps" -ErrorAction SilentlyContinue).CustomApps
                      if ($customStored) {
                          foreach ($pair in ($customStored -split ",")) {
                              if ($pair -match "=") {
                                  $k,$v = $pair -split "="
                                  if (-not $script:AvailableApps.Contains($k)) { $script:AvailableApps[$k] = $v }
                              }
                          }
                      }
                      
                      # 3. טעינת הבחירות של המשתמש
                      $script:SelectedProcesses = (Get-ItemProperty $RegKey -Name "Selected" -ErrorAction SilentlyContinue).Selected -split ","
                      $script:ManualOverride = $true
                      
                      # אייקון ראשי
                      $ExePath = [System.Diagnostics.Process]::GetCurrentProcess().MainModule.FileName
                      try { $script:MainIcon = [System.Drawing.Icon]::ExtractAssociatedIcon($ExePath) } catch { $script:MainIcon = [System.Drawing.SystemIcons]::Application }
                      $notifyIcon = New-Object System.Windows.Forms.NotifyIcon -Property @{Icon=$script:MainIcon; Visible=$true; Text="נר תמיד"}
                      
                      function Show-Toast ($title, $msg) { 
                          $notifyIcon.ShowBalloonTip(3000, $title, $msg, [System.Windows.Forms.ToolTipIcon]::Info) 
                      }
                      
                      # פונקציית הליבה
                      function Update-SleepState ($showMsg = $false) {
                          $AnyRunning = $false
                          
                          # בדיקת תוכנות ועדכון אייקונים בזיכרון
                          foreach ($appName in $script:AvailableApps.Keys) {
                              $pName = $script:AvailableApps[$appName]
                              
                              # האם התוכנה רצה כרגע?
                              $p = Get-Process -Name "$pName*" -ErrorAction SilentlyContinue | Select -First 1
                              
                              if ($p) {
                                  # אם היא רצה והמשתמש בחר בה - נמנע כיבוי
                                  if ($script:SelectedProcesses -contains $pName) { $AnyRunning = $true }
                                  
                                  # "לכידת" האייקון ושמירתו ב-Registry אם טרם נשמר
                                  if (!(Get-ItemProperty $RegKey -Name "Icon_$pName" -ErrorAction SilentlyContinue)) {
                                      try {
                                          $ms = New-Object System.IO.MemoryStream
                                          [System.Drawing.Icon]::ExtractAssociatedIcon($p.MainModule.FileName).ToBitmap().Save($ms, [System.Drawing.Imaging.ImageFormat]::Png)
                                          [void](Set-ItemProperty $RegKey -Name "Icon_$pName" -Value ([Convert]::ToBase64String($ms.ToArray())))
                                      } catch {}
                                  }
                              }
                          }
                          
                          # קביעת מצב השינה
                          $flags = if ($script:ManualOverride -and $AnyRunning) { [uint32]0x80000003 } else { [uint32]0x80000000 }
                          [void][Win32.Win32Sleep]::SetThreadExecutionState($flags)
                          
                          # הצגת הודעה רק אם התבקשה (למשל בלחיצה ידנית)
                          if ($showMsg) { 
                              $status = if ($script:ManualOverride) { "מופעלת" } else { "מושבתת" }
                              Show-Toast "נר תמיד" "מניעת כיבוי $status"
                          }
                      }
                      
                      # חלון אודות - כולל קישור
                      function Show-About {
                          $a = New-Object System.Windows.Forms.Form -Property @{Text="אודות"; Size="350,180"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterParent"; Icon=$script:MainIcon; FormBorderStyle="FixedDialog"; MaximizeBox=$false}
                          
                          $l = New-Object System.Windows.Forms.Label -Property @{Text="פותח על ידי יאיר דניאל מפורום מתמחים טופ"; AutoSize=$true; Location="30,30"}
                          
                          $lnk = New-Object System.Windows.Forms.LinkLabel -Property @{Text="למעבר לפרופיל המפתח לחץ כאן"; AutoSize=$true; Location="30,70"}
                          $lnk.Add_Click({ [System.Diagnostics.Process]::Start("https://mitmachim.top/user/%D7%99%D7%90%D7%99%D7%A8-%D7%93%D7%A0%D7%99%D7%90%D7%9C") })
                          
                          $a.Controls.AddRange(@($l, $lnk))
                          $a.ShowDialog()
                      }
                      
                      # חלון הגדרות
                      function Show-Settings {
                          $s = New-Object System.Windows.Forms.Form -Property @{Text="הגדרות"; Size="300,250"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
                          
                          $chk = New-Object System.Windows.Forms.CheckBox -Property @{Text="הפעל עם עליית המחשב"; Location="30,30"; AutoSize=$true; Checked=(Get-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -ErrorAction SilentlyContinue)}
                          
                          $btnA = New-Object System.Windows.Forms.Button -Property @{Text="אודות"; Location="30,70"; Size="220,35"}
                          $btnA.Add_Click({ Show-About })
                          
                          $btnS = New-Object System.Windows.Forms.Button -Property @{Text="שמור וסגור"; Location="30,120"; Size="220,50"}
                          $btnS.Add_Click({ 
                              if($chk.Checked){ [void](Set-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid" -Value $ExePath) }
                              else{ [void](Remove-ItemProperty "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "NerTamid") }
                              $s.Close() 
                          })
                          
                          $s.Controls.AddRange(@($chk, $btnA, $btnS)); $s.ShowDialog()
                      }
                      
                      # חלון ניהול תוכנות
                      function Show-AppSelection {
                          $f = New-Object System.Windows.Forms.Form -Property @{Text="ניהול תוכנות"; Size="380,600"; RightToLeft="Yes"; RightToLeftLayout=$true; StartPosition="CenterScreen"; Icon=$script:MainIcon}
                          
                          $lv = New-Object System.Windows.Forms.ListView -Property @{View="Details"; CheckBoxes=$true; FullRowSelect=$true; Size="340,350"; Location="15,15"; SmallImageList=(New-Object System.Windows.Forms.ImageList -Property @{ImageSize="24,24"; ColorDepth="Depth32Bit"})}
                          $lv.Columns.Add("שם התוכנה", 280) | Out-Null
                          
                          # מילוי הרשימה וטעינת אייקונים מה-Registry
                          foreach ($name in $script:AvailableApps.Keys) {
                              $p = $script:AvailableApps[$name]
                              $item = New-Object System.Windows.Forms.ListViewItem($name)
                              $item.Tag = $p
                              $item.Checked = ($script:SelectedProcesses -contains $p)
                              
                              # שליפת אייקון שמור
                              $b64 = (Get-ItemProperty $RegKey -Name "Icon_$p" -ErrorAction SilentlyContinue)."Icon_$p"
                              if ($b64) { 
                                  try {
                                      $bytes = [Convert]::FromBase64String($b64)
                                      $ms = New-Object System.IO.MemoryStream(,$bytes)
                                      $lv.SmallImageList.Images.Add([System.Drawing.Image]::FromStream($ms))
                                      $item.ImageIndex = $lv.SmallImageList.Images.Count - 1
                                  } catch {}
                              }
                              [void]$lv.Items.Add($item)
                          }
                          
                          # כפתור הוספה
                          $btnAdd = New-Object System.Windows.Forms.Button -Property @{Text="➕ הוסף תוכנה ידנית"; Location="15,380"; Size="340,40"}
                          $btnAdd.Add_Click({
                              $n = [Microsoft.VisualBasic.Interaction]::InputBox("שם התוכנה להצגה:", "הוספה")
                              if ($n) {
                                  $h = "איך מוצאים שם תהליך?`n1. פתח את התוכנה שרצית.`n2. פתח מנהל משימות (Ctrl+Shift+Esc)`n3. בלשונית 'פרטים' העתק את השם בלי ה- .exe"
                                  $p = [Microsoft.VisualBasic.Interaction]::InputBox($h, "הזן שם תהליך (למשל: WINWORD)", $n)
                                  
                                  if ($p) { 
                                      # הוספה לרשימה הנוכחית ול-Registry
                                      $script:AvailableApps[$n]=$p
                                      
                                      # שמירת רשימת ה-Custom ל-Registry כדי שתופיע בפעם הבאה
                                      $customList = New-Object System.Collections.Generic.List[string]
                                      foreach ($k in $script:AvailableApps.Keys) {
                                          # אם זו לא תוכנת ברירת מחדל, נשמור אותה
                                          if (-not ("אוצריא","זית","פרויקט השות","אוצר החכמה","תורת אמת","מאגר DBS","Word","Excel","PowerPoint","Chrome","Edge","Zoom" -contains $k)) {
                                              $customList.Add("$k=$($script:AvailableApps[$k])") 
                                          }
                                      }
                                      [void](Set-ItemProperty $RegKey -Name "CustomApps" -Value ($customList -join ","))
                                      
                                      $f.Close(); Show-AppSelection # רענון
                                  }
                              }
                          })
                          
                          $btnSave = New-Object System.Windows.Forms.Button -Property @{Text="שמור שינויים"; Location="15,440"; Size="340,50"}
                          $btnSave.Add_Click({
                              $sel = New-Object System.Collections.Generic.List[string]
                              foreach($i in $lv.CheckedItems){$sel.Add($i.Tag)}
                              $script:SelectedProcesses = $sel
                              [void](Set-ItemProperty $RegKey -Name "Selected" -Value ($script:SelectedProcesses -join ","))
                              Update-SleepState
                              Show-Toast "נר תמיד" "השינויים נשמרו בהצלחה"
                              $f.Close()
                          })
                          
                          $f.Controls.AddRange(@($lv, $btnAdd, $btnSave))
                          $f.ShowDialog()
                      }
                      
                      # תפריט קליק ימני
                      $menu = New-Object System.Windows.Forms.ContextMenu
                      $mToggle = New-Object System.Windows.Forms.MenuItem("מניעת כיבוי פעילה", { 
                          $script:ManualOverride = -not $script:ManualOverride
                          $this.Checked = $script:ManualOverride
                          # כאן הפעלנו את ה-ShowMsg = True
                          Update-SleepState $true 
                      })
                      $mToggle.Checked = $true
                      
                      $mApps = New-Object System.Windows.Forms.MenuItem("ניהול תוכנות", { Show-AppSelection })
                      $mSettings = New-Object System.Windows.Forms.MenuItem("הגדרות", { Show-Settings })
                      $mExit = New-Object System.Windows.Forms.MenuItem("יציאה", { $notifyIcon.Visible=$false; [System.Windows.Forms.Application]::Exit(); Stop-Process -Id $PID -Force })
                      
                      $menu.MenuItems.AddRange(@($mToggle, $mApps, $mSettings, $mExit))
                      $notifyIcon.ContextMenu = $menu
                      
                      # טיימר
                      $timer = New-Object System.Windows.Forms.Timer -Property @{Interval = 30000}
                      $timer.Add_Tick({ Update-SleepState })
                      $timer.Start()
                      
                      # הודעת פתיחה
                      Show-Toast "נר תמיד" "הלימוד שלך לא נעצר. גם המסך לא נכבה."
                      Update-SleepState
                      [System.Windows.Forms.Application]::Run()
                      

                      יש לתוכנה שני גירסאות קודמות - אם זה מעניין מישהו...

                      גירסה ראשונה:
                      אוצריא - שומר מסך
                      שומר מסך - מיועד לתוכנת אוצריא בלבד.
                      309e238d-1cb9-48eb-948e-ee02a085832f.jpg
                      אוצריא שומר מסך.exe

                      גירסה שניה:
                      נר תמיד - שומר מסך לאוצריא וזית
                      תוכנה לשמירת המסך בעת שימוש בתוכנות אוצריא וזית
                      b5fbe287-d27b-43ed-bcc4-69a801805bbf (2).jpg
                      nertamid.exe

                      צבי דורש ציוןצ מנותק
                      צבי דורש ציוןצ מנותק
                      צבי דורש ציון
                      כתב נערך לאחרונה על ידי
                      #11

                      @יאיר-דניאל עכשיו ניסיתי את זה לראשונה ממש, וזה לא עבד...
                      אולי זה שומר שהמסך לא יכבה אבל כן מכניס למצב שינה? (נראה לי כתבת על זה משהו אפשהו, לא?), א"כ זה גפ לא כ"כ עוזר... (לי עכ"פ)

                      יאיר דניאלי תגובה 1 תגובה אחרונה
                      0
                      • צבי דורש ציוןצ צבי דורש ציון

                        @יאיר-דניאל עכשיו ניסיתי את זה לראשונה ממש, וזה לא עבד...
                        אולי זה שומר שהמסך לא יכבה אבל כן מכניס למצב שינה? (נראה לי כתבת על זה משהו אפשהו, לא?), א"כ זה גפ לא כ"כ עוזר... (לי עכ"פ)

                        יאיר דניאלי מנותק
                        יאיר דניאלי מנותק
                        יאיר דניאל
                        כתב נערך לאחרונה על ידי
                        #12

                        @צבי-דורש-ציון מצב שינה זה משהו אחר, השאלה היא האם יש עניין לעשות גם שלא יכניס למצב שינה.
                        כעת אין לי גישה לAI כך שאינני יכול להוסיף זאת.
                        (לא ראיתי בזה צורך כיון שאצלי לדוגמא אני מגדיר כיבוי מסך ל5 דקות ומצב שינה ל20 דקות, כך שתוך עשרים דקות אני תמיד אראה צורך לגלגול מאיפה שאני אוחז- מה שלא יתן בכ"מ למחשב להיכנס למצב שינה)

                        צבי דורש ציוןצ תגובה 1 תגובה אחרונה
                        1
                        • יאיר דניאלי יאיר דניאל

                          @צבי-דורש-ציון מצב שינה זה משהו אחר, השאלה היא האם יש עניין לעשות גם שלא יכניס למצב שינה.
                          כעת אין לי גישה לAI כך שאינני יכול להוסיף זאת.
                          (לא ראיתי בזה צורך כיון שאצלי לדוגמא אני מגדיר כיבוי מסך ל5 דקות ומצב שינה ל20 דקות, כך שתוך עשרים דקות אני תמיד אראה צורך לגלגול מאיפה שאני אוחז- מה שלא יתן בכ"מ למחשב להיכנס למצב שינה)

                          צבי דורש ציוןצ מנותק
                          צבי דורש ציוןצ מנותק
                          צבי דורש ציון
                          כתב נערך לאחרונה על ידי
                          #13

                          @יאיר-דניאל לי מוגדר ככה במחשב פשוט, אז זה לא עזר לי...

                          תגובה 1 תגובה אחרונה
                          1

                          • התחברות

                          • אין לך חשבון עדיין? הרשמה

                          • התחברו או הירשמו כדי לחפש.
                          • פוסט ראשון
                            פוסט אחרון
                          0
                          • חוקי הפורום
                          • פופולרי
                          • לא נפתר
                          • משתמשים
                          • חיפוש גוגל בפורום
                          • צור קשר