go windows鎖屏 && 關閉桌面(殺掉檔案資源管理器)
鎖屏
func lockScreen() {
var args []string
args = append(args, "user32.dll", "LockWorkStation")
_, err := common.StartProcess("rundll32.exe", args...)
if err != nil {
common.Log.Error("lockScreen err:", err)
}
}
判斷是否鎖屏
func tScreenIsLocked() {
lockScreen()
// 時延太短會看不到效果
time.Sleep(time.Second * 7)
fmt.Println(ScreenIsLocked())
}
const (
DESKTOP_SWITCHDESKTOP = 0x0100 // The access to the desktop
)
// get desktop locked status
func ScreenIsLocked() bool {
// load user32.dll only once
user32 := syscall.MustLoadDLL("user32.dll")
openDesktop := user32.MustFindProc("OpenDesktopW")
closeDesktop := user32.MustFindProc("CloseDesktop")
switchDesktop := user32.MustFindProc("SwitchDesktop")
var lpdzDesktopPtr uintptr = uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("Default"))) //string
var dwFloatsPtr uintptr = 0 //uint32
var fInheritPtr uintptr = 0 //boolean
var dwDesiredAccessPtr uintptr = uintptr(DESKTOP_SWITCHDESKTOP) //uint32
r1, _, _ := syscall.Syscall6(openDesktop.Addr(), 4, lpdzDesktopPtr, dwFloatsPtr, fInheritPtr, dwDesiredAccessPtr, 0, 0)
if r1 == 0 {
panic("get desktop locked status error")
}
res, _, _ := syscall.Syscall(switchDesktop.Addr(), 1, r1, 0, 0)
// clean up
syscall.Syscall(closeDesktop.Addr(), 1, r1, 0, 0)
return res != 1
}
殺掉檔案資源管理器
type PROCESSENTRY32 struct {
dwSize int32
cntUsage int32
th32ProcessID int32
th32DefaultHeapID uintptr
th32ModuleID int32
cntThreads int32
th32ParentProcessID int32
pcPriClassBase int32
dwFlags int32
szExeFile [260]byte
}
func killExplorer() {
kernel32 := syscall.NewLazyDLL("kernel32.dll")
CreateToolhelp32Snapshot := kernel32.NewProc("CreateToolhelp32Snapshot")
pHandle, _, _ := CreateToolhelp32Snapshot.Call(uintptr(0x2), uintptr(0x0))
if int(pHandle) == -1 {
fmt.Println("pHandle = -1")
return
}
defer func() {
CloseHandle := kernel32.NewProc("CloseHandle")
CloseHandle.Call(pHandle)
}()
Process32Next := kernel32.NewProc("Process32Next")
for {
var proc PROCESSENTRY32
proc.dwSize = int32(unsafe.Sizeof(proc))
if rt, _, _ := Process32Next.Call(uintptr(pHandle), uintptr(unsafe.Pointer(&proc))); int(rt) == 1 {
if strings.HasPrefix(string(proc.szExeFile[0:]), "explorer.exe") {
if pro, err := os.FindProcess(int(proc.th32ProcessID)); err != nil {
fmt.Println("FindProcess err: ", err)
} else {
err = pro.Kill()
}
}
} else {
break
}
}
}
注: 檔案資源管理器被關閉之後,可按Ctrl + Shift + Delete
開啟工作管理員,檔案 => 執行新任務,輸入explorer.exe重新開啟檔案資源管理器。
相關文章
- 怎麼關閉win10鎖屏介面 windows關閉鎖屏介面的方法Win10Windows
- 巧用windows7資源管理器快速查詢檔案Windows
- win10鎖屏圖片怎麼關閉_win10如何關閉鎖屏桌布Win10
- 殺掉鎖死的程式
- 實現關閉程式函式,殺掉pchunter函式
- 微信讀書怎麼關閉自動鎖屏?微信讀書關閉自動鎖屏教程
- iPhone8鎖屏聲音怎麼關閉? iPhone8關閉鎖屏聲音教程iPhone
- Win10怎麼關閉鎖屏廣告 win10系統關閉鎖屏廣告的方法Win10
- 【sqlserver】殺掉所有死鎖程式SQLServer
- win10 資源管理器歷史記錄怎麼禁用_win10如何關閉資源管理器最近使用的檔案記錄Win10
- win10的鎖屏桌布在哪個資料夾_windows10鎖屏圖片檔案存放位置在哪Win10Windows
- go-filesystem 檔案管理器Go
- windows10資源管理器刪除不了檔案是怎麼回事Windows
- win10系統關閉資源管理器後黑屏怎麼辦_win10關閉資源管理器後黑屏的解決方法Win10
- Windows10系統檔案資源管理器打不開如何解決Windows
- Windows10系統開啟資源管理器閃屏怎麼辦Windows
- Win10系統怎樣關閉Windows檔案保護 win10關閉windows檔案保護的步驟Win10Windows
- win10如何徹底關掉自動鎖屏 win10解除自動鎖屏的方式Win10
- win10如何取消鎖屏介面 win10怎麼關閉顯示鎖屏介面Win10
- 為windows7系統資源管理器新增檔案核取方塊的方法Windows
- windows上殺掉指定名稱的程式Windows
- 開啟資源管理器並定位到某個檔案
- win10鎖屏桌布怎麼關閉_win10電腦鎖屏桌布怎麼設定Win10
- win10怎麼取消開機鎖屏介面_win10如何關閉開機鎖屏介面Win10
- w10怎麼設定不自動鎖屏_win10關閉自動鎖屏介面方法Win10
- windows10系統如何關閉錄屏遊戲功能Windows遊戲
- Win10系統怎麼關閉鎖屏介面【圖文】Win10
- 如何關閉Mac電腦鎖屏後的密碼登入?Mac密碼
- windows10如何徹底關閉檔案索引功能【圖文】Windows索引
- Windows檔案關聯Windows
- oracle 關閉資料檔案的擴充套件Oracle套件
- oracle查詢並殺掉鎖表及物件的session及相關係統程式Oracle物件Session
- web桌面程式之鎖屏功能分析Web
- C++如何關閉檔案C++
- linux批量殺掉程式linux批量殺掉程式Linux
- win10 資源管理器怎麼預覽excel_win10資源管理器預覽excel檔案的方法Win10Excel
- Ubuntu 完全關閉桌面特效Ubuntu特效
- Android鎖屏和啟用裝置管理器Android