小布丁OwO 发表于 2023-5-31 09:30:31

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

一般电脑开机启动后,需要输入密码进入桌面;我想检测的是进入桌面这个事件,检测到之后进行我的后续操作。请大家不吝赐教!

isdkz 发表于 2023-5-31 09:30:32

如果您正在编写某种脚本或应用程序,那么可能需要一种方法来检测Windows是否已经加载并进入了桌面。这可能需要编程技术,因为Windows本身并没有内置的方式来轻松地通知您是否已经进入了桌面。

以下是两种可能的方法:

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

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

    import psutil

def check_desktop():
   for process in psutil.process_iter(['name']):
         if process.info['name'] == 'explorer.exe':
             return True
   return False
   

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

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

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

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

sfqxx 发表于 2023-5-31 18:05:06

如果您想检测电脑已经成功进入桌面的事件,可以尝试以下方案:

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

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

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

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

求最佳答案{:10_254:}

陈尚涵 发表于 2023-6-1 07:23:58

检测explorer就可了

歌者文明清理员 发表于 2023-6-1 09:26:57

shell:startup

python/print 发表于 2023-6-1 09:38:53

本帖最后由 python/print 于 2023-6-1 09:41 编辑

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

using namespace std;

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

    // 打开注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
    HKEY hKey;
    LONG lResult = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey);
    if (lResult == ERROR_SUCCESS) {
      // 设置键值为应用程序的可执行文件路径
      lResult = RegSetValueExA(hKey, "MyApp", 0, REG_SZ, (const BYTE*)appPath.c_str(), appPath.size());
      if (lResult == ERROR_SUCCESS) {
            cout << "设置开机启动成功!" << endl;
      } else {
            cout << "设置开机启动失败:" << GetLastError() << endl;
      }
      // 关闭注册表
      RegCloseKey(hKey);
    } else {
      cout << "打开注册表失败:" << GetLastError() << endl;
    }
    return 0;
}
(问题若解决,别忘了设置最佳答案)
页: [1]
查看完整版本: 有没有好的方法判断是否已经进入windows桌面?