| 分享时间 | 10小时2分钟前 |
| 最后更新 | 4小时49分钟前 |
| 修订版本 | 2 |
| 用户许可 | 可自己使用或修改,不可再分享 |
| Quicker版本 | 1.45.5 |
| 动作大小 | 6.4 KB |
运行C#代码(唤醒微信,快捷键 Ctrl+Alt+W,如有不同,自己更改)
模拟按键B(输入 ^l,锁定微信,快捷键Ctrl+L,如有不同,自己更改)
运行或打开(windows锁屏,填入 rundll32.exe user32.dll,LockWorkStation)
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 |