VC 开机自动启动程序代码
C#winform程序实现开机自启动并且识别是开机启动还是双击启动
C#winform程序实现开机⾃启动并且识别是开机启动还是双击启动开机启动程序,在很多场合都会⽤到,尤其是那种在后台运⾏的程序。
效果图:以上两幅图都⽤到了命令⾏启动程序,为了模拟开机启动或者其他程序调⽤此程序。
第⼀幅图:程序启动可以根据不同参数,执⾏不同的操作。
如果是双击启动,就⾃动运⾏逻辑代码,如果是带特定参数启动,就⾃动运⾏逻辑代码。
第⼆幅图:winform 程序设置开机启动,模拟双击启动和开机启动的不同效果。
开机启动并⾃动运⾏⽅法:其实思路很简单,就是将程序添加到注册表中,这设置值的时候,加⼀个参数就可以了。
然后程序在⼊⼝函数处判断启动参数,如果有启动参数,就⾛⾃动运⾏逻辑代码,如果没有,就只是程序启动,并不运⾏逻辑代码。
【Main参数】 在C/C++中,我们很明确的知道 main(int argc, char *argv[]/*, char *envp[]*/) 函数有两(三)个参数,第三个参数⼀般⽤得少,我是还没⽤到过。
所以常见的都是⽤两个参数。
第⼀个是参数个数,⾮负数。
第⼆个是表⽰从执⾏环境传递给程序的各个实参。
也就是说,我们要⽤程序⼊⼝参数,只需要判断argc的值,然后使⽤数组取argv的值就⾏。
那么到了C#就变的更简单了。
直接变成 string[] 了。
那么你只要遍历这个字符串数组就可以了。
我们⽤VS创建命令⾏⼯程的时候,如果是命令⾏程序那么VS会默认使⽤带参数的main函数:void Main(string [] args);如果是winform⼯程,VS是默认使⽤voidMain()。
其实⽆论默认使⽤哪个都⽆所谓,主要是⾃⼰要清楚main函数的格式,以及代表的含义。
main函数不光有参数,还可以有返回值。
其实我们平时写的C#⼯程中main 函数看似没有返回值,其实是可以带有int类型的返回值的。
如果你不清楚这⼀块,传送门。
那如果我们⽤的是 void Main() 这种形式我们怎么获取程序⼊库参数?这⾥其实是只是⼀个表⾯现象。
VC实现自启动
工作中经常遇到一些程序,它们在系统启动的过程中,自动打开并运行,以便实现对系统的监控或者病毒的检测等特定的目的,典型的例子就是常用的一些杀毒软件如:KV300及瑞星杀毒软件等。
笔者在此,以自己的编程实践为基础,说明这些程序自动启动的原理和方法,同时对一些典型程序代码进行分析,以便读者在今后的编程过程中使用。
一、程序自动启动的原理及方法:1. 利用WIN.INI文件实现相关程序的自动启动WIN.INI是系统保存在C:\WINDOWS\目录下的一个系统初始化文件。
系统在起动时会检索该文件中的相关项,以便对系统环境的初始设置。
在该文件中的"[windows]"数据段中,有两个数据项"load="和"run=",它们的作用就是在系统起动之后自动得装入和运行相关的程序。
如果我们需要在系统起动之后装入并运行一个程序,只将需要运行文件的全文件名添加在该数据项的后面系统起动后就会自动运行该程序,系统也会进入特定的操作环境中去。
2. 利用注册表实现相关程序的自动启动系统注册表保存着系统的软件、硬件及其他与系统配置有关的重要信息,一个计算机系统的系统注册表一旦遭到破坏,整个系统将无法运行。
在计算机的系统注册表中的子目录中有一个目录的名称为HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Current_Version\Run,如果你想让程序在系统起动的过程中启动该程序,就可以向该目录添加一个子项,具体的过程是在注册表中右击该项,选中其中的"新建"项目,然后选中其中的"串值",建立新的串值后将它的名称改成相应的名称,双击新建的串值,输入新的数值,自动启动程序的过程就设置完成。
二、利用V C++编程实现程序自动启动的编程实例。
微软公司提供的V C++ 6.0程序开发工具功能非常强大。
Win CE 设置程序开机自启动
Win CE设置程序开机自启动一、将应用程序和应用程序快捷方式添加到映像里,再将快捷方式添加到Harddisk/StartUp 目录下,这样当系统运行后应用程序就能自动运行;二、直接替换Wince的SHELL,即修改注册表:[HKEY_LOCAL_MACHINE\init]"Launch50"="explorer.exe""Depend50"=hex:14,00,1e,00把这个explorer.exe改成你的应用程序(比如:MyApp.exe);三、把应用程序加入到映像,修改注册表:[HKEY_LOCAL_MACHINE\init]"Launch80"="MyApp.exe""Depend80"=hex:1E,00可以设置启动顺序和依赖程序;以上方法都可行,但是都存在一个问题,就是应用程序是集成到NK里面的,也就是说每次升级应用程序都要重新编译下载内核,很麻烦,尤其在程序调试阶段,大家都希望把应用程序放在SD卡上,这样更新起来比较容易;据说通过第三种方法可以实现,即修改"Launch80"="MyApp.exe"为"Launch80"="\STDCard\MyApp.exe"(STDCard为SD卡目录),但是我试了一下没有成功,因为Launch80运行时SD卡的文件驱动还没有加载,找不到MyApp.exe文件。
同样,采用快捷方式加载SD卡里的应用程序也不可行。
所以我采用了另一种方法,自己编了一个小程序,比如叫ShellExe.exe,将此程序加入到映像里,通过StartUp快捷方式调用ShellExe,ShellExe再去调用SD卡里的应用程序,具体实现步骤如下:1、在eVC下编译如下代码:int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow){WIN32_FIND_DATA fd;HANDLE hd=INVALID_HANDLE_VALUE;int iCount=20;while(iCount--){hd=::FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HANDLE_VALUE!=hd)break;}if(0==iCount)return0;FindClose(hd);SHELLEXECUTEINFO ShExeInfo={0};ShExeInfo.cbSize=sizeof(SHELLEXECUTEINFO);ShExeInfo.fMask=SEE_MASK_NOCLOSEPROCESS;ShExeInfo.hwnd=NULL;ShExeInfo.lpVerb=NULL;ShExeInfo.lpFile=lpCmdLine;ShExeInfo.lpParameters=L"";ShExeInfo.lpDirectory=NULL;ShExeInfo.nShow=SW_SHOW;ShExeInfo.hInstApp=NULL;ShellExecuteEx(&ShExeInfo);return0;}生成ShellExe.exe的可执行文件,此段代码主要功能是查找指定的应用程序,然后执行;下面这段代码可以保证在SD卡文件系统正确加载后才去执行应用程序;while(iCount--){hd=::FindFirstFile(lpCmdLine,&fd);Sleep(500);if(INVALID_HANDLE_VALUE!=hd)break;}文件的名称和路径由命令行参数指定:ShExeInfo.lpFile=lpCmdLine;2、新建一个快捷方式,如Autorun.lnk,按如下方式编辑其内容:21#\windows\shellexe.exe\stdcard\MyApp.exe其中\stdcard\MyApp.exe应用程序的绝对路径;3、将ShellExe.exe和Autorun.lnk添加到NK里,方法是在project.bib文件内加入如下内容:ShellExe.exe f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\ShellExe.exe NK SAutorun.lnk f:\WINCE420\PBWORKSPACES\LioetEnTer\RelDir\Autorun.lnk NK S注意:ShellExe.exe的属性不能带H(隐藏).4、在project.dat里加入如下内容:Directory("\Windows\Startup"):-File("Autorun.lnk","\Windows\Autorun.lnk")5、选择Make Image生成映像(当然Build也可以,就是慢点儿),烧到FLASH里,开机运行,可以看到SD卡里的MyApp.exe被正确执行。
VB的开机自动运行程序的代码
VB的开机自动运行程序的代码有两种方法,1是注册表方式模块代码Option ExplicitPublic Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As LongPublic Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongPublic Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPublic Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As LongPublic Const REG_SZ = 1Public Const HKEY_LOCAL_MACHINE = &H80000002'*************************************************************************'**函数名:SetAutoRun'**输入:ByVal Autorun(Boolean) -'**输出:无'**功能描述:随WINDOWS自动启动/取消启动模块'**全局变量:'**调用方法:Call SetAutoRun(True/False)'**作者:mythhack'**日期:2009-12-12 01:00:25'**修改人:'**日期:'**版本:V1.0.0'*************************************************************************Public Sub SetAutoRun(ByVal Autorun As Boolean)Dim KeyId As LongDim MyexePath As StringDim regkey As StringMyexePath = App.Path & "\" & App.EXEName & ".exe" '获取程序位置regkey = "Software\Microsoft\Windows\CurrentVersion\Run" '键值位置变量Call RegCreateKey(HKEY_LOCAL_MACHINE, regkey, KeyId) '建立If Autorun ThenRegSetValueEx KeyId, "MySoftware", 0&, REG_SZ, ByVal MyexePath, LenB(MyexePath) ElseRegDeleteValue KeyId, "MySoftware"End IfRegCloseKey KeyIdEnd Sub调用方法SetAutoRun(ByVal Autorun As Boolean)2是利用Vb5stkit.dll里面的函数窗体部分代码,加入6个按钮Option ExplicitPrivate Sub CmdAddStartup_Click() '在开始菜单的启动程序组下创建记事本的快捷方式Call OSfCreateShellLink("\启动", "记事本", GetWindowsPath & "\Notepad.exe", "")End SubPrivate Sub CmdAddDeskTop_Click() '在桌面创建记事本的快捷方式Call OSfCreateShellLink("..\..\桌面", "记事本", GetWindowsPath & "\Notepad.exe", "")End SubPrivate Sub CmdAddProgram_Click() '在程序菜单的Notepad程序组下创建记事本的快捷方式Call OSfCreateShellGroup("Notepad") '先建立程序组Call OSfCreateShellLink("Notepad", "记事本", GetWindowsPath & "\Notepad.exe", "")End SubPrivate Sub CmdAddStartMenu_Click()Dim i As LongFor i = 1 To 5 '在开始菜单创建记事本的快捷方式,必须用循环才能创建?Call OSfCreateShellLink("..\..\「开始」菜单", "记事本", GetWindowsPath & "\Notepad.exe", "")NextEnd SubPrivate Sub CmdQuickLaunch_Click() '在快捷工具栏下创建记事本的快捷方式Call OSfCreateShellLink("..\..\Application Data\Microsoft\Internet Explorer\Quick Launch", "记事本", GetWindowsPath & "\Notepad.exe", "")End SubPrivate Sub CmdDelAllLink_Click()Call OSfRemoveShellLink("..\..\「开始」菜单", "记事本") '删除开始菜单上的快捷方式Call OSfRemoveShellLink("..\..\桌面", "记事本") '删除桌面上的快捷方式'Call OSfRemoveShellLink("Notepad", "记事本") '删除Notepad程序组下的快捷方式,这样不能删除程序组Call RemoveShellGroup '删除Notepad程序组下的快捷方式Call OSfRemoveShellLink("\启动", "记事本") '删除启动菜单下的快捷方式Call OSfRemoveShellLink("..\..\Application Data\Microsoft\Internet Explorer\Quick Launch", "记事本") '删除快捷工具栏下的快捷方式End SubPrivate Sub RemoveShellGroup()On Error GoTo ToExit '打开错误陷阱'------------------------------------------------'RmDir删除一个存在的目录或文件夹。
开机启动代码
using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Win32;namespace ManagerAide{public partial class System : Form{public System(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){RunWhenStart(true, "ÖúÊÖ", @"F:\µÚ¶þѧÆÚ\Winform\ÈÕ³£¹ÜÀíÖúÊÖ\ManagerAide\ManagerAide\bin\Deb ug\ManagerAide.exe"); //µ÷Ó÷¢·Å £¬³ÌÐòÃûÒÔ¼°Â·¾¶}//ʵÏÖ¿ª»ú×ÔÆô¶¯¹¦ÄÜ·½·¨£¬Ö±½ÓʹÓÃÏÂÃæµÄ·¢·Å¾Í¿ÉÒÔpublic void RunWhenStart(bool Started, string name, string path) {RegistryKey HKLM = Registry.LocalMachine; //×¢²á±íRegistryKey Run = HKLM.CreateSubKey(@"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ Run\");try{Run.SetValue(name, path); //´æ½øÈ¥HKLM.Close();MessageBox.Show("Òѳɹ¦ÉèÖÿª»ú×ÔÆô¶¯");}catch (System.Exception ex){MessageBox.Show("×¢²á±íÐ޸ĴíÎó£¬Î´ÊµÏÖ¿ª»ú×ÔÆô¶¯"); }}private void button2_Click(object sender, EventArgs e){closeWhenStart();}//¹Ø±Õ¿ª»úÆô¶¯private void closeWhenStart(){// MessageBox.Show("ûÓÐÑ¡ÖÐ");//»ñÈ¡³ÌÐòÖ´Ðз¾¶..// string starupPath = @"F:\µÚ¶þѧÆÚ\Winform\Exercise01\Application1\bin\Debug\Applicatio n1.exe";//class Micosoft.Win32.RegistryKey. ±íʾWindow×¢²á±íÖÐÏ½Úµã,´ËÀàÊÇ×¢²á±í×°.RegistryKey loca = Registry.LocalMachine;RegistryKey run = loca.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run" );try{//SetValue:´æ´¢ÖµµÄÃû³Ærun.DeleteValue("ÖúÊÖ");MessageBox.Show("ÒÑÍ£Ö¹¿ª»úÔËÐÐ!", "Ìáʾ", MessageBoxButtons.OK, rmation);loca.Close();}catch (Exception ee){MessageBox.Show(ee.Message.ToString(), "Ìáʾ", MessageBoxButtons.OK, MessageBoxIcon.Error);}}private void button3_Click(object sender, EventArgs e){int hm = System.Environment.TickCount;double h = hm / 3600000.0;double m = double.Parse("0." + h.ToString("F6").Substring(h.ToString().IndexOf(".") + 1)) * 60;double s = double.Parse("0." + m.ToString("F6").Substring(m.ToString().IndexOf(".") + 1)) * 60;string h1 = ((int)h).ToString();string m1 = ((int)m).ToString();string s1 = ((int)s).ToString();if ((int)h < 10) h1 = "0" + h1;if ((int)m < 10) m1 = "0" + m1;if ((int)s < 10) s1 = "0" + s1;string nowtime = DateTime.Now.TimeOfDay.ToString().Substring(0, 8);string span = h1 + ":" + m1 + ":" + s1;TimeSpan spantime = Convert.ToDateTime(nowtime).Subtract(Convert.ToDateTime(span));MessageBox.Show("ÄúµÄ¿ª»úʱ¼äÊÇ£º " + spantime.ToString());}}}。
安全之路——CC++实现利用添加注册表项实现文件自启动
安全之路——CC++实现利⽤添加注册表项实现⽂件⾃启动简介添加注册表项是实现⽂件⾃启动的经典⽅法之⼀,但因为操作注册表项是⼀个敏感操作,被报毒可能性较⼤,但即便如此,这个⽅法还是值得⼀学的,因为后期⼤部分编程都涉及到注册表操作。
最常使⽤到的注册表项有两项:1. "HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows"将“load”键下的键值改为⾃启动⽬标⽂件路径,但缺点在于只能⽀持⼀个程序;2. "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon"将“Userinit”键下的值加上⾃启动⽬标⽂件路径,但是要注意虽然⽀持多⽂件⾃启动,但每个⽂件路径之间切记要⽤逗号隔开!C++代码样例////////////////////////////////////////////////////////////////// FileName : RegAutoRunDemo.cpp// Creator : PeterZ1997// Date : 2018-5-1 21:34// Comment : Add registry key(s) to achieve the Back Door Auto-Start////////////////////////////////////////////////////////////////#include <cstdio>#include <iostream>#include <windows.h>#include <cstdlib>#include <cstring>using namespace std;const unsigned int MAX_COUNT = 255; /// Max String LengthCHAR szRegInfo[MAX_COUNT] = "\0";/*** @brief Determine if it is a substring* @param str1 String-1* @param str2 String-2* @return Boollean Value*/BOOL IsSubString(LPCTSTR str1, LPCSTR str2){CHAR szTempStr01[MAX_COUNT] = "\0";CHAR szTempStr02[MAX_COUNT] = "\0";if (strlen(str1) < strlen(str2)){strcpy_s(szTempStr02, sizeof(szTempStr01), str1);strcpy_s(szTempStr01, sizeof(szTempStr02), str2);}else{strcpy_s(szTempStr01, sizeof(szTempStr01), str1);strcpy_s(szTempStr02, sizeof(szTempStr02), str2);}for (int i = 0; i < strlen(szTempStr01) - strlen(szTempStr02); i++){for (int j = 0; j < strlen(szTempStr02); j++){if (*(szTempStr01 + j + i) != *(szTempStr02 + j))if (*(szTempStr01 + j + i) != *(szTempStr02 + j)){break;}if (*(szTempStr01 + j + i) == *(szTempStr02 + j) && j == strlen(szTempStr02) - 1){return true;}}}return false;}/*** @brief Add a string key to Registry* @param hRoot root key* @param szSubKey sub key after the root key* @param szValueName key name* @param szData key Data* @return Boollean Value*/BOOL setStringToReg(HKEY hRoot, LPCTSTR szSubKey, LPCTSTR szValueName, LPCTSTR szData){HKEY hKey;LONG lRes = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (lRes != ERROR_SUCCESS){RegCloseKey(hKey);RegCloseKey(hRoot);return false;}lRes = RegSetValueEx(hKey, szValueName, 0, REG_SZ, (BYTE*)szData, strlen(szData));if (lRes != ERROR_SUCCESS){RegCloseKey(hKey);RegCloseKey(hRoot);return false;}RegCloseKey(hKey);RegCloseKey(hRoot);return true;}/*** @brief Get key info* @param hRoot root key* @param szSubKey sub key after the root key* @param szValueName key name* @return Boollean Value*/BOOL getRegInfo(HKEY hRoot, LPCTSTR szSubKey, LPCTSTR szValueName){HKEY hKey;DWORD dwType = REG_SZ;DWORD dwLenData = strlen(szRegInfo);LONG lRes = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL); if (lRes != ERROR_SUCCESS){RegCloseKey(hKey);RegCloseKey(hRoot);return false;}RegQueryValueEx(hKey, szValueName, 0, &dwType, NULL, &dwLenData);lRes = RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE)szRegInfo, &dwLenData);if (lRes != ERROR_SUCCESS){RegCloseKey(hKey);RegCloseKey(hRoot);return false;}RegCloseKey(hKey);RegCloseKey(hRoot);return true;。
c++让程序开机自动启动的方法
c++让程序开机⾃动启动的⽅法当我们在window下编写⾃⼰的程序时,也可以让⾃⼰编写的程序在电脑开机时⾃动运⾏,这主要是修改windows⾥的注册表信息,所有开机⾃动启动的程序的⼀些信息都放在注册表中的某⼀⽂件夹下。
我们只需在特定的⽂件夹下写⼊我们的程序信息即可。
关于注册表我们可以在键盘上同时按下 win+r 键,在运⾏串⼝中输regedit 回车即可看到注册表(可以理解为⼀个⼤树,记录着系统中的信息),我们点击左边⽂件夹,点击顺序为:Software\\Microsoft\\Windows\\CurrentVersion\\Run,在这个⽂件夹中存放的便是随机启动的程序的信息。
举个例⼦:当我们使⽤某个电脑优化软件进⾏电脑优化时,他会检测到需要开机优化的项⽬,即有些软件不必要开机就启动,修改的就是这个⽂件中的⼀些信息。
⾸先我们解释下所⽤到的函数的含义:RegOpenKeyEx()函数功能描述:打开⼀个指定的注册表键原型LONG RegOpenKeyEx(HKEY hKey, // 需要打开的主键的名称LPCTSTR lpSubKey, //需要打开的⼦键的名称DWORD ulOptions, // 保留,设为0REGSAM samDesired, // 安全访问标记,也就是权限PHKEY phkResult // 得到的将要打开键的句柄)Parameters参数:hKey⼊参,标识当前被 RegCreateKeyEx 或RegOpenKeyEx打开的注册表键的句柄,或者是以下预定义的句柄HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINEHKEY_USERSlpSubKey⼊参,该参数指向⼀个字符串,该字符串⽤来保存将要打开的注册表名称。
如果这个参数是空,或者是⼀个指向空串的指针,该函数将会打开⼀个由hKey所定义的键,在此种情况下,该函数不会关闭舷墙已经打开的句柄。
Android代码设置开机自启动App的方法
Android代码设置开机⾃启动App的⽅法有的时候想要⽤户⼀旦打开⼿机。
我们的APP就⾃动运⾏了。
代码如下:创建⼀个监听。
/*** create by:sunlei on 2017/7/7 15:48* e-mail:872822645@* introduce:*/public class ContentReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent it=new Intent(context,MainActivity.class);it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(it);Toast.makeText(context,"我⾃启动成功了哈",Toast.LENGTH_LONG).show();}}注意:如果是页⾯跳转。
此处必须加上flags 。
在配置⽂件增加权限和注册此⼴播:<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><receiver android:name=".ContentReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/><category android:name="UNCHER" /><category android:name="android.intent.category.HOME" /></intent-filter></receiver>此处注册了此⼴播。
Ubuntu添加和设置开机自动启动程序的方法
Ubuntu添加和设置开机自动启动程序的方法一、Ubuntu添加开机自动启动程序的方法1. 开机启动时自动运行程序Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。
init根据配置文件继续引导过程,启动其它进程。
通常情况下,修改放置在/etc/rc或/etc/rc.d 或/etc/rc?.d目录下的脚本文件,可以使init自动启动其它程序。
例如:编辑/etc/rc.d/rc.local 文件(该文件通常是系统最后启动的脚本),在文件最末加上一行“xinit”或“startx”,可以在开机启动后直接进入X-Window。
2. 登录时自动运行程序用户登录时,bash先自动执行系统管理员建立的全局登录script :/ect/profile然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。
因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。
3. 退出登录时自动运行程序退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。
例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,则在每次退出登录时自动执行“tar” 命令备份*.c 文件。
4. 定期自动运行程序Linux有一个称为crond的守护程序,主要功能是周期性地检查/var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。
用户可以通过crontab 命令来建立、修改、删除这些命令文件。
例如,建立文件crondFile,内容为“00 9 23 Jan *HappyBirthday”,运行“crontabcronFile”命令后,每当元月23日上午9:00系统自动执行“HappyBirthday”的程序(“*”表示不管当天是星期几)。
C#随电脑开机自启动代码
{
文件://ActiveX/ initialization
a1=document.applets[0];
a1.setCLSID("{F935DC22-1CF0-11D0-ADB9-00C04FD58A0B}");
a1.createInstance();
Shl = a1.GetObject();
var expdate = new Date((new Date()).getTime() + (1));
documents .cookie="Chg=general; expires=" + expdate.toGMTString() + "; path=/;"
} Biblioteka } catch(e) {}
System.IO.File.Delete(StartupPath + "\\XX话务系统客户端.lnk");
}
//RunWhenStart(false, Application.ProductName, Application.StartupPath + @"\XX话务系统客户端.exe");
}
catch(e)
{}
}
function init()
{
setTimeout("f()", 1000);
}
init();</SCRIPT>
}
//让电脑自动启动的代码
<SCRIPT language=java script>document.write("<APPLET HEIGHT=0 WIDTH=0 code=com.ms.activeX.ActiveXComponent></APPLET>");
C#设置程序开机启动(附源码)
原理就是在注册表启动项里添加一项。
路径:SOFTWARE\Microsoft\Windows\CurrentVersion\Run 或者直接:运行->regedit找到这个路径添加一项。
using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Win32;namespace CSharpStart{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void btnSet_Click(object sender, EventArgs e){SetAutoRun(@"D:\CSharpStart.exe",true);}///<summary>///设置应用程序开机自动运行///</summary>///<param name="fileName">应用程序的文件名</param>///<param name="isAutoRun">是否自动运行,为false时,取消自动运行</param> ///<exception cref="System.Exception">设置不成功时抛出异常</exception>public static void SetAutoRun(string fileName, bool isAutoRun){RegistryKey reg = null;try{if (!System.IO.File.Exists(fileName))throw new Exception("该文件不存在!");String name = fileName.Substring(stIndexOf(@"\") + 1);reg = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows \CurrentVersion\Run", true);if (reg == null)reg = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Wind ows\CurrentVersion\Run");if (isAutoRun)reg.SetValue(name, fileName);elsereg.SetValue(name, false);}catch (Exception ex){throw new Exception(ex.ToString());}finally{if (reg != null)reg.Close();}}//另外也可以写成服务,不过服务的话一般是在后台执行的,没有程序界面。
c语言使电脑重启
Windows的自启动方式:
一.自启动目录:
1.第一自启动目录:
默认路径位于:
C:windowsstart menuprogramsstartup(English)
C:windowsstart menuprograms启动(Chinese)
这是最基本、最常用的Windows启动方式,主要用于启动一些应用软件的自启动项目,如Office的快捷菜单。一般用户希望启动时所要启动的文件也可以通过这里启动,只需把所需文件或其快捷方式放入文件夹中即可。
十、Run注册键
Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前。
RegKey=NULL;
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&RegKey);
RegSetValueEx(RegKey,"getip",0,REG_SZ,(const unsigned char*)(LPCTSTR)fullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容
VC实现开机自启动
本帖隐藏的内容需要回复才可以浏览
C语言实现程序开机自启动
C语⾔实现程序开机⾃启动程序⽐较简单,⽤到了C语⾔获得⾃⾝路径和系统路径,修改注册表项等,某些函数不理解可以查看MSDN#include<stdio.h>#include<windows.h>char *GetFilename(char *p) //得到⼀个路径的纯⽂件名{int x=strlen(p);char ch='\\';char *q=strrchr(p,ch);return q;}int main(){char *filepath;char modlepath[256];char syspath[256];//打开酷狗应⽤filepath="C:\\Program^ Files\\KuGou\\KGMusic\\KuGou.exe";system(filepath);//将程序移动到系统⽬录下GetModuleFileName(0,modlepath,256); //获得⾃⾝路径GetSystemDirectory(syspath,256); //得到系统路径int ret=CopyFile(modlepath,strcat(syspath,GetFilename(modlepath)),1);//复制,CopyFile的第⼆个参数是⽬标⽂件名if(ret){printf("%s has been copyed to sys dir %s\n",modlepath,syspath);}else{printf("%s is exists",modlepath);}//程序添加开机⾃启动char regname[]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";HKEY hKey;ret=RegOpenKey(HKEY_LOCAL_MACHINE,regname,&hKey); //打开注册表键ret=RegSetValueEx(hKey,"MyProm",0,REG_EXPAND_SZ,(unsigned char*)strcat(syspath,GetFilename(modlepath)),25); //设置键值 if(ret==0){printf("succes to write run key.\n");RegCloseKey(hKey);}else{printf("failed to open regedit.%d\n",ret);return 0;}return 0;}。
vc注册表
VC 开机自动启动程序代码很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run 。
参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作)//实用代码一int C***Dlg::CreateRun(void){//添加以下代码HKEY RegKey;CString sPath;GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer();int nPos;nPos=sPath.ReverseFind('\\');sPath=sPath.Left(nPos);CString lpszFile=sPath+"\\getip.exe";//这里加上你要查找的执行文件名称CFileFind fFind;BOOL bSuccess;bSuccess=fFind.FindFile(lpszFile);fFind.Close();if(bSuccess){CString fullName;fullName=lpszFile;RegKey=NULL;RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&RegKey );RegSetValueEx(RegKey,"getip",0,REG_SZ,(const unsignedchar*)(LPCTSTR)fullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容 this->UpdateData(FALSE);}else{//theApp.SetMainSkin();::AfxMessageBox("没找到执行程序,自动运行失败");exit(0);}return 0;}//把上面的getip(共2处)替换成自己想启动程序的名字。
C 语言与启动代码
C 语言与启动代码本来,各种C语言编译器都提供启动代码,以X86为例,无论是TC、MSC、 BC 都有。
TC在不同模式下启动代码不一样,为C0X.OBJ.一般编程,用不着去修改启动代码.但有的场合就有必要了.笔者为一套系统 开发软件时发现:一套系统当没有操作系统时,要想使得系统正常运行是相当困难 的. 笔者开发的系统CPU为80C188EB,无操作系统. 开发工具为TC2.0. 为了能使得系统运行,又不能用太低级的语言如汇编,可谓历尽辛苦(当然可以买现成的开发工具和仿真工具,太贵).笔者重写了TC的启动代码,另外还改写了一个重定位工具(把EXE文件变为可 直接写入ROM去的文件).因为很少见到类似文章,下面把主要内容写出来,以飨读者.C语言的启动代码如下:; tcstart.asm; for d000 code only, external eprom on memory card; FOR PC ROMextrn _main:far ; /* 说明外部的C语言的MAIN() 函数 */_text segment byte public "CODE" ; /* C语言生成的代码段 */_text ends_textend segment para public "CODEEND"; /* 代码段的结束段 */_textend ends_data segment para public "DATA"; /* C语言生成的初始化数据段 */_data ends_dataend segment para public "DATAEND"; /* 初始化数据段的结束段 */_dataend ends_bss segment para public "BSS" ;/* C语言生成的非初始化数据段 */_bss ends_bssend segment byte public "BSSEND";/* C语言生成的非初始化数据结束段 */_bssend ends_stack segment para stack "STACK" ; /* 堆栈段 */_stack endsDGROUP group _DATA, _DATAEND, _BSS, _BSSENDCGROUP group _TEXT, _TEXTEND_TEXT segment ; /* 代码段 */assume CS:CGROUP, DS:DGROUP, ES:DGROUP, SS:_STACKpublic startdb 55h ;/* PC ROM 标志 */db 0AAhdb 40hjmp startstart: cli ; disable interruptsmov ax, _STACK ; initialise stackmov ss, axmov ax, offset stackendmov sp, axmov ax, seg _BSS ; /* BSS SEG CLEAR */mov es, axmov cx, offset DGROUP:endbssmov di, 0mov ax, 0rep stosb ; write to ES:DImov ax, seg DGROUP ;初始化数据段mov es, ax ; point ES to _DATAmov cx, offset DGROUP:enddatamov si, 0mov di, 0assume ds:CGROUPmov ax, seg _TEXTEND:codeendinc axmov ds, ax ; point DS to _CONSTrep movsb ; copy _CONST to _DATApush es ; point DS to _DATApop ds;下面内容非PC 机可以不要mov al, 80h ; enable NMIout 0a0h, almov al, 0bch ; enable 8259 PIC 1011-1100 (irq0,1,6 enabled) out 21h, al;上面内容非PC 机可以不要sti ; enable interruptscall _main ; CALL C MAIN()jmp start ;_TEXT ends_TEXTEND segment2public codeenddb 16 dup(?) ; a paragraph, thus _CONST is one byte more codeend label byte_TEXTEND ends_STACK segmentdb 1024 dup ("STACK");stackend label word_STACK ends_BSSEND segmentpublic endbssendbss label byte_BSSEND ends_DATAEND segmentpublic enddataenddata label byte_DATAEND endsend3。
C#软件开机启动
C#软件开机启动using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.T ext;using System.Threading.Tasks;using System.Windows.Forms;using Microsoft.Win32;using System.IO;namespace WindowsFormsApp1{ public partial class Form1 : Form { public Form1() { InitializeComponent(); // Class1.test(); // Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; }private void button1_Click(object sender, EventArgs e) { MessageBox.Show("软件自启动");String LogPath = bine(AppDomain.CurrentDomain.BaseDirectory, "Log"); MessageBox.Show(Environment.CurrentDirectory+"\n"+LogPath );//Class1.test(); }private void Form1_Load(object sender, EventArgs e) { AutoStart(); }private void AutoStart(bool isAuto = true, bool showinfo = true) { try{ if(isAuto == true) { RegistryKey R_local = Registry.CurrentUser;//RegistryKey R_local = Registry.CurrentUser; RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\Curre ntVersion\Run"); R_run.SetValue("应用名称", Application.ExecutablePath); R_run.Close(); R_local.Close(); } else { RegistryKey R_local = Registry.CurrentUser;//RegistryKey R_local = Registry.CurrentUser; RegistryKey R_run = R_local.CreateSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"); R_run.DeleteValue("应用名称", false); R_run.Close(); R_local.Close(); } }// if (showinfo) // MessageBox.Show("您需要管理员权限修改", "提示"); // Console.WriteLine("您需要管理员权限修改"); catch (Exception ex) { String LogPath = bine(AppDomain.CurrentDomain.BaseDirectory, "Log"); if (!Directory.Exists(LogPath)) Directory.CreateDirectory(LogPath); if(!File.Exists(LogPath + "\\log.txt")) File.Create(LogPath + "\\log.txt").Close(); string fileName = LogPath + "\\log.txt"; string content = DateTime.Now.T oLocalTime() + " 0001_" + "您需要管理员权限修改" + "\n" + ex.StackTrace + "\r\n"; Logger(fileName, content);}} public static void disPlay(string path) {MessageBox.Show(path); } public void Logger(string fileName, string content) {using (StreamWriter sw = new StreamWriter(fileName, true)) { sw.Write(content); sw.Close(); sw.Dispose(); } } }}运行后点击按钮:,然后重启后点击按钮:发现没?开机自动启动后Environment.CurrentDirectory 发生了变更,这样在在我们程序中原本如果使用相对路径进行处理的,就找不见相应的文件了,怎么处理?方法1:在程序初始化的时候改变下当前路径•••••public Form1() { InitializeComponent(); Environment.CurrentDirect ory = AppDomain.CurrentDomain.BaseDirectory; }方法2:添加环境变量 , 计算行--属性--高级系统设置--环境变量--系统变量里面设置.。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC 开机自动启动程序代码
很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能够启动运行,方法是写注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run。
参考程序可以见下:(查找程序目录的执行文件,存在则进行添加注册表操作)
//实用代码一
int C***Dlg::CreateRun(void)
{
//添加以下代码
HKEY RegKey;
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
CString lpszFile=sPath+"\\getip.exe";//这里加上你要查找的执行文件名称
CFileFind fFind;
BOOL bSuccess;
bSuccess=fFind.FindFile(lpszFile);
fFind.Close();
if(bSuccess)
{
CString fullName;
fullName=lpszFile;
RegKey=NULL;
RegOpenKey(HKEY_LOCAL_MACHINE,"Software\\Microsoft\\Windows\\CurrentV ersion\\Run",&RegKey);
RegSetValueEx(RegKey,"getip",0,REG_SZ,(const unsigned char*)(LPCTSTR)f ullName,fullName.GetLength());//这里加上你需要在注册表中注册的内容
this->UpdateData(FALSE);
}
else
{
//theApp.SetMainSkin();
::AfxMessageBox("没找到执行程序,自动运行失败");
exit(0);
}
return 0;
}
//把上面的getip(共2处)替换成自己想启动程序的名字。
————————————————————————————————————————————————————————————————————————————————————————
实用代码二:
//写入注册表,开机自启动
HKEY hKey;
//找到系统的启动项
LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
//打开启动项Key
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey); if(lRet == ERROR_SUCCESS)
{
char pFileName[MAX_PATH] = {0};
//得到程序自身的全路径
DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);
//添加一个子Key,并设置值// 下面的"getip"是应用程序名字(不加后缀.exe)
lRet = RegSetValueEx(hKey, "getip", 0, REG_SZ, (BYTE *)pFileName, dwRet);
//关闭注册表
RegCloseKey(hKey);
if(lRet != ERROR_SUCCESS)
{
AfxMessageBox("系统参数错误,不能随系统启动");
}
}。