工控编程吧
标题:
193上位机VC MFC实现开机自动运行功能
[打印本页]
作者:
qq263946146
时间:
2016-1-29 21:31
标题:
193上位机VC MFC实现开机自动运行功能
(, 下载次数: 0)
上传
点击文件名下载附件
193上位机VC MFC实现开机自动运行功能
功能展示
很多软件在电脑启动时也会随之启动运行,比如360电脑一开机就运行,比如腾讯QQ可以设置开机自动运行,我们当前例程也实现自己编写的程序在电脑开机自动运行功能,效果如图;
要点提示
程序开机自动运行功能分为两步:
1.用函数RegCreateKey()创建注册表Software\\Microsoft\\Windows\\CurrentVersion\\Run路径;
2.再用函数RegSetValueEx()将要自动启动程序的绝对路径写入以注册表中便可;此函的第二参数为程序名,如例程程序名为gkbc8 第五参数为程序的绝对路径;
一,RegCreateKey(
hKey Long//要打开项的句柄,或者一个标准项名
lpSubKey String//欲创建的新子项。可同时创建多个项,只需用反斜杠将它们分隔开即可。例如 level1\level2\newkey
phkResult Long//指定一个变量,用于装载新子项的句柄
)函数用于创建或打开注册表项。默认为创建,当注册表中有此项时。为打开
二, LONG RegSetValueEx(
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData
);
hKey一个已打开项的句柄,或指定一个标准项名。
lpValueName指向一个字符串的指针,该字符串包含了欲设置值的名称。
若拥有该值名称的值并不存在于指定的注册表项中,则此函数将其加入到该项。如果此值是NULL,或指向空字符串,
则此函数为该项的默认值或未命名值设置类型和数据。
Reserved保留值,必须强制为0。
dwType指定将被存储的数据类型,
该参数可以为
REG_BINARY 任何形式的二进制数据
REG_DWORD 一个32位的数字
REG_DWORD_LITTLE_ENDIAN 一个“低字节在前”格式的32位数字
REG_DWORD_BIG_ENDIAN 一个“高字节在前”格式的32位数字
REG_EXPAND_SZ一个以0结尾的字符串,该字符串包含对环境变量 如“%PAHT”)的未扩展引用
REG_LINK 一个Unicode格式的带符号链接
REG_MULTI_SZ 一个以0结尾的字符串数组,该数组以连接两个0为终止符
REG_NONE 未定义值类型
REG_RESOURCE_LIST 一个设备驱动器资源列表
REG_SZ一个以0结尾的字符串
lpData指向一个缓冲区,该缓冲区包含了欲为指定值名称存储的数据。
cbData指定由lpData参数所指向的数据的大小,
单位是字节。
实现功能
1.新建基于对话框的应用程序
2.拖拽一按钮实现重启电脑测试用,添加自定义函数GetPrivilege()获取重启电脑权限用,此函数在程序初始时调用一下;
拖拽一选择框Id为IDC_CHECK1用于选择是否自动运行程序,双击关联选择触发函数
void CGkbc8Dlg::GetPrivilege()//获得权限
{
static HANDLE hToken;
static TOKEN_PRIVILEGES tp;
static LUID luid;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
tp.PrivilegeCount =1;
tp.Privileges [0].Luid =luid;
tp.Privileges [0].Attributes =SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(TOKEN_PRIVILEGES),NULL, NULL);
}
void CGkbc8Dlg::OnReboot() //重启
{
ExitWindowsEx(EWX_REBOOT,0);
}
复制代码
void CGkbc8Dlg::OnCheck1()
{
char buf[MAX_PATH];
::GetModuleFileName(NULL,buf,MAX_PATH);//EXE此程序的绝对路径
//
CString skey= "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY sub;
::RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub);
//
CButton* pCheck = (CButton*)GetDlgItem(IDC_CHECK1);
if(pCheck->GetCheck()==0)//未选中
::RegSetValueEx(sub,"gkbc8",NULL,REG_SZ,(const BYTE*)buf,MAX_PATH);
else if(pCheck->GetCheck()==1)//选中开机自动运行
::RegDeleteValue(sub,"gkbc8");
}
复制代码
3.在WIN7上运行时还得以管理员权限运行,或加载例程RES目录下AppName.exe.manifest文件到工程文件夹名设置为24,资源ID改为1,重新编译便可;
我们来演示整个功能实现过程
[iqiyi]http://player.video.qiyi.com/da85ae0403499f71376955db7bf5f7cc/0/0/w_19rtbd2p7p.swf-albumId=5268558409-tvId=5268558409-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4