自动设置 Teams 状态

自动设置 Teams 状态

我希望当我锁定 PC 时,我的 Microsoft Teams 状态自动设置为“马上回来”,当我解锁 PC 时,状态自动设置为“可用”。这可能吗?

我有:

  1. 通过谷歌搜索,查看是否有任何相关的 CLI 开关/选项可以插入,teams.exe -?然后teams.exe /?运行字符串teams.exe好像没有。

  2. 使用进程监视器/procmon 跟踪状态更改时的活动,但没有发现任何有用的信息。我发现的唯一值得注意的东西是文件中的以下条目%appData%\Microsoft\Teams\logs.txt,但它没有给我带来任何有用的信息:

    Fri Jul 03 2020 13:23:17 GMT+0100 (British Summer Time) <3292> -- event -- panelaction: Action.Outcome: setpresence, DataBag.PresenceState: beRightBack, Action.Gesture: click, Action.Scenario: setPresenceFromTrayMenu, Action.ScenarioType: other, ppChannel: Production::CC, distSrc: PROPLUS_O365BusinessRetail, ppInstallMode: UPDATE, autoStartPolicy: undefined, vdiMode: 0, eventpdclevel: 2, 
    
  3. 研究过使用 AutoHotkey 鼠标宏,但我并没有真正尝试过,因为我希望找到更好的解决方案,我不确定它是否可以在锁定和解锁时起作用,而且这有点棘手,因为只能通过首先将鼠标悬停在系统托盘或应用内上下文菜单项上才能访问状态。

答案1

当锁定和解锁我的 Windows 会话时,Teams 需要一两秒钟来更新其图标,在此期间,我注意到它会自动将其状态设置为离开和返回,这对我来说已经足够了。

在此处输入图片描述

如果其他人设法找到以编程方式控制团队状态的方法,那么我会将接受的答案更改为他们的答案。

答案2

有一种方法可以通过编程方式设置 MS Teams 状态,请参阅 https://docs.microsoft.com/en-us/graph/api/presence-setpresence?view=graph-rest-beta&tabs=http

您还可以将其与 Microsoft Teams Powershell 模块结合使用,有一个Connect-Teamscmdlet,请参见此处 -https://docs.microsoft.com/en-us/powershell/module/teams/connect-microsoftteams?view=teams-ps

然而这可能需要额外的设置——你可能需要通过 Azure 应用程序访问 Microsoft Graph API(请参阅https://docs.microsoft.com/en-us/powershell/module/teams/connect-microsoftteams?view=teams-ps#parameters),关于-AccessTokens参数的部分。

答案3

注意:如果您有能力向组织注册 Azure 连接的应用程序(并接收客户端 ID/客户端密钥),请参阅Đrakenus 的回答,这样更合适。

我已经创造了一些对我有用的东西,但是这是黑客行为,所以请提前原谅我。危急时刻需要采取非常措施......

我使用 Javajava.awt.Robot手动单击 Teams 中要更改的状态。

以下是一个例子:

import java.awt.*;
import java.awt.event.InputEvent;
import java.io.IOException;

public class StatusChanger {

    private static final int waitBetweenSteps = 300;
    private static Robot robot;

    public static void main(String[] args) throws IOException, InterruptedException, AWTException {
        robot = new Robot();

        // Get the status from the first arg to the program, options are
        // away, available, busy, or offline.
        final String status = args[0];

        // This will bring the Teams window into focus on macOS, there is likely
        // a similar solution for Windows.
        runCommand(new String[]{"osascript", "-e", "tell application \"System Events\" to tell process \"Microsoft Teams\" to set frontmost to true"});

        // Move mouse to the profile icon in the top left of the Teams window 
        // and click the icon.
        mouseMove(3760, 50);
        click();

        // Move to the status in the modal that appears and click the status.
        mouseMove(3570, 140);
        click();

        // Move the mouse to the correct status position based on the argument.
        switch (status) {
            case "away":
                mouseMove(3600, 315);
                break;
            case "busy":
                mouseMove(3600, 220);
                break;
            case "available":
                mouseMove(3600, 180);
                break;
            case "offline":
                mouseMove(3600, 360);
                break;
        }
        // Click the new status.
        click();
        System.out.println("Status was set to " + status);
    }

    private static void runCommand(String[] command) throws IOException, InterruptedException {
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(command);
        process.waitFor();
        Thread.sleep(waitBetweenSteps);
    }

    private static void click() throws InterruptedException {
        robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
        Thread.sleep(waitBetweenSteps);
    }

    private static void mouseMove(int x, int y) throws InterruptedException {
        robot.mouseMove(x, y);
        Thread.sleep(waitBetweenSteps);
    }
}

然后我将其构建到一个 jar 中(您也可以用编译该类javac)并运行以下命令:

# Set status to Away
java -jar TeamsStatusChanger.jar away

# Set status to Busy
java -jar TeamsStatusChanger.jar busy

# Set status to Available
java -jar TeamsStatusChanger.jar away

# Set status to Offline
java -jar TeamsStatusChanger.jar offline

然后,您可以使用 cron 在特定时间段内自动设置您的状态:

# set Teams status to offline at 5pm
0 17 * * * java -jar /path/to/TeamsStatusChanger.jar offline

有几点需要注意:

  • 它要求您保持 Teams 运行,但肯定可以改进以检查 Teams 是否正在运行,如果没有运行则启动它/等待。
  • 它要求您将 Teams 窗口保持在同一位置(在我的情况下,是屏幕的右上角靠近显示器的边缘)。
  • 此实用程序的坐标是针对我的显示器尺寸(3840x1600)进行硬编码的。您需要mouseMove使用每个“点击”区域的正确坐标来更新调用(请参阅下一点)。
  • 在 macOS 上,您可以使用屏幕截图工具找到您自己显示器上每个“点击”区域的坐标,方法是按 Cmd+Shift+4 并将鼠标悬停在要点击的区域上。屏幕坐标将显示在十字准线旁边。
  • 如果您使用多台显示器,我不确定这会产生什么效果,它可能需要进行一些额外的调整或仅在主显示器上起作用。

相关内容