这个问题源于做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任务管理器的“切换到”这个功能应该也可以用这个方法实现。