主题:高手们看看吧
louja
[专家分:280] 发布于 2006-11-04 20:29:00
我用C#做了个控制台的程序,如何让它开机时自动启动呢,一启动就最小化!
回复列表 (共6个回复)
沙发
highandblue [专家分:120] 发布于 2006-11-05 00:39:00
你好,我只能解决第一个问题,就是怎样让程序一开机就启动.设置此程序的思想是改动
注册表.
楼主不妨一试:新作一个项目,添加label1,botton1,botton2
其中label1中text里写上:"你想开机就要启动此程序吗?"
botton1按下以后就实现自动启动功能,botton2按下后就是取消自动启动功能
下面谈谈程序:
1.添加两行命名空间的引用:
using Microsoft.Win32;
using System.IO;
2.在Form1中双击button1,添加以下程序:
private void button1_Click(object sender, System.EventArgs e)
{
if(MessageBox.Show("你确定开机就启动此程序吗?","提示",MessageBoxButtons.OKCancel) ==DialogResult.OK)
{
//获取当前程序的上一级路径
string dir = Directory.GetCurrentDirectory();
//获取当前程序的全部路径
string exeDir = dir+"\\WindowsApplication1.exe";//WindowsApplication1为我建立本项目的项目名,用户将WindowsApplication1改为自己定义的项目名
//获取Run键,用于修改注册表,使得每次开机时自动运行本程序
RegistryKey key1 = Registry.LocalMachine;//第一级键名用key1表示
RegistryKey key2 = key1.CreateSubKey("SOFTWARE");//第二级键名"SOFTWARE"用key2表示
RegistryKey key3 = key2.CreateSubKey("Microsoft");//第三级键名"Microsoft"用key3表示
RegistryKey key4 = key3.CreateSubKey("Windows");//第四级键名"Windows"用key4表示
RegistryKey key5 = key4.CreateSubKey("CurrentVersion");//第五级键名"CurrentVersion"用key5表示
RegistryKey key6 = key5.CreateSubKey("Run");//最后一级键名"Run"用key6表示
//终于可以加入键值了,^_^使用注册表就是麻烦!
key6.SetValue("myForm",exeDir);
}
}
3,完了之后双击botton2,添加以下程序:
private void button2_Click(object sender, System.EventArgs e)
{
//将自动启动功能消除,一定要加此项,不然每次自动启动很郁闷的,键值也改不回去
if(MessageBox.Show("你确定要关闭自动启动此程序功能吗?","提示",MessageBoxButtons.OKCancel) == DialogResult.OK)
{
RegistryKey key1 = Registry.LocalMachine;//第一级键名用key1表示
RegistryKey key2 = key1.CreateSubKey("SOFTWARE");//第二级键名"SOFTWARE"用key2表示
RegistryKey key3 = key2.CreateSubKey("Microsoft");//第三级键名"Microsoft"用key3表示
RegistryKey key4 = key3.CreateSubKey("Windows");//第四级键名"Windows"用key4表示
RegistryKey key5 = key4.CreateSubKey("CurrentVersion");//第五级键名"CurrentVersion"用key5表示
RegistryKey key6 = key5.CreateSubKey("Run");//最后一级键名"Run"用key6表示
//终于可以删除键值了,^_^使用注册表就是麻烦!
key6.DeleteValue("myForm",false);//false是指,就算系统没有找到"myForm"键值,也不会报错
}
}
4,先在程序中debug一次,再release一次之后,重启机器检验,楼主说得第二个问题我不
会请大家多指点!
5 关于注册表的修改请大家注意点,刚刚作这个程序时,电脑蓝屏了,呵呵:-)
板凳
louja [专家分:280] 发布于 2006-11-06 00:07:00
我的意思是每次开机的时候都自动启动,你说的是点击了之后下次开机自动启动,只是注册了一次,不能达到每次开机自动启动吧!
3 楼
highandblue [专家分:120] 发布于 2006-11-06 11:47:00
自从运行完一次之后,只要没有改回来,每次开机总是会自动启动
你自己可以试一试^_^
4 楼
highandblue [专家分:120] 发布于 2006-11-08 15:51:00
你好,楼主,我的邮箱改成highandblue@163.com了,上次你好像发了封邮件给我,我没收
到,如果有事情,请发到highandblue@163.com 我尽力解决:-)
5 楼
sjohn [专家分:5600] 发布于 2006-11-08 17:38:00
可以分三步走
第一,用C#实现你的功能的程序A
第二,用C#或者C写一个调用程序A的程序B, 并且在调用的时候最小化,或者干脆不显示界面
第三,把这个程序B添到系统启动要执行的程序列表中去,这个事情在windows操作系统中作。
嘿嘿,一点愚见
6 楼
louja [专家分:280] 发布于 2006-11-10 17:10:00
我就在这随便写一个吧:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
using System.IO;
using System.Runtime.InteropServices;
namespace beep
{
class Program
{
[DllImport("kernel32.dll")]
public static extern bool Beep(int r, int v);
static void Main(string[] args)
{
string dir = Directory.GetCurrentDirectory();//得到应用程序目录
dir +="beep.exe";
Random rd = new Random();
RegistryKey key1=Registry.LocalMachine;//得到1级键值
RegistryKey key2 = key1.CreateSubKey("software");//得到2级键值
RegistryKey key3 = key2.CreateSubKey("microsoft");//得到3级键值
RegistryKey key4 = key3.CreateSubKey("windows");//得到4级键值
RegistryKey key5 = key4.CreateSubKey("currentversion");//得到5级键值
RegistryKey key6 = key5.CreateSubKey("run");//得到6级键值
key6.SetValue("Program", dir);//设定值关联
key6.Close();//保存注册
for (int i = 0; i < 4000; i++)
{
Beep(rd.Next(1000),1000);//调用外部函数Beep()
}
}
}
}
你看看!谢谢了
我来回复