zoukankan      html  css  js  c++  java
  • C#将另一个应用程序的窗口移动到前端的问题

         这个问题源于做C#项目的时候,要实现的一个功能:桌面应用程序,点击图标,弹出登录界面,输入用户名及密码,登录;如果该用户名已登录,则不创建程序的新实例,而是直接将该用户的应用程序弹出,置于桌面前端,类似于Windows Alt+Tab功能。

         实现这个功能有多个函数,其中,尝试了:SetForegroundWindow(IntPtr hWnd)、SwitchToThisWindow(IntPtr hWnd,bool isRestore)。要使用这两个函数,需要:using System.Runtime.InteropServices,然后导入user32.dll:[DllImport("user32.dll")]。SetForegroundWindow(IntPtr hWnd)函数不能达到预期,只会在windows状态栏将应用程序改成当前窗口的状态(xp)。SwitchToThisWindow(IntPtr hWnd,bool isRestore)函数能实现要求。hWnd参数为进程句柄,isRestore参数指示是否要模拟一个Alt+Tab动作(将程序窗口提到前端)。要获得程序的进程句柄,方法如下。

    using System.Diagnostics;

    Process[] localByName=Process.GetProcessesByName(processName); //string processname 为程序运行时进程名称,可在Windows任务管理器--->进程--->映像名称中找到

    IntPtr hWnd=localByName[i].MainWindowHandle; //一个应用程序可能有打开了好几个(如不同用户),i取决于你要获得哪个

    SwitchToThisWindow(hWnd,true);

    这样就可以了。   

    类似windows任务管理器的“切换到”这个功能应该也可以用这个方法实现。

  • 相关阅读:
    退役了
    Luogu1835 素数密度_NOI导刊2011提高(04
    Luogu1941 飞扬的小鸟
    Luogu4711 「化学」相对分子质量
    CF285E Positions in Permutations
    JZOJ 5944
    BZOJ3827: [Poi2014]Around the world && CF526E Transmitting Levels
    BZOJ3831: [Poi2014]Little Bird
    CF526F Pudding Monsters
    运算符重载
  • 原文地址:https://www.cnblogs.com/kangs/p/3040549.html
Copyright © 2011-2022 走看看