winform C#程序怎么样才能在浏览器中运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform C#程序怎么样才能在浏览器中运行相关的知识,希望对你有一定的参考价值。

参考技术A t
framework的机器上运行的方法。因为.net程序依赖于.net
framework运行时,微软对这个运行时是非常谨慎的,不停地提供安全更新等服务,如果你选择了像飞信那样的“非官方”方案,你集成在你应用程序里面的运行时如果发现有安全危险,微软是没有办法帮你最更新的。很不推荐那样做!
参考技术B 用c#直接启动进程就可以了。
取到360的执行程序位置,用下面的代码就可以运行了。
system.diagnostics.process
process
=
new
system.diagnostics.process();
string
browserpath
=
"c:\\360browser.exe";
process.startinfo.filename
=
browserpath;
process.start();

我用C# 编写的winform 最小化到托盘了

如果双击桌面图标 判断该程序是否运行 如果运行 调出托盘中该程序 如果没有运行则启动该程序 要怎么写啊???就想千千静听一样。

这个或许需要用一个WINAPI函数SendMessage。其实大部分的WINAPI函数,C#都已经封装好,但是这次用到的这个就不清楚了,可能是我们没有找到吧(也许是根本没封装)。
首先需要在program.cs文件里面修改,代码请参考下面,最好把代码粘进VS里面看,否则你会头大的
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

//在窗体启动之前就要做判断处理
//Foreach系统中的所有进程
foreach(Process p in Process.GetProcesses())

//这里面是简单的判断,先判断进程中是否有和打开程序映像名称一样的
if(p.ProcessName ==Process.GetCurrentProcess().ProcessName)

//如果映像名称一样,那么看看进程的PID和当前进程的PID是不是一样,如果一样的PID,那么就是我们这次打开程序的本身了
//如果不一样,那么自然就是之前已经打开过的了,要是找到这样的进程,那么我们就可以处理了。
//当然,如果真正使用,你需要比对文件的MD5码,通过p.MainModule.FileName可以获得进程的文件名(DLL或者是EXE)
//然后通过一个文件MD5码计算的函数(网上到处都有)得出这两个MD5码是不是一样,从而判断出是不是一个程序
//这样判断,不但可以避免两个不同程序同一个映像引起的误判,还能够判断出将EXE文件改名,更换路径的运行情况
//不过一般的小判断用我实例的方法就可以了
if (p.Id != Process.GetCurrentProcess().Id)

//API出场了.向另一个进程的主窗口发送消息。
//p.MainWindowHandle是获得已运行程序的主窗口句柄
//0x8001则是自定义消息代码.从0x8000后的都是自定义消息代码,之前的是系统消息,不要乱发送
//所谓的按键精灵就是这样的原理,对窗口句柄发送各种各样的系统消息(鼠标,键盘操作的),当然那个更深奥
SendMessage(p.MainWindowHandle, (uint)0x8001, 0, "");
//入口点程序返回,也就是这个程序直接退出了
return;



//这块就是正常的开始执行程序了,如果上面没找到,那么这个程序就打开
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());


//声明调用系统API,也就是SendMessage
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, uint Msg,int wParam, string lParam);

然后我们需要在程序的主窗口捕获这个消息。重载form的WndProc函数。参考代码
public partial class Form1 : Form

public Form1()

InitializeComponent();


//重载 WndProc,这个函数就是消息捕获函数,参数m就是消息了
//如果你在这里加上断点,就能看到窗口捕获了各种0x8000以下的系统消息
protected override void WndProc(ref Message m)

switch (m.Msg)

//判断下捕获的消息,如果使我们刚才自定义的0x8001,就按照我们的想法处理
//这里我是把窗口的标题改变了,你可以自行按照需求来改
case 0x8001:
this.Text = "FORMFORM";
break;
//如果是其他的消息,那么就按照原先的步骤来处理系统消息
default:
base.WndProc(ref m);
break;


参考技术A 这个 很成熟了 直接给你代码
调试调用就好了
先在winform中添加notifyIcon控件,然后激活相应事件,添加代码。因为屏蔽了关闭窗体事件,可以设定一个全局变量bool变量来分辨是哪里引起的close事件。

1. //全家变量bool closeTag = true;
2
.3. //最小化
4. private void form1_Resize(object sender, EventArgs e)
5.
6. if (this.WindowState == FormWindowState.Minimized)
7.
8. NormalToMinimized();
9.
10.
11. //close时最小化
12. private void form1_FormClosing(object sender, FormClosingEventArgs e)
13.
14. e.Cancel = true;
15. NormalToMinimized();
16.
17. //单击显示窗体
18. private void notifyIcon_MouseClick(object sender, MouseEventArgs e)
19.
20. if (e.Button == MouseButtons.Left)
21.
22. this.MinimizedToNormal();
23.
24.
25. private void MinimizedToNormal()
26.
27. this.Visible = true;
28. this.WindowState = FormWindowState.Normal;
29. notifyIcon.Visible = false;
30.31.
32. private void NormalToMinimized()
33.
34. this.WindowState = FormWindowState.Minimized;
35. this.Visible = false;
36. this.notifyIcon.Visible = true;
37.
38. private void frmMain_FormClosing(object sender, FormClosingEventHandler e)
39.
40. if (closeTag)
41.
42. e.Cancel = true;
43. NormalToMinimized();
44.
45.
46.//托盘右键关闭事件
47. private void 退出XToolStripMenuItem_Click(object sender, EventArgs e)
48.
49. closeTag = false;
50. Application.Exit();
51. 追问

我说的是如果程序正在执行,双击桌面该程序的快捷方式,显示该程序界面。应该双击快捷方式的时候判断程序是否正在执行吧?

追答

o
明白
在main做个判断,代码如下,
using System.Threading;//添加一下
修改系统Main函数:

bool bCreatedNew;
//Create a new mutex using specific mutex name
Mutex md =new Mutex( false, "test", out bCreatedNew );
if( bCreatedNew )
Application.Run(new main());

本回答被提问者采纳
参考技术B //双击托盘
private void objNotify_DoubleClick(object sender, EventArgs e)

if (!this.Visible)
this.Visible = true;


//
private void frmMain_VisibleChanged(object sender, EventArgs e)

switch (this.Visible)

case true:
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_ACTIVATE); // 居中逐渐显示。
this.Activate(); // 激活窗体并给予它焦点。
break;
case false:
AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE); // 剧中逐渐隐藏。
objNotify.ShowBalloonTip(10, this.Text, " ", ToolTipIcon.Info);
break;



private void frmMain_FormClosing(object sender, FormClosingEventArgs e)

if (e.CloseReason == CloseReason.UserClosing)

this.Visible = false;
this.ShowInTaskbar = false;
e.Cancel = true;


以上是关于winform C#程序怎么样才能在浏览器中运行的主要内容,如果未能解决你的问题,请参考以下文章

我现在用C#做了一个winform程序,如何把整个程序嵌入到网页中运行?急!

c#做的Winform程序开发IE浏览器如何在不安装Framework的情况下运行?

我用C# 编写的winform 最小化到托盘了

C# WinForm程序怎么用代码控制 浏览器 后退和向前

请问C#正规做WinForm程序时,SQL文都是放在哪里的?怎样放才能实现SQL和代码脱离的效果?

C# .net4.5 winform程序 怎么在没有net环境运行?