开发者社区> 大东瓜123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

使用API函数查找窗体并激活

简介:  生成程序时,有时需要限制用系统中只有一个实例在运行,这就需要我们在检测到系统中已有程序的实例在运行时,将这个已经在运行的实例,激活并显示在用户面前这里主要用到了FindWindow ,和 SetForegroundWindow这两个函数     /// <summary>/// The FindWindow API/// </summary>/// <
+关注继续查看

 生成程序时,有时需要限制用系统中只有一个实例在运行,这就需要我们在检测到系统中已有程序的实例在运行时,将
这个已经在运行的实例,激活并显示在用户面前
这里主要用到了FindWindow ,和 SetForegroundWindow这两个函数

 

  /// <summary>
/// The FindWindow API
/// </summary>
/// <param name="lpClassName">the class name for the window to search for</param>
/// <param name="lpWindowName">指向一个指定了窗口名(窗口标题)的空结束字符串。
/// 如果该参数为空,则为所有窗口全匹配。</param>
/// <returns>如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为NULL</returns>
[DllImport("User32.dll", CharSet = CharSet.Auto, EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindow(String lpClassName, String lpWindowName);

/// <summary>
/// 函数功能:该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。
/// 这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。
/// </summary>
/// <param name="hwndParent">要查找子窗口的父窗口句柄。
///  如果hwnjParent为NULL,则函数以桌面窗口为父窗口,查找桌面窗口的所有子窗口。
///</param>
/// <param name="hwndChildAfter">子窗口句柄。查找从在Z序中的下一个子窗口开始。
/// 子窗口必须为hwndPareRt窗口的直接子窗口而非后代窗口。
/// 如果HwndChildAfter为NULL,查找从hwndParent的第一个子窗口开始。
/// 如果hwndParent 和 hwndChildAfter同时为NULL,
/// 则函数查找所有的顶层窗口及消息窗口。</param>
/// <param name="lpszClass"></param>
/// <param name="lpszWindow"></param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
public static extern IntPtr FindWindowEx(int hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow);



/// <summary>
/// 该函数设置指定窗口的显示状态。
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="nCmdShow">指定窗口如何显示</param>
/// <returns></returns>
[DllImport("user32.dll", EntryPoint = "ShowWindow")]
public static extern IntPtr ShowWindow(IntPtr hWnd, int nCmdShow); 


/// <summary>
/// 函数功能:该函数将创建指定窗口的线程设置到前台,
/// 并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。
/// 系统给创建前台窗口的线程分配的权限稍高于其他线程。
/// </summary>
/// <param name="hWnd">将被激活并被调入前台的窗口句柄</param>
/// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零</returns> 
[DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
public static extern bool SetForegroundWindow(IntPtr hWnd);



//使用方法
 string winclass = "WindowsForms10.Window.8.app.0.378734a";
IntPtr winfrom 
= cxyApi.FindWindow(winclass, "Form1");
cxyApi.ShowWindow(winfrom, APINameHelper.SW_NORMAL);
cxyApi.SetForegroundWindow(winfrom);


//一些常量
public class APINameHelper
{
    
public const int SW_HIDE = 0//隐藏窗口,活动状态给令一个窗口 
    /// <summary>
    
/// 用原来的大小和位置显示一个窗口,同时令其进入活动状态
    
/// </summary>
    public const int SW_SHOWNORMAL = 1;  
    
public const int SW_NORMAL = 1;
    
public const int SW_SHOWMINIMIZED = 2;
    
public const int SW_SHOWMAXIMIZED = 3;
    
public const int SW_MAXIMIZE = 3;
    
public const int SW_SHOWNOACTIVATE = 4//用最近的大小和位置显示一个窗口,同时不改变活动窗口
    public const int SW_SHOW = 5;//用当前的大小和位置显示一个窗口,同时令其进入活动状态
    public const int SW_MINIMIZE = 6;//最小化窗口,活动状态给令一个窗口
    public const int SW_SHOWMINNOACTIVE = 7;//最小化一个窗口,同时不改变活动窗口
    public const int SW_SHOWNA = 8;//用当前的大小和位置显示一个窗口,不改变活动窗口
    public const int SW_RESTORE = 9//与 SW_SHOWNORMAL  1 相同
    public const int SW_SHOWDEFAULT = 10;
    
public const int SW_FORCEMINIMIZE = 11;
    
public const int SW_MAX = 11;


    
public const int WM_CHAR = 0x0102;
    
public const int WM_KEYDOWN = 0x0100;
    
public const int WM_KEYUP = 0x0101;

    
public const int WM_PASTE = 0x0302;
    
public const int WM_CLEAR = 0x0303;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
API各函数作用简介
API各函数作用简介 1.控件与消息函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconicWindows 排列一个父窗口的最小化子窗口 AttachThreadInput ...
872 0
【翻译】ASP.NET Web API是什么?
原文 【翻译】ASP.NET Web API是什么? 说明:随微软ASP.NET MVC 4一起发布的还有一个框架,叫做ASP.NET Web API。目前国内关注这项技术的人似乎还很少,这方面的文章也不多见。
1183 0
【ASP.NET Web API教程】1 ASP.NET Web API入门
原文 【ASP.NET Web API教程】1 ASP.NET Web API入门 Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 摘自:http://www.
1322 0
【ASP.NET Web API教程】2 创建各种Web API
原文 【ASP.NET Web API教程】2 创建各种Web API Chapter 2: Creating Web APIs第2章 创建各种Web API 本文引自:http://www.asp.net/web-api/overview/creating-web-apis In this chapter, you'll learn:本章你将学习: End-to-end tutorials and samples for ASP.NET Web APIASP.NET Web API的端对端教程和示例。
1038 0
【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API
原文 【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API 2.1 Creating a Web API that Supports CRUD Operations2.1 创建支持CRUD操作的Web API By Mike Wasson | January 28,...
1113 0
【ASP.NET Web API教程】2.3 与实体框架一起使用Web API
原文:【ASP.NET Web API教程】2.3 与实体框架一起使用Web API 2.3 Using Web API with Entity Framework 2.3 与实体框架一起使用Web API 本小节是ASP.NET Web API第2章的第3小节,原文共分为7个部分,分成了7篇文章,故这里也分为7个帖子贴出,以下是本小节的第1部分 — 译者注。
1226 0
【ASP.NET Web API教程】2.3.2 创建域模型
原文:【ASP.NET Web API教程】2.3.2 创建域模型 Part 2: Creating the Domain Models 第2部分:创建域模型 本文引自:http://www.asp.
1115 0
【ASP.NET Web API教程】2.3.3 创建Admin控制器
原文:【ASP.NET Web API教程】2.3.3 创建Admin控制器 注:本文是【ASP.NET Web API系列教程】的一部分,如果您是第一次看本博客文章,请先看前面的内容。 Part 3: Creating an Admin Controller 第3部分:创建Admin控制器 本文引自:http://www.
787 0
【ASP.NET Web API教程】2.3.4 创建Admin视图
原文:【ASP.NET Web API教程】2.3.4 创建Admin视图 注:本文是【ASP.NET Web API系列教程】的一部分,如果您是第一次看本博客文章,请先看前面的内容。 Part 4: Adding an Admin View 第4部分:添加Admin视图 本文引自:http://www.
835 0
【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
原文:【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI 注:本文是【ASP.NET Web API系列教程】的一部分,如果您是第一次看本博客文章,请先看前面的内容。
867 0
+关注
大东瓜123
互联网码农一枚
文章
问答
文章排行榜
最热
最新
相关电子书
更多
数据资源的基础设施API总线
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载
重保场景及API安全指南
立即下载