离开一下

离开一下 公开 已发布

如何安装动作?

适用于
分类(旧)
Windows 组合操作
关键词



更多信息
分享时间 10小时2分钟前
最后更新 4小时49分钟前
修订版本 2
用户许可 可自己使用或修改,不可再分享
Quicker版本 1.45.5
动作大小 6.4 KB

分享到

「完美锁定微信+windows锁屏+天依蓝」

简介

  1. 运行C#代码(唤醒微信,快捷键 Ctrl+Alt+W,如有不同,自己更改)

  2. 模拟按键B(输入 ^l,锁定微信,快捷键Ctrl+L,如有不同,自己更改)

  3. 运行或打开(windows锁屏,填入 rundll32.exe user32.dll,LockWorkStation)

c#代码如下

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;

public static class WeChatFinalSafe
{
    [DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
    [DllImport("user32.dll")] private static extern bool IsIconic(IntPtr hWnd);
    [DllImport("user32.dll")] private static extern bool IsWindowVisible(IntPtr hWnd);
    [DllImport("user32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd);
    [DllImport("user32.dll")] private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam);
    [DllImport("user32.dll")] private static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
    [DllImport("user32.dll")] private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
    [DllImport("user32.dll")] private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo);

    private delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam);
    private static IntPtr targetHwnd = IntPtr.Zero;

    public static void Exec(dynamic context)
    {
        targetHwnd = IntPtr.Zero;
        Process[] processes = Process.GetProcessesByName("Weixin");
        if (processes.Length == 0) return;

        foreach (var p in processes)
        {
            EnumWindows(new EnumWindowsProc(EnumTheWindows), (IntPtr)p.Id);
            if (targetHwnd != IntPtr.Zero) break;
        }

        if (targetHwnd == IntPtr.Zero) return;

        // 1. 如果最小化,直接还原
        if (IsIconic(targetHwnd))
        {
            ShowWindow(targetHwnd, 9); // SW_RESTORE
        }
        // 2. 如果隐藏到托盘(不可见),使用微信自己的全局快捷键 Ctrl+Alt+W 唤醒
        else if (!IsWindowVisible(targetHwnd))
        {
            keybd_event(0x11, 0, 0, UIntPtr.Zero); // Ctrl 按下
            keybd_event(0x12, 0, 0, UIntPtr.Zero); // Alt 按下
            keybd_event(0x57, 0, 0, UIntPtr.Zero); // W 按下
            Thread.Sleep(50);
            keybd_event(0x57, 0, 2, UIntPtr.Zero); // W 抬起
            keybd_event(0x12, 0, 2, UIntPtr.Zero); // Alt 抬起
            keybd_event(0x11, 0, 2, UIntPtr.Zero); // Ctrl 抬起
            
            // 给微信 500 毫秒的时间,让它通过自己的逻辑慢慢弹出来
            Thread.Sleep(500); 
        }

        // 3. 如果微信现在在桌面上,强行按一下 Alt 键,绕过 Windows 的焦点锁定机制
        keybd_event(0x12, 0, 0, UIntPtr.Zero);
        keybd_event(0x12, 0, 2, UIntPtr.Zero);

        SetForegroundWindow(targetHwnd);
    }

    private static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam)
    {
        uint processId;
        GetWindowThreadProcessId(hWnd, out processId);
        if (processId == (uint)lParam)
        {
            StringBuilder sb = new StringBuilder(256);
            GetWindowText(hWnd, sb, 256);
            if (sb.ToString() == "微信")
            {
                targetHwnd = hWnd;
                return false;
            }
        }
        return true;
    }
}

作者所声明的动作特征:
  • 依赖目标软件的内置快捷键

最近更新

修订版本 更新时间 制品 审核状态 更新说明
2 4小时49分钟前 V1 当前 V1 版本 节省0.5秒
1 10小时2分钟前 V1

最近讨论

暂无讨论