Fungsi yang ingin saya capai adalah memanggil program ketika tidak ada input keyboard, gerakan mouse, atau tindakan klik. Hal pertama yang terlintas dalam pikiran adalah menggunakan hook HOOK untuk mendapatkan tindakan keyboard atau mouse, dan memanggil program jika tidak ada tindakan. Hasil dari usaha saya adalah selalu ada masalah saat melakukan hook dan hook.
Belakangan saya mengira screen saver Windows masuk ke screen saver ketika keyboard dan mouse tidak bergerak, jadi saya berubah pikiran dan ingin membuat program dalam bentuk seperti itu ketika keyboard dan mouse tidak bergerak memasuki screen saver, dan kemudian mendeteksi apakah sistem sedang menjalankan screen saver, program akan dipanggil jika sedang berjalan. Cara ini menggunakan screen saver sebagai perantara dan menyerahkan tugas mendeteksi pergerakan keyboard dan mouse ke screen saver. SystemParametersInfo dapat mengimplementasikan fungsi untuk mendapatkan informasi screen saver. Kode referensinya adalah sebagai berikut:
'Panggilan API dan definisi umum: Fungsi Deklarasi Pribadi SystemParametersInfo _ Lib "user32" _ Alias "SystemParametersInfoA" _ (ByVal uiAction Selama, _ ByVal uiParam Selama, _ pvParam Seperti Apa Pun, _ ByVal fWInIni Selama) Sebagai Boolean Pribadi Const SPI_GETSCREENSAVEACTIVE Selama = &H10 'Konstan untuk apakah screensaver diaktifkanPrivate Const SPI_GETSCREENSAVERRUNNING As Long = &H72 'Konstan untuk apakah screensaver sedang berjalanPrivate Sub Timer1_Timer() Redupkan bRunning As Boolean 'Variabel untuk apakah screensaver sedang berjalan, tentu saja Anda dapat menentukan variabel global SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bBerjalan, Salah 'Panggil API, bRunning mengembalikan status screen saver yang berjalan Debug. Waktu Cetak; "Screen saver running = "; bRunning 'Demo: mencetak informasi tentang apakah screen saver sedang berjalan End Sub 'Selain itu, untuk memeriksa apakah screen saver diaktifkan , Anda juga dapat menggunakan metode berikut: SystemParametersInfo SPI_GETSCREENSAVEACTIVE, 0 , bActive, False 'bActive adalah nilai yang dikembalikan (tipe logis)
Tapi saya tidak tahu mengapa saya masih mengalami masalah debugging di bawah WIN7, meminta SystemParametersInfo SPI_GETSCREENSAVERRUNNING, 0, bRunning, False
Tipe bRunning yang dimasukkan salah dan hanya bisa menyerah.
Terakhir, solusi terakhir adalah dengan menggunakan fungsi GetLastInputInfo untuk mendapatkan waktu idle sistem. Kode referensinya adalah sebagai berikut:
Opsi ExplicitPrivate Deklarasikan Fungsi GetLastInputInfo Lib "user32" (plii Sebagai LASTINPUTINFO) Sebagai Fungsi Deklarasi BooleanPrivate GetTickCount Lib "kernel32" () Sebagai LongPrivate Tipe LASTINPUTINFO cbSize Selama dwTime As LongEnd Type Private Sub Form_Load() Timer1.Interval = 1000 End Sub Private Sub Timer1_Timer() Redupkan lii As LASTINPUTINFO lii.cbSize = Len(lii) If GetLastInputInfo(lii) Then If (GetTickCount - lii.dwTime) / 60000 >= 15 Kemudian Call MsgBox("Karena mesin tidak beroperasi selama 15 menit, jika 3 menit Jika tidak ada respon, sistem akan dimatikan secara paksa", vbYesNo + vbExclamation + vbDefaultButton2, "prompt") Berakhir Jika Berakhir Jika Berakhir SubDi atas adalah keseluruhan isi artikel ini, saya harap Anda semua menyukainya.