吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1423|回复: 49
上一主题 下一主题
收起左侧

[其他原创] golang,编写的“游戏终结者”

  [复制链接]
跳转到指定楼层
楼主
冬至雨 发表于 2024-7-22 10:51 回帖奖励
本帖最后由 冬至雨 于 2024-7-22 18:35 编辑

斑竹尽然没有给Golang单独弄个“分类”,好吧,遵守斑竹的规定吧!


孩子寒暑假一直玩游戏,实在是太气人了,外游戏的动力,远远大于学习的动力!我搜了下52论坛没有限制游戏的软件,也没有限制游戏的开源代码!

为了孩子们的健康成长,用golang,写个小代码,把PC端所有的网游,页游,游戏,都给他屏蔽掉,还给孩子一个清朗的网络空间!
源码再次!
[Golang] 纯文本查看 复制代码
package main

import (
	"fmt"
	"strings"
	"syscall"
	"time"
	"unsafe"

	"github.com/shirou/gopsutil/process"
)

var (
	user32             = syscall.NewLazyDLL("user32.dll")
	procEnumWindows    = user32.NewProc("EnumWindows")
	procGetWindowTextW = user32.NewProc("GetWindowTextW")
	procPostMessage    = user32.NewProc("PostMessageW")
)

const (
	WM_CLOSE = 0x0010
)

func EnumWindows(enumFunc uintptr, lParam uintptr) (err error) {
	r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(lParam), 0)
	if r1 == 0 {
		if e1 != 0 {
			err = error(e1)
		} else {
			err = syscall.EINVAL
		}
	}
	return
}

func GetWindowText(hwnd syscall.Handle, str *uint16, maxCount int32) (len int32, err error) {
	r1, _, e1 := syscall.Syscall(procGetWindowTextW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(str)), uintptr(maxCount))
	len = int32(r1)
	if len == 0 {
		if e1 != 0 {
			err = error(e1)
		} else {
			err = syscall.EINVAL
		}
	}
	return
}

func PostMessage(hwnd syscall.Handle, msg uint32, wParam, lParam uintptr) (err error) {
	r1, _, e1 := syscall.Syscall6(procPostMessage.Addr(), 4, uintptr(hwnd), uintptr(msg), uintptr(wParam), uintptr(lParam), 0, 0)
	if r1 == 0 {
		if e1 != 0 {
			err = error(e1)
		} else {
			err = syscall.EINVAL
		}
	}
	return
}

func enumWindowsProc(hwnd syscall.Handle, lParam uintptr) uintptr {
	const maxLen = 256
	var buf [maxLen]uint16
	_, err := GetWindowText(hwnd, &buf[0], maxLen)
	if err == nil {
		title := syscall.UTF16ToString(buf[:])
		if containsGameKeywords(title) {
			fmt.Printf("Closing window: %s\n", title)
			PostMessage(hwnd, WM_CLOSE, 0, 0)
		}
	}
	return 1
}

func containsGameKeywords(title string) bool {
	keywords := []string{"游戏", "页游", "网游",

		"手游",

		"电竞",

		"魔兽",

		"迷你世界",

		"精英",

		"吃鸡",

		"王者荣耀",

		"和平精英",

		"英雄联盟",

		"穿越火线",

		"绝地求生",

		"堡垒之夜",

		"使命召唤",

		"守望先锋",

		"魔兽世界",

		"剑灵",

		"梦幻西游",

		"传奇",

		"征途",

		"天龙八部",

		"问道",

		"神武",

		"大话西游",

		"龙之谷",

		"地下城与勇士",

		"逆战",

		"火影忍者",

		"部落冲突",

		"皇室战争",

		"炉石传说",

		"星际争霸",

		"暗黑破坏神",

		"魔域",

		"传奇"}
	for _, keyword := range keywords {
		if strings.Contains(strings.ToLower(title), keyword) {
			return true
		}
	}
	return false
}

func main() {
	go monitorBrowsers()
	select {} // Keep the program running
}

func monitorBrowsers() {
	for {
		processes, err := process.Processes()
		if err != nil {
			fmt.Println("Error getting processes:", err)
			continue
		}

		for _, p := range processes {
			name, err := p.Name()
			if err != nil {
				continue
			}

			if isBrowserToBlock(name) {
				fmt.Printf("Monitoring browser: %s\n", name)
				monitorBrowserActivity(p)
			}
		}

		time.Sleep(5 * time.Second) // Sleep for 5 seconds before next check
	}
}

func isBrowserToBlock(name string) bool {
	blockedBrowsers := []string{"firefox.exe", "opera.exe", "360se.exe", "chrome.exe", "iexplore.exe", "msedge.exe", "qqbrowser.exe"}
	for _, browser := range blockedBrowsers {
		if strings.EqualFold(name, browser) {
			return true
		}
	}
	return false
}

func monitorBrowserActivity(p *process.Process) {
	// This function should monitor the browser activity and close it if it detects the keywords
	// You can use Windows API or other tools to monitor the browser activity
	// For simplicity, we just close the browser process if it contains the keywords in the window title
	cb := syscall.NewCallback(enumWindowsProc)
	EnumWindows(cb, 0)
}


想监控什么关键字,自己填写吧!实测非常管用,下一步把他弄成安卓,苹果手机里!

让他永远玩不了游戏,打开就关闭!!!

欢迎大家补全更多的功能!!

免费评分

参与人数 3吾爱币 +9 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chaleaoch + 1 + 1 用心讨论,共获提升!
恶魔天尊 + 1 兄弟,你这样以后很容易被拔氧气管的~~~三思啊!!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
luliucheng 发表于 2024-7-22 14:23
冬至雨 发表于 2024-7-22 11:32
不能仅仅是win,下下一步安卓,苹果,鸿蒙,都给他禁用了!必须禁用,所有游戏!!!

楼主的精神可嘉,但是这种软件压根就不可能跨平台,因为不同平台的接口不一样,应用包格式不一样,系统限制也不一样。你以为手机系统也只要一句 WM_CLOSE 就能关掉“窗口”了?而且关键字屏蔽终究是一个无底洞,如果对信息相关知识有所了解就会知道网上的信息是无穷多的,而关键字的覆盖面再怎么大都是有限的,关键字屏蔽本质上就是一场猫捉老鼠的游戏,永远不会结束。(我之前做过水贴拦截深有体会)更何况现在这个程序就有数不清的漏洞:Firefox浏览器不会被关闭,搜索“youxi”不会被关闭,直接搜游戏的名字不会关闭……但凡会用任务管理器这个程序就被关了

希望楼主戒骄戒躁,脚踏实地,努力学习计算机和算法知识,提升编程素养,更加全面的考虑问题。
沙发
怪Guai 发表于 2024-7-22 10:57
3#
newlifes24 发表于 2024-7-22 11:04
4#
cl19980429 发表于 2024-7-22 11:05
测试一下, 看行不行
5#
amex0372 发表于 2024-7-22 11:17
哈哈哈,牛皮
6#
marcoxin998 发表于 2024-7-22 11:23
我娃要是喜欢打游戏,我带他打WOW,魂系这些,王者原神不给他玩
7#
 楼主| 冬至雨 发表于 2024-7-22 11:32 |楼主
newlifes24 发表于 2024-7-22 11:04
微软自带的家庭管理账号,可以限制所有。

不能仅仅是win,下下一步安卓,苹果,鸿蒙,都给他禁用了!必须禁用,所有游戏!!!
8#
 楼主| 冬至雨 发表于 2024-7-22 11:34 |楼主
cl19980429 发表于 2024-7-22 11:05
测试一下, 看行不行

必须行!只要你打开百度,搜游戏,就给你直接关闭!毫不犹豫!
9#
Godjk 发表于 2024-7-22 11:38
孩子:有你真好
10#
fxyc87 发表于 2024-7-22 11:43
还不如直接给电脑设个密码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 07:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表