社区
其他
帖子详情
用C语言编程能实现开机自动执行的程序吗?
liudan003
2003-05-13 09:52:23
请教各位高手?
用C语言能编出开机自动执行的程序吗?
能用C语言修改注册表吗?
C++ 呢?
...全文
138
13
打赏
收藏
用C语言编程能实现开机自动执行的程序吗?
请教各位高手? 用C语言能编出开机自动执行的程序吗? 能用C语言修改注册表吗? C++ 呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
limd
2003-08-14
打赏
举报
回复
C语言当然能写WINDOWS啊,只是麻烦呀
xboxjacky
2003-08-08
打赏
举报
回复
up
xboxjacky
2003-07-13
打赏
举报
回复
来点回音呀!
Ecoresoft
2003-07-13
打赏
举报
回复
C语言可以写出Windows 可以写出Linux/Unix 你说能不能写出你要的程序。
xboxjacky
2003-07-13
打赏
举报
回复
c语言能写出windows么?我不知道。
blackmouse2002
2003-07-12
打赏
举报
回复
里面有很多不是对注册表有用的呀:
有用的只有
//Windows NT/2000下用户名称及组织名称在系统注册表中的路径
subkey = "Software\\Microsoft\\Windows NT\\CurrentVersion";
//如果是Windows 9x/Me,则为"Software\\Microsoft\\Windows\\CurrentVersion"
//数据类型
type = REG_SZ;
//数据长度
cbData = 80;
//打开与路径subkey相关的 hKEY,KEY_READ表示以查询的方式访问注册表,
//hKEY保存此函数所打开的键的句柄。
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey, 0, KEY_READ, &hKEY));
if(ret0 != ERROR_SUCCESS)
{//如果无法打开hKEY,则终止程序的执行
MessageBox("错误: 无法打开指定的键!");
return;
}
//查询用户名称
LPBYTE Username_Get = new BYTE[80];
//hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,"RegisteredOwner"
//表示要查询的键值名,Username_Get保存所查询的数据。
long ret1 = ::RegQueryValueEx(hKEY, "RegisteredOwner", NULL, &type, Username_Get, &cbData);
if(ret1 != ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!");
return;
}
// 查询组织名称
LPBYTE Organization_Get = new BYTE [80];
long ret2 =:: RegQueryValueEx(hKEY, "RegisteredOrganization", NULL,&type,Organization_Get, &cbData);
if(ret2 != ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!");
return;
}
// 将 Username_Get 和 Organizaiont_Get 转换为 CString 字符串, 以便显示输出。
M_username.SetWindowText(CString(Username_Get));
M_organization.SetWindowText(CString(Organization_Get));
//释放内存空间
delete[] Username_Get;
delete[] Organization_Get;
//关闭注册表
::RegCloseKey(hKEY);
////////
//打开与路径subkey相关的hKEY,KEY_WRITE表示以写的方式打开。
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_WRITE, &hKEY));
if(ret0 != ERROR_SUCCESS)
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
//修改用户名称
CString m_user;
M_username.GetWindowText(m_user);
LPBYTE Username_Set = Ctochar(m_user);
cbData = m_user.GetLength()+1;
long ret1 = ::RegSetValueEx(hKEY, "RegisteredOwner", NULL, type, Username_Set, cbData);
//无法修改注册表,关闭后直接返回
if(ret1 != ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
//关闭注册表
::RegCloseKey(hKEY);
return;
}
//修改组织名称
CString m_organ;
M_organization.GetWindowText(m_organ);
LPBYTE Organization_Set = Ctochar(m_organ);
cbData = m_organ.GetLength()+1;
long ret2 = ::RegSetValueEx(hKEY, "RegisteredOrganization", NULL,type, Organization_Set, cbData);
//无法修改注册表,关闭后直接返回
if(ret2 != ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
//关闭注册表
::RegCloseKey(hKEY);
return;
}
::RegCloseKey(hKEY);
visualcdotnet
2003-07-09
打赏
举报
回复
这么长
blackmouse2002
2003-06-27
打赏
举报
回复
以前做过这样的改注册表的小程序,很简单,用API就成
你要做C程序,去掉下面多余的,用到你的代码中,就可以了
至于让程序自动运行,我想你会改的,把下面的注册键名改到RUN下就成了
多不就不多说,自己看看,
// modifyregDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "modifyreg.h"
#include "modifyregDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CmodifyregDlg 对话框
CmodifyregDlg::CmodifyregDlg(CWnd* pParent /*=NULL*/)
: CDialog(CmodifyregDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//Windows NT/2000下用户名称及组织名称在系统注册表中的路径
subkey = "Software\\Microsoft\\Windows NT\\CurrentVersion";
//如果是Windows 9x/Me,则为"Software\\Microsoft\\Windows\\CurrentVersion"
//数据类型
type = REG_SZ;
//数据长度
cbData = 80;
}
void CmodifyregDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_USERNAME, M_username);
DDX_Control(pDX, IDC_ORGANIZATION, M_organization);
}
BEGIN_MESSAGE_MAP(CmodifyregDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_QUERY, OnBnClickedQuery)
ON_BN_CLICKED(IDC_MODIFY, OnBnClickedModify)
END_MESSAGE_MAP()
// CmodifyregDlg 消息处理程序
BOOL CmodifyregDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将\“关于...\”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO:在此添加额外的初始化代码
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CmodifyregDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CmodifyregDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CmodifyregDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CmodifyregDlg::OnBnClickedQuery()
{
// TODO: 在此添加控件通知处理程序代码
//打开与路径subkey相关的 hKEY,KEY_READ表示以查询的方式访问注册表,
//hKEY保存此函数所打开的键的句柄。
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey, 0, KEY_READ, &hKEY));
if(ret0 != ERROR_SUCCESS)
{//如果无法打开hKEY,则终止程序的执行
MessageBox("错误: 无法打开指定的键!");
return;
}
//查询用户名称
LPBYTE Username_Get = new BYTE[80];
//hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,"RegisteredOwner"
//表示要查询的键值名,Username_Get保存所查询的数据。
long ret1 = ::RegQueryValueEx(hKEY, "RegisteredOwner", NULL, &type, Username_Get, &cbData);
if(ret1 != ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!");
return;
}
// 查询组织名称
LPBYTE Organization_Get = new BYTE [80];
long ret2 =:: RegQueryValueEx(hKEY, "RegisteredOrganization", NULL,&type,Organization_Get, &cbData);
if(ret2 != ERROR_SUCCESS)
{
MessageBox("错误: 无法查询有关注册表信息!");
return;
}
// 将 Username_Get 和 Organizaiont_Get 转换为 CString 字符串, 以便显示输出。
M_username.SetWindowText(CString(Username_Get));
M_organization.SetWindowText(CString(Organization_Get));
//释放内存空间
delete[] Username_Get;
delete[] Organization_Get;
//关闭注册表
::RegCloseKey(hKEY);
}
//Cstring转换为char的函数
LPBYTE Ctochar(CString str)
{
LPBYTE lpb = new BYTE[str.GetLength()+1];
for(int i = 0; i < lpb[str.GetLength()]; i++)
lpb[i] = str.GetAt(i);
return lpb;
}
void CmodifyregDlg::OnBnClickedModify()
{
// TODO: 在此添加控件通知处理程序代码
//打开与路径subkey相关的hKEY,KEY_WRITE表示以写的方式打开。
long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_WRITE, &hKEY));
if(ret0 != ERROR_SUCCESS)
{
MessageBox("错误: 无法打开有关的hKEY!");
return;
}
//修改用户名称
CString m_user;
M_username.GetWindowText(m_user);
LPBYTE Username_Set = Ctochar(m_user);
cbData = m_user.GetLength()+1;
long ret1 = ::RegSetValueEx(hKEY, "RegisteredOwner", NULL, type, Username_Set, cbData);
//无法修改注册表,关闭后直接返回
if(ret1 != ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
//关闭注册表
::RegCloseKey(hKEY);
return;
}
//修改组织名称
CString m_organ;
M_organization.GetWindowText(m_organ);
LPBYTE Organization_Set = Ctochar(m_organ);
cbData = m_organ.GetLength()+1;
long ret2 = ::RegSetValueEx(hKEY, "RegisteredOrganization", NULL,type, Organization_Set, cbData);
//无法修改注册表,关闭后直接返回
if(ret2 != ERROR_SUCCESS)
{
MessageBox("错误: 无法修改有关注册表信息!");
//关闭注册表
::RegCloseKey(hKEY);
return;
}
::RegCloseKey(hKEY);
}
liudan003
2003-06-02
打赏
举报
回复
thank you!
winthegame2
2003-05-16
打赏
举报
回复
开机自动执行无非就是修改注册表, 即使不能使用RegOpenKey等API, 也可以使用直接读写文本文件的方式修改注册表啊...
liudan003
2003-05-16
打赏
举报
回复
谢谢各位,
能不能把代码写一下, 不好意思,有劳了!
十分感谢!
hope1998
2003-05-16
打赏
举报
回复
开机自动执行就是将程序路径写入registry
安装platform SDK, 查询下面的函数RegOpenKeyEx 你就能找到很多相关函数。
修改registry 如下地址
LOCAL_MACHINE\SOFTWARE\microsoft\Windows\CurrentVersion\Run
9x 跟 NT有所不同
symbol68688
2003-05-14
打赏
举报
回复
都能,调用API函数
Windows下
C语言
实现
任务计划小工具
常驻运行,占用资源小,无控制台界面,通过配置文件
实现
三种任务模式:一次定时
执行
、循环
执行
、
开机
(延后)
执行
。
加湿器
C语言
程序
(用九齐单片机)
用单节锂电池的加湿器驱动
程序
,带有充电管理,一个开关,两个档位,关机可以进入低功耗,
c语言
整人代码(1).docx
c语言
整人代码(1).docx
恶搞
程序
-关闭QQ登陆窗口
开机
运行使QQ永远无法登陆 附源码
恶搞
程序
关闭QQ登陆窗口的小
程序
,
开机
自动
运行,可使QQ永远无法登陆。 附上源码
C语言
SDK的 代码很简短很易懂。
二十四节气壁纸
自动
更换.rar
用于win10壁纸
自动
更换
程序
,将编译生成的exe放到
开机
自启动目录下,会根据当前的节气更换桌面壁纸
其他
256
社区成员
6,541
社区内容
发帖
与我相关
我的任务
其他
其他产品/厂家
复制链接
扫一扫
分享
社区描述
其他产品/厂家
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章