1. 不显示在任务栏,Alt+Tab也不显示

            protected override CreateParams CreateParams
            {
                get
                {
                    const int WS_EX_APPWINDOW = 0x40000;
                    const int WS_EX_TOOLWINDOW = 0x80;
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle &= (~WS_EX_APPWINDOW);    // 不显示在TaskBar
                    cp.ExStyle |= WS_EX_TOOLWINDOW;      // 不显示在Alt-Tab
                    return cp;
                }
            }
    
  2. 无标题拖动
            [DllImport("user32.dll")]
            public static extern bool ReleaseCapture();
            [DllImport("user32.dll")]
            public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
            public const int SC_MOVE = 0xF010;
            public const int HTCAPTION = 0x0002;
            public const Int32 WM_SYSCOMMAND = 274;
            private void picMain_MouseDown(object sender, MouseEventArgs e)
            {
                ReleaseCapture();
                SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
            }
    
  3. 键盘事件
            protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                int WM_KEYDOWN = 256;
                int WM_SYSKEYDOWN = 260;
                if (msg.Msg == WM_KEYDOWN | msg.Msg == WM_SYSKEYDOWN)
                {
                    switch (keyData)
                    {
                        case Keys.Escape:
                            this.WindowState = FormWindowState.Normal;
                            return false;
                        case Keys.Enter:
                            this.WindowState = FormWindowState.Maximized;
                            return false;
                        case Keys.Up:
                        case Keys.Left:
                            return false;
                        case Keys.Right:
                        case Keys.Down:
                            return false;
                    }
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }
    
  4. 新建Form始终显示在主窗体上面
            [DllImport("user32 ")]
            public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
                Form frm = new Form();
                SetParent(frm.Handle, this.Handle);
    

    检测是否有实例

                bool createNew;
                using (System.Threading.Mutex m = new System.Threading.Mutex(true, "Global\\" + Application.ProductName, out createNew))
                {
                    if (createNew)
                    {
    /// 执行创建工作
    }
     else
                    {
                        /// 激活现有实例
                    }
                }
    
  5. 激活现有实例
            [DllImport("user32.dll")]
            public static extern bool IsIconic(IntPtr hWnd);
            //隐藏窗口,活动状态给令一个窗口
            private const int SW_HIDE = 0;
            //用原来的大小和位置显示一个窗口,同时令其进入活动状态
            private const int SW_SHOWNORMAL = 1;
            //最小化窗口,并将其激活
            private const int SW_SHOWMINIMIZED = 2;
            //最大化窗口,并将其激活
            private const int SW_SHOWMAXIMIZED = 3;
            //用最近的大小和位置显示一个窗口,同时不改变活动窗口
            private const int SW_SHOWNOACTIVATE = 4;
            //用原来的大小和位置显示一个窗口,同时令其进入活动状态
            private const int SW_RESTORE = 9;
            //根据默认 创建窗口时的样式 来显示
            private const int SW_SHOWDEFAULT = 10;
            [DllImport("User32.dll")]
            public static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
            [DllImport("User32.dll")]
            public static extern bool SetForegroundWindow(System.IntPtr hWnd);
    
            public static void RaiseOtherProcess()
            {
                Process proc = Process.GetCurrentProcess();
                Process.GetProcesses();
                foreach (Process otherProc in
                    Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
                {
                    if (proc.Id != otherProc.Id)
                    {
                        IntPtr hWnd = otherProc.MainWindowHandle;
                        if (IsIconic(hWnd))
                        {
                            ShowWindowAsync(hWnd, SW_RESTORE);
                        }
                        SetForegroundWindow(hWnd);
                        break;
                    }
                }
            }
    

windows程序里新窗体不在任务栏显示,无标题拖动,键盘事件,始终显示在主窗体上面,单实例运行等的更多相关文章

  1. 关闭“编辑窗体”后, 主窗体的DatagridView刷新数据的问题

    问题:在关闭一个窗体2后,要刷新窗体1内的datagridview的数据,直接窗体1.datagridview.datasource=dt 是没用的. 解决办法如下: 在主窗体里 创建编辑窗体时 加上 ...

  2. 2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生

    主窗体,子窗体的InitializeComponent(构造函数).Load事件执行顺序 1.主窗体定义事件 new 主窗体() 构造函数进入主窗体InitializeComponent函数,该函数中 ...

  3. 窗体==>>初始Windows程序

    初识Windows程序 01.创建Windows程序(VS) 01.打开Visual Studio开发工具 02.选择"文件"→"新建"→"项目&qu ...

  4. 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序。

    原文 如果您想确保Windows 10在新用户登录时不安装内置应用程序,则必须删除所有配置的应用程序. 本文的内容 已安装与配置的应用程序 删除配置的应用程序 安装与配置的应用程序^ 在介绍如何删除所 ...

  5. 第三章—Windows程序

    这一章我都不知道该如何写了,呵呵~~ 毕竟,Win32是一个非常深奥的系统,目前还容不得我这种 小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以 ...

  6. Windows程序内部运行机制 转自http://www.cnblogs.com/zhili/p/WinMain.html

    一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...

  7. Visual Studio 创建C++或C#Windows程序

    使用工具Visual Studio,创建一个C++或C#Windows程序,在主窗口中显示“Hello World”,用户可以用鼠标拖动“Hello World”在主窗口中移动 首先创建一个项目​ 选 ...

  8. 深入浅出话VC++(1)——Windows程序内部运行机制

    一.引言 要想熟练掌握Windows应用程序的开发,首先需要理解Windows平台下程序运行的内部机制,然而在.NET平台下,创建一个Windows桌面程序,只需要简单地选择Windows窗体应用程序 ...

  9. windows程序消息机制(Winform界面更新有关)

    windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Win ...

随机推荐

  1. 02shell编程环境的搭建

    02shell编程环境的搭建 [02]Shell编程 02shell编程环境的搭建 在不同的操作系统上搭建shell编程环境 Linux Windows Mac 编辑器的选择 系统环境的搭建 注: 选 ...

  2. JVM实用参数(五)新生代垃圾回收

    本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation).首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数. 单纯从 ...

  3. mint安装相关数据库lib

    sudo apt-get install libmysqlclient-dev sudo apt-get install sqlite3 libsqlite3-dev

  4. #include <objsafe.h>//OCX控件在IE8浏览器下不能使用问题

    一.OCX控件开发常见的问题 1.OCX控件在IE8浏览器下不能使用问题 原因:IE8会拦截OCX控件的方法. 解决方法:在OCX控件开发时加入安全接口. (1)在有"Crtl"字 ...

  5. linux基础学习

    1.默认不写端口号的就是80端口 本地ip:localhost或者127.0.0.1 2.用户管理 id和whoami:可以查看当前用户 who和w查看当前已经登录的用户 (1)添加用户,用户默认的家 ...

  6. GNU/Linux复习笔记(1)

    第一次接触GNU/Linux还是大四上学期实习的那两个月在window里装了 个虚拟机玩红帽的系统,那段时间稍微学了一点命令就不玩了.后来大四下学期认识了王总,装了双系统,那段时间又对linux有了进 ...

  7. RSA加密算法总结

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进 ...

  8. Linux网络基本配置

    一.Linux网络配置文件 1.  /etc/sysconfig/network-scripts/ifcfg-eth0 文件 在Red Hat系统中,系统网络设备的配置文件保存在/etc/syscon ...

  9. java技术 spring 配置

    spring 的IOC是反射注入,用来管理对象的创建与销毁.一般使用都是在启动的web服务器的时候就创建了对象,可以选择自动装配对象管理,将对象引用实现与引用分开.采用的xml配置方式.及大减少了各个 ...

  10. 用world写blog

    一级目录 怎么写呢? 这个和markdown那个更加方便呢? 据说插入表格有问题 我试一试         二级目录 这个大小还不错 添加第三季目录呢 三级目录 添加目录必须要用鼠标么? #inclu ...