c#本段代码需要如何实现?【通过句柄激活窗口 相对窗口点击 通过句柄关闭窗口】

Process[]processes=Process.GetProcessesByName("123");foreach(Processpinprocesses){Int... Process[] processes = Process.GetProcessesByName("123"); foreach (Process p in processes) { IntPtr windowHandle = p.MainWindowHandle;// 获取句柄 if (windowHandle != IntPtr.Zero) { MessageBox.Show("找到窗口"); //通过句柄激活窗口 //鼠标点击x=10y=10 //通过句柄关闭窗口 } else MessageBox.Show("没有找到窗口"); } 展开
 我来答
sniperfivd24c6
2017-02-07 · TA获得超过247个赞
知道小有建树答主
回答量:273
采纳率:100%
帮助的人:209万
展开全部

个人感觉,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;
}

如果你的程序 有这个权限 是一定可以关闭窗口的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式