...通过句柄激活窗口 相对窗口点击 通过句柄关闭窗口】
发布网友
发布时间:1小时前
我来回答
共1个回答
热心网友
时间:1小时前
个人感觉,c# 托管的代码没跨进程这个权限。
如果可行也是用了全局消息钩子
如下 但是杀毒软件估计会各种弹出提示吧
//常用的
DllImport("user32.dll", EntryPoint = "EnumWindows", SetLastError = true)]
public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);
[DllImport("user32.dll", EntryPoint = "GetParent", SetLastError = true)]
public static extern IntPtr GetParent(IntPtr hWnd);
[DllImport("user32.dll", EntryPoint = "GetWindowThreadProcessId")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);
[DllImport("user32.dll", EntryPoint = "IsWindow")]
public static extern bool IsWindow(IntPtr hWnd);
[DllImport("kernel32.dll", EntryPoint = "SetLastError")]
public static extern void SetLastError(uint dwErrCode);
//这个外部函数(非托管) 可以向句柄发送消息,关闭事件就是这个
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
/// 你的代码段 if块
const int WM_CLOSE = 0x0010;
if (ptrWnd != IntPtr.Zero && IsWindow(ptrWnd))
{
SendMessage(ptrWnd, WM_CLOSE, 0, 0); // 调用了 发送消息 发送关闭窗口的消息
}
else
{
ptrWnd = IntPtr.Zero;
}
如果你的程序 有这个权限 是一定可以关闭窗口的