鱼C论坛

 找回密码
 立即注册
查看: 1088|回复: 5

[已解决]有没有好的方法判断是否已经进入windows桌面?

[复制链接]
发表于 2023-5-31 09:30:31 | 显示全部楼层 |阅读模式
10鱼币
一般电脑开机启动后,需要输入密码进入桌面;我想检测的是进入桌面这个事件,检测到之后进行我的后续操作。请大家不吝赐教!
最佳答案
2023-5-31 09:30:32
如果您正在编写某种脚本或应用程序,那么可能需要一种方法来检测Windows是否已经加载并进入了桌面。这可能需要编程技术,因为Windows本身并没有内置的方式来轻松地通知您是否已经进入了桌面。

以下是两种可能的方法:

1. 查询某个特定服务或程序:一种可能的方法是编写一个脚本或程序,检查某个在Windows启动并进入桌面时一定会运行的服务或程序。例如,"explorer.exe"通常在启动时运行,用来显示桌面和管理文件系统。您可以编写一个脚本,定期检查"explorer.exe"是否在运行。如果它正在运行,那么很有可能已经进入了桌面。

例如,您可以在Python中使用psutil库来查询进程:

   
  1. import psutil

  2. def check_desktop():
  3.      for process in psutil.process_iter(['name']):
  4.          if process.info['name'] == 'explorer.exe':
  5.              return True
  6.      return False
  7.    
复制代码


    这个函数会检查系统中的所有进程,如果找到了"explorer.exe",就返回True。否则返回False。

2. 监听某个特定的Windows事件:另一种可能的方法是监听某个在Windows启动并进入桌面时会触发的事件。这可能需要对Windows的底层工作方式有深入的了解,并可能需要使用像是C#或者C++这样的编程语言。一种可能的事件是"SessionSwitch"事件,当用户在不同的登录会话之间切换时,这个事件会被触发。当用户从登录界面切换到桌面时,这个事件也会被触发。

以上两种方法都需要相应的编程技术,并且可能不会100%准确。因为有些情况下,"explorer.exe"可能会在非桌面环境下运行,或者"SessionSwitch"事件可能在进入桌面之前或之后的其他时间触发。所以在使用这些方法的时候,需要注意可能存在的误判。

此外,如何在检测到已经进入桌面之后执行后续操作,也取决于你的具体需求。例如,你可能需要编写一个持续运行的脚本,定期检查是否已经进入桌面,然后在检测到已经进入桌面之后执行一些操作。或者你可能需要监听某个事件,当这个事件触发时执行一些操作。这些都需要根据你的具体需求来决定。

最佳答案

查看完整内容

如果您正在编写某种脚本或应用程序,那么可能需要一种方法来检测Windows是否已经加载并进入了桌面。这可能需要编程技术,因为Windows本身并没有内置的方式来轻松地通知您是否已经进入了桌面。 以下是两种可能的方法: 1. 查询某个特定服务或程序:一种可能的方法是编写一个脚本或程序,检查某个在Windows启动并进入桌面时一定会运行的服务或程序。例如,"explorer.exe"通常在启动时运行,用来显示桌面和管理文件系统。您可以 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-31 09:30:32 | 显示全部楼层    本楼为最佳答案   
如果您正在编写某种脚本或应用程序,那么可能需要一种方法来检测Windows是否已经加载并进入了桌面。这可能需要编程技术,因为Windows本身并没有内置的方式来轻松地通知您是否已经进入了桌面。

以下是两种可能的方法:

1. 查询某个特定服务或程序:一种可能的方法是编写一个脚本或程序,检查某个在Windows启动并进入桌面时一定会运行的服务或程序。例如,"explorer.exe"通常在启动时运行,用来显示桌面和管理文件系统。您可以编写一个脚本,定期检查"explorer.exe"是否在运行。如果它正在运行,那么很有可能已经进入了桌面。

例如,您可以在Python中使用psutil库来查询进程:

   
  1. import psutil

  2. def check_desktop():
  3.      for process in psutil.process_iter(['name']):
  4.          if process.info['name'] == 'explorer.exe':
  5.              return True
  6.      return False
  7.    
复制代码


    这个函数会检查系统中的所有进程,如果找到了"explorer.exe",就返回True。否则返回False。

2. 监听某个特定的Windows事件:另一种可能的方法是监听某个在Windows启动并进入桌面时会触发的事件。这可能需要对Windows的底层工作方式有深入的了解,并可能需要使用像是C#或者C++这样的编程语言。一种可能的事件是"SessionSwitch"事件,当用户在不同的登录会话之间切换时,这个事件会被触发。当用户从登录界面切换到桌面时,这个事件也会被触发。

以上两种方法都需要相应的编程技术,并且可能不会100%准确。因为有些情况下,"explorer.exe"可能会在非桌面环境下运行,或者"SessionSwitch"事件可能在进入桌面之前或之后的其他时间触发。所以在使用这些方法的时候,需要注意可能存在的误判。

此外,如何在检测到已经进入桌面之后执行后续操作,也取决于你的具体需求。例如,你可能需要编写一个持续运行的脚本,定期检查是否已经进入桌面,然后在检测到已经进入桌面之后执行一些操作。或者你可能需要监听某个事件,当这个事件触发时执行一些操作。这些都需要根据你的具体需求来决定。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-31 18:05:06 | 显示全部楼层
如果您想检测电脑已经成功进入桌面的事件,可以尝试以下方案:

1. 注册系统空闲时间的计时器。一般情况下,系统在用户登录后不久就会变得空闲(idle)。我们可以先注册一个系统空闲时间的计时器,当计时器的值大于设定阈值时,则认为用户已经成功进入了桌面。

2. 监听 Windows 事件。当用户成功登录后,Windows 系统会发送一系列的事件(event),这些事件表明了用户已经进入了桌面环境。您可以使用编程语言,如 C#、Python 或 C++等来监听这些事件。具体监听事件的方法可以参考 Microsoft 的文档,例如 “Win32k Event Hooks”。

3. 编写自定义的 Windows 服务。如果您需要在电脑启动后立即执行某些操作,比如监控屏幕截图或网络请求等,请编写一个 Windows 服务程序,并在启动时自动运行。该服务程序可以使用 WinAPI 库函数来实现监听登录事件的功能。

以上是三种可能适用的方案供您参考,具体方案会根据您的使用场景而有所区别。希望能对您有所帮助!

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-1 07:23:58 | 显示全部楼层
检测explorer就可了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-1 09:26:57 | 显示全部楼层
shell:startup
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-1 09:38:53 | 显示全部楼层
本帖最后由 python/print 于 2023-6-1 09:41 编辑

我猜您的意思是开机自启动,代码如下(可以直接使用开机启动执行您的后续操作)
  1. #include <Windows.h>
  2. #include <iostream>
  3. #include <string>

  4. using namespace std;

  5. int main() {
  6.     // 获取当前应用程序的可执行文件路径
  7.     char buffer[MAX_PATH];
  8.     GetModuleFileNameA(NULL, buffer, MAX_PATH);
  9.     string appPath = buffer;

  10.     // 打开注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
  11.     HKEY hKey;
  12.     LONG lResult = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey);
  13.     if (lResult == ERROR_SUCCESS) {
  14.         // 设置键值为应用程序的可执行文件路径
  15.         lResult = RegSetValueExA(hKey, "MyApp", 0, REG_SZ, (const BYTE*)appPath.c_str(), appPath.size());
  16.         if (lResult == ERROR_SUCCESS) {
  17.             cout << "设置开机启动成功!" << endl;
  18.         } else {
  19.             cout << "设置开机启动失败:" << GetLastError() << endl;
  20.         }
  21.         // 关闭注册表
  22.         RegCloseKey(hKey);
  23.     } else {
  24.         cout << "打开注册表失败:" << GetLastError() << endl;
  25.     }
  26.     return 0;
  27. }
复制代码

(问题若解决,别忘了设置最佳答案)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-26 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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