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

  • 相关阅读:
    Github开始强制使用PAT(Personal Access Token)了
    STM32F401的外部中断EXTI
    STM32F401的PWM输出
    STM32F103和STM32F401的ADC多通道采集DMA输出
    nRF24L01无线模块笔记
    51单片机(STC89C52)在Ubuntu下的开发
    51单片机(STC89C52)的中断和定时器
    51单片机的软件和硬件PCA/PWM输出
    Zadig 云原生持续交付 面向开发者设计的开源、高可用 CI/CD
    人生 乐观 悲观 英雄
  • 原文地址:https://www.cnblogs.com/kangs/p/3040549.html
Copyright © 2020-2023  润新知