דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • 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 כותבים 253 צפיות 9 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ה הרוששיבע

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

    יאיר דניאלי מנותק
    יאיר דניאלי מנותק
    יאיר דניאל
    כתב נערך לאחרונה על ידי
    #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
                        • חוקי הפורום
                        • פופולרי
                        • לא נפתר
                        • משתמשים
                        • חיפוש גוגל בפורום
                        • צור קשר