পাওয়ার ইভেন্টগুলিতে কোনও প্রোগ্রাম চালানোর কোনও উপায় আছে কি?


11

আমার ল্যাপটপটি যখন ব্যাটারি পাওয়ারে স্থানান্তরিত হয় এবং একইভাবে এটি এসিতে ফিরে আসে তখন আমি কোনও অ্যাপ্লিকেশন সম্পাদন করার উপায় খুঁজছি।

উইন্ডোজে কি কোনও বিল্ট-ইন হুক বা তৃতীয় পক্ষের অ্যাপ্লিকেশন রয়েছে যা আমাকে এই জাতীয় ইভেন্টগুলিতে প্রতিক্রিয়া জানাতে দেয়?

সম্পাদনা

আমি "বিদ্যুৎ" ইভেন্টে কোনও কার্য নিষ্ক্রিয় করার চেষ্টা করা টাস্কশেডুলারের দিকে নজর রেখেছি, তবে ব্যাটারিতে স্যুইচ করার সময় কোনও ইভেন্ট লগ হয়েছে বলে মনে হয় না।


আমার কেন এই ডুবে যাওয়া অনুভূতি
হ'ল আমাকে

একটি অ্যাপ্লিকেশন কাজ করবে, তবে আপনার কেবল একটি স্ক্রিপ্ট দরকার হতে পারে।
বিডব্লিউ

আরে মানুষ, আমি পার্টিতে প্রায় ছয় বছর দেরি করেছিলাম, তবে আমার মনে হয় আমি দেখার মতো কিছু পেয়েছি ...
ফক্সডেপলয়ে

উত্তর:


8

আমি একটি অ্যাপ্লিকেশন লিখেছি ( http://batterysaver.codeplex.com/ ) যা পাওয়ার মোড পরিবর্তন বার্তা শুনবে এবং এক্সএমএল কনফিগারেশনের উপর ভিত্তি করে ক্রিয়া সম্পাদন করবে।

অন্য কেউ যদি এটি ব্যবহার করতে বা এটি প্রসারিত করতে পারে তবে দুর্দান্ত। যদি এর থেকে আরও ভাল কিছু থাকে তবে দয়া করে এটি পোস্ট করুন।


: একটি বর্ধিতকরণ, যখন শক্তি অবস্থা পরিবর্তন বরং পোলিং চেয়ে GetSystemPowerStatus উইন্ডোজ পাঠায় যে একটি WM_POWERBROADCAST বার্তা গ্রহণ করতে একটি আবেদন তৈরি করেন msdn.microsoft.com/en-us/library/aa373247%28VS.85%29.aspx
shf301

@ shf301 - টিপটির জন্য ধন্যবাদ; পাওয়ার মোড পরিবর্তন ইভেন্টের প্রতিক্রিয়া জানাতে আমি এটি আপডেট করেছি।
রায়ান ইমারেল

@ রায়ানামেরল চমৎকার অ্যাপ!
মোয়াব

@ রায়ানআমারলে খুব ভাল অ্যাপ্লিকেশন স্বীকার করেছেন!
কসকো টেক

আমি যদি পাওয়ার ইভেন্টগুলিতে ব্যাটারি প্রোফাইল পরিবর্তন করতে চাই তবে কনফিগে আমার কী যুক্ত করা উচিত?
সিমংসিসি

4

আপনি এটির জন্য চালাতে পারবেন এমন কোনও সাধারণ কমান্ড সম্পর্কে জানেন না, তবে স্ক্রিপ্টিংটি এটি করতে সক্ষম হওয়া উচিত।

আটকাচ্ছে চেষ্টা Win32_PowerManagementEvent ইভেন্টের PowerShell বা WSH । টমশারডওয়্যারের নিবন্ধটিতে কিছু vbscript কোড রয়েছে তবে আমি মনে করি আপনার ইভেন্ট ইভেন্ট 10 (পাওয়ারসেট পরিবর্তন) এর জন্য একটি কেস লাগবে। স্ট্যাকওভারফ্লোতে কিছু ধারণা রয়েছে কীভাবে আমি জানব যে উইন্ডোজ কখন ঘুমের / হাইবারনেট মোডের বাইরে চলে যায়? , যদিও আপনাকে ঘুম / হাইবারনেটের পরিবর্তে পাওয়ার স্টেট পরিবর্তনটি পরিচালনা করতে ধারণাটি প্রসারিত করতে হবে। আপনি প্রশ্নের জন্য কোডে কিছু ধারণা পেতে পারেন যে কেউ স্থগিত / পুনরারম্ভের ট্র্যাক রাখতে কীভাবে ম্যানেজমেন্টএভেন্টওয়াচার ব্যবহার করে?

সম্পাদনা: আসলে, এরকম কিছু চেষ্টা করুন। এটি সম্পূর্ণ একসাথে হ্যাক হয়েছে, তাই এটি সুন্দর নয়। যদি ডিসি বা এসি পাওয়ারটি সনাক্ত হয় তবে আপনি যা চান তা করতে ইকো স্টেটমেন্টগুলি পরিবর্তন করুন। সাথে চালাওcscript power.vbs

power.vbs

Dim battery_status, prev_status
prev_status = CheckBattery
Set colMonitoredEvents = GetObject("winmgmts:\\.\root\cimv2")._
    ExecNotificationQuery("Select * from Win32_PowerManagementEvent")
Do
    Set strLatestEvent = colMonitoredEvents.NextEvent
    If strLatestEvent.EventType = 10 Then
        battery_status = CheckBattery
        If battery_status <> prev_status Then
            If battery_status = 1 Then
                Wscript.Echo "DC power"
            ElseIf battery_status = 2 Then
                Wscript.Echo "AC power"
            End If
        End If
    End If
    prev_status = battery_status
Loop

Function CheckBattery
    Dim oWMI, items, item
    Set oWMI = GetObject("winmgmts:\\.\root\cimv2")
    Set items = oWMI.ExecQuery("Select * from Win32_Battery",,48)
    For Each item in items
        If item.BatteryStatus = 1 Then
            CheckBattery = 1
            Exit Function
        ElseIf item.BatteryStatus = 2 then
        CheckBattery = 2
            Exit Function
        End If
    Next
End Function

ধারণাটি হ'ল ব্যাটারি শক্তি সংরক্ষণের জন্য এক রাজ্য থেকে অন্য রাজ্যে স্থানান্তরিত করার সময় অ্যাপ্লিকেশনগুলি শুরু / বন্ধ করা। অতএব আমি ভারী স্ক্রিপ্ট চালিয়ে উদ্দেশ্যটি হারাতে চাই না (ডাব্লুএমআই কিছুটা ভারী)। বিশদ উত্তরের জন্য +1।
রায়ান ইমারেল

@ রায়ান - ভাল, হ্যাঁ সেক্ষেত্রে WM_POWERBROADCAST পদ্ধতির জন্য নিবন্ধভুক্ত আবেদন আরও ভাল।
বিডব্লু

2

আমি বিলের পদ্ধতিকে পছন্দ করি তবে তিনি কীভাবে পাওয়ারশেলে ডাব্লুএমআই ইভেন্টের জন্য নিবন্ধন করবেন তা আপনাকে বলেন না, সুতরাং এটি কীভাবে করবেন তা এখানে।

আপনি যদি নিজের কোডটি কেবল তখনই বর্ণিত করতে চান যখন সিস্টেম পাওয়ার স্টেটের পরিবর্তন হবে, এখানে বর্ণিত হিসাবে এই কোডটি ব্যবহার করুন।

Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
 -sourceIdentifier "Power" `
 -action {
     #YourCodeHere
      }

এখন, যখনই আপনি ডিভাইসটি প্লাগ ইন করেন, বা এটিকে প্লাগ লাগান না কেন বিদ্যুতের স্থিতি পরিবর্তন হলে এটি ট্রিগার করবে। সুতরাং আপনি আরও থামতে চান এবং প্রশ্ন জিজ্ঞাসা করতে বিরতি দিতে পারেন:

আমি কি ক্ষমতায় আছি নাকি?

সৌভাগ্যক্রমে আমরা ডাব্লুএমআই ক্লাসের মাধ্যমে এটি করতে পারি BatteryStatus, সুতরাং একটি বিদ্যুত ইভেন্ট পরিবর্তিত হলে আমি কেবলমাত্র একটি অপারেশন চালাতে ব্যবহার করি এমন সম্পূর্ণ নির্মাণটি এখানে রয়েছে এবং কেবলমাত্র আমি যদি আর পাওয়ারে থাকি না তবেই।

Register-WMIEvent -query "Select * From Win32_PowerManagementEvent" `
  -sourceIdentifier "Power" `
  -action {
      if ([BOOL](Get-WmiObject -Class BatteryStatus -Namespace root\wmi).PowerOnLine ){
         #Device is plugged in now, do this action
         write-host "Power on!"
     }
    else{
        #Device is NOT plugged in now, do this action
        write-host "Now on battery, locking..."
        [NativeMethods]::LockWorkStation()
     }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.