在Windows上运行程序,可以在资源管理器双击程序运行,也可以在cmd/powershell中输入程序路径运行。
我想问一下,有没有相应的Windows API或者其它什么方法可以判断这些不同的运行方式。
GetParentProcessID 可以获取父进程的 pid
CreateToolhelp32Snapshot 可以获取正在运行的进程列表,然后你通过父进程 pid 就能知道到底是哪个程序启动了你的程序。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
第一种办法,查自己程序的父进程,难度高一点。很多反破解软件都会检查自己是不是被dasm一类的运行的。
第二种,针对win平台,可以对你的程序进行包装,把主体隐藏起来,通过具有相同icon的启动器来运行:分别提供一个shortcut,加上一个特定的参数;提供一个exe文件,加隐藏属性,加入用户path,直接运行主体程序。这种除非用户特意区分,一般不会发现有什么不同。
第三种,程序启动的时候,检查前一个活动窗口。这个办法可能不是特别稳定,特别是如果你程序启动时间太长。
第四种,靠猜的。把当前所有窗口枚举,看看有没有标题跟你程序名称有关的explore或cmd或power shell窗口。