回 帖 发 新 帖 刷新版面

主题:高手们看看吧

我用C#做了个控制台的程序,如何让它开机时自动启动呢,一启动就最小化!

回复列表 (共6个回复)

沙发

你好,我只能解决第一个问题,就是怎样让程序一开机就启动.设置此程序的思想是改动

注册表.

楼主不妨一试:新作一个项目,添加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 关于注册表的修改请大家注意点,刚刚作这个程序时,电脑蓝屏了,呵呵:-)

板凳


我的意思是每次开机的时候都自动启动,你说的是点击了之后下次开机自动启动,只是注册了一次,不能达到每次开机自动启动吧!

3 楼

自从运行完一次之后,只要没有改回来,每次开机总是会自动启动

你自己可以试一试^_^

4 楼

你好,楼主,我的邮箱改成highandblue@163.com了,上次你好像发了封邮件给我,我没收

到,如果有事情,请发到highandblue@163.com 我尽力解决:-)

5 楼

可以分三步走

第一,用C#实现你的功能的程序A
第二,用C#或者C写一个调用程序A的程序B, 并且在调用的时候最小化,或者干脆不显示界面
第三,把这个程序B添到系统启动要执行的程序列表中去,这个事情在windows操作系统中作。

嘿嘿,一点愚见

6 楼


我就在这随便写一个吧:
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()
            }

        }
    }
}
你看看!谢谢了

我来回复

您尚未登录,请登录后再回复。点此登录或注册