说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何在后台弹出窗体(窗口置顶)?

编辑:说三道四文库 发布时间:2017-07-27 04:48
HTML文档下载 WORD文档下载 PDF文档下载
好像设置topmost没有效果
比如后台程序(msn)之类的,探出消息框
从后台弹出窗体是什么意思。

Topmost 
或者 ShowDialog()方法来显示窗体。

消息框就是 MessageBox.Show()的各种重载。
 MessageBox.Show()
up
你问题描述清楚啊
一个测试程序
Program.cs
创建TestForm窗体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace TestTopMost
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TestForm());
        }
    }
}
TestForm.cs
每1秒产生一个TestMessage窗口

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace TestTopMost
{
    public partial class TestForm : Form
    {
        private System.Timers.Timer m_timer = new System.Timers.Timer(1000);

        private static bool m_bThreadRunning = false;
        private static object privateObjectLock = new object();

        static bool GetThreadRunning()
        {
            bool bReturn = false;
            lock (privateObjectLock)
            {
                bReturn = m_bThreadRunning;
            }
            return bReturn;
        }

        static void SetThreadRunning(bool run)
        {
            lock (privateObjectLock)
            {
                m_bThreadRunning = run;
            }
        }

        public TestForm()
        {
            InitializeComponent();
            m_timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerHandler);

            m_timer.AutoReset = true;
            m_timer.Enabled = true;
        }

        public void TimerHandler(object source, System.Timers.ElapsedEventArgs e)
        {
            Thread thread = new Thread(ThreadFunc);
            thread.Start();
        }

        public static void ThreadFunc()
        {
            if (GetThreadRunning() == false)
            {
                SetThreadRunning(true);

                TestMessage msg = new TestMessage();
                msg.ShowDialog();

                SetThreadRunning(false);
            }
        }
    }
}
TestMessage.cs
弹出1秒钟之后销毁自己

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestTopMost
{
    public partial class TestMessage : Form
    {
        private System.Timers.Timer m_timer = null;

        public TestMessage()
        {
            InitializeComponent();

            m_timer = new System.Timers.Timer(1000);
            m_timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerHandler);
            m_timer.AutoReset = false;
            m_timer.Enabled = true;

            TopMost = true;
        }
        public void TimerHandler(object source, System.Timers.ElapsedEventArgs e)
        {
            Close();
        }
    }
}
这个测试代码无法在当前窗口为其他程序的时候,弹出TestMessage窗体并置顶
后来在form load的时候调用api setforegroundwindow + setwindowpos,可以了

        private System.Timers.Timer m_timer = null;
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern System.IntPtr GetForegroundWindow();
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern bool SetForegroundWindow(IntPtr hWnd);


this.Load += delegate 
            {
                if (Handle != GetForegroundWindow())
                    SetForegroundWindow(Handle);
                SetWindowPos(Handle, -1, 0, 0, 0, 0, 1 | 2);
            };
Form frm=new Form1();
frm.TopMost=True;
frm.Show();
winForm里这样:

Form frm=new Form1(); 
frm.TopMost=True; 
frm.Show();

webForm里这样:

            System.Text.StringBuilder sb = new StringBuilder();
            sb.Append("<script>");
            sb.Append("window.open('BBSTieSearch.aspx"','','fullscreen =0,scrollbars=0,toolbar=0,resizable=1,top=100px,left=100px,width=800px,height=500px')");
            sb.Append("</script>");
            Page.ClientScript.RegisterStartupScript(typeof(string), "k1", sb.ToString());
引用 9 楼 bartoooon 的回复:
后来在form load的时候调用api setforegroundwindow + setwindowpos,可以了 

C# code
        private System.Timers.Timer m_timer = null;
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        private static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int Width, int Height, int flags);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        priv…


厉害!~~
Android线程优先级设置方法 Android Zip文件解压缩代码 Android开发之设置断点单步调试 Android裁剪图片最简单方法 Android平台待开发软件列表 Android开发知识-3月13日总结 Android平板开发注意点 Android 3.0自带的天气预报例子代码 Loader和Fragment使用示例代码 LoaderManager - Android 3.0新特性 帮助ADT改进DDMS中的Logcat中文乱码问题 Fragment API将兼容Android 1.6到3.0 通过Linux Shell实现Android横竖屏切换 Android高手应该精通哪些内容? Android 2.2开始resources.arsc有改变 分析你的Android ANR错误 API Level对照表,更新至2.3.3 ProcessDialog结合Thread处理耗时操作 Fragment示例代码 DialogFragment示例代码 ActionBar示例代码 (二) Action Bar示例代码 (一) ActionBar使用方法 - Android活动栏(二) Action Bar使用方法 - Android活动栏(一) DialogFragment类介绍 Android Fragment使用详解 Fragment对比Activity - Android碎片介绍 Android 3.0新增日历控件CalendarView Android JSON写入类 - JsonWriter Android JSON解析类 - JsonReader Android获取本机电话号码 想考高程但不知买什么参考书大家帮忙 菜鸟问题:各位大侠帮忙看看 如何给panel加滚动条,请教 关于程序编译的问题: 问一个数据库文件的问题! PB7 连接 MSSQLServer 6.5为什么需要那么长的时间并且内存要占用100多M? 关于使用VB6创建的控件后的部署问题 Delphi与bcb有何联系与差异 关于WIN2000网络上的问题 盼高手来解决,阿菜勿进 我用PHP通过ADO连接ACCESS 为什么i=很大 怎么样改变statusbar的某个Panels的字体颜色 如何制作MID窗体的背景图片平铺? sqlserver有一个带参数的存储过程,为什么不能生成DW.?? 急(送100分):多个image控件如何用imagexxx使用? 如何得到CPU的时钟频率? 各位大佬,0x1 是什么? 一个页面只让一个用户来修改 请问哪儿有Lotus Notes C API的教程?以及要进行编程必须进行哪些配置? PB7连接MSSQLServer6.5的时候为什么需要那么长的时间和占用100多M的内存? 推荐在代理服务器上安装什么邮件网关软件? 在线等待 请各位帮助 如何得到开机时间? 我想把smalldatetime类型显示为“yyyy_mm_dd 00:00:00” 急须一个完全免费的MP3刻录软件 怎样修改xml的节点的值? Tabpage(子项)可以改变颜色,但Tabcontrol(父项)改变不了颜色。高手帮忙。 MM说:“你可真够没良心的!”! (邀请水园MM请参与) 测试流程! 在用ADO时如何判断在所取得的记录中,值为null的的情况 急(送100分):多个image控件如何用imagexxx使用? 关于数组的问题。 Weblogic 死锁的问题 想到亚信去,请各位兄台给点建议!(有分!) 请问能不能用System.Drawing对象在一个页里里画多张图? 索引和自增字段 关于对话框? 求能人?或给思路 请问哪儿有Lotus Notes C API的教程?以及要进行编程必须进行哪些配置? 100分求助:怎麼判斷數據庫服務器存在與否? JUnit重复测试的问题 请问一个hyperlink简单问题 求助:datagrid中控件事件的使用问题? 在C中写文件的内容,在线等待!!! 装了linux后,我的win2000和linux的时间老是都不对了 如果结束会话 如何送分呀? 谁有这个文档的中文资料,谢谢,高分奉送!!! 急!!!请问系统恢复盘的问题! 自定义数据类型如何定义?(数组) dw疑问 请问一下,李维的哪几本书比较好,我有VC基础,想学学DELPHI,望各位给个建议谢谢! 言承旭新欢池间晶子气质完胜林志玲 遭王力宏即将亮相好声音微博预告“巨二”哈林遭张学友揭发:孤独等爱的老铁人从对手到半路父女钟伟强:我给毕夏80《兰陵王》毛林林晒拍摄搞笑照力证自己Angelababy金汎为爱深陷谜案独家连线:阚立文赛前感冒朱克曝几乎无终极考核添新花样:新增Double环陈妍希演小龙女被骂 细数历届绝色小龙每个人都有一张不堪回首的童年照片《中国梦之声》学员艾菲晒美照反驳整容《好声音》两组战队考核收视比拼汪峰险李代沫为事业暂放感情费玉清劝其恋爱也陶虹大露裸背与男子热拥遭咸猪手乱摸面港姐10强素颜照惊吓路人 网友:是鬼专访姚贝娜×林育群:我们的失误是相互​贾轶男曝汪峰选人纠结:想在抢人时把17岁最萌女汉子走红 天使面孔猛男身杭州男子认为银行强拉存款 为出气狂办浙江多所中学入围百所重点中学 官方称杭州城东发生电梯关人事件 十八个姑娘游戏《大富翁》将拍电影 网友脑洞大开[品牌网报]大理古城地摊泛滥明年将全利用微信招嫖卖淫 六人被处理不熟须“走程序”熟人立马就办(读者聚江苏装修制图新标准出炉 装修维权将2015两岸企业家紫金山峰会在宁开幕要想不毁容这些您要懂(民生三问·谁整跨省专业盗墓团伙落网黎瑞刚的华人文化为何能引来“二马”相谷歌高管来中国猛夸华为 称其市场占有贾跃亭发微博推乐1s,明星们纷纷拿出奇酷下战书挑华为魅族小米 无人回应老敢不敢对照你的出生日期,看看自己是什贾跃亭又减持32亿借乐视 刘姝威们赶万达院线完成并购澳大利亚第二大院线运“火箭弹”险些砸到湖州村民 真实“身陕金所122会员11.03白银、长安广州特警训练照曝光华智教育近期事业单位笔试面试课程长上影阴线背后的秘密,散户还是多看少北京市住建委:东西城获调配1896套
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘