热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

windows7怎么升级10,win7怎么卸载软件

Windows系统软件自启动方法很多场景都需要软件在开机时自动启动,本文整理了一些不同系统下软件自启动的方式并进行了对比。(一利用“启动”文件夹点击左下角开始菜单,找到启动文


Windows系统软件自启动方法很多情况下软件都需要在启动时自动启动,本文整理并比较了几种不同系统下软件的自启动方法。


(一)利用“启动”文件夹,点击左下角的开始菜单,找到启动文件夹。 图:


右键单击文件夹以将其打开。 图:


把软件的快捷方式复制到这个文件夹里,重新启动电脑就可以了。 应用: windows7、windows10 (自动启动开关,不需要手动拖动快捷方式) )。


优点:不需要修改代码,操作简单方便,没有技术基础的人也可以自行启动软件。


缺点:要实现软件自启动,必须手动将快捷方式移动到文件夹中。 否则,软件永远都不会自动启动。


)二)使用任务计划缺省情况下,“任务计划”程序与Windows一起启动并在后台运行。 还可以通过将程序添加到计划任务文件夹并将计划任务设置为“系统启动时”或“登录时”来启用程序的自动启动。


“任务计划”也是一个特殊的系统文件夹,单击“开始”“程序”“附件”“系统工具”“任务计划”可打开该文件夹,便于查看和管理。 界面如下图所示:


单击“创建任务”(create task ),可以在创建新任务并运行该任务时设置帐户。 选择触发器后,将创建新的触发器。 在此可以设定任务的开始等条件。 单击“操作”可创建新操作,并在设置界中选择程序或脚本。 积分就可以了。


适用:双赢7、双赢10


优点:不需要修改代码,可以在创建新任务时定制,可以根据自己的需求定制任务。


缺点:相对来说制作过程比较复杂。


(三)修改注册表是启动程序隐藏的地方,注册表的[HKEY_LOCAL_MACHINE]和[HKEY_CURRENT_USER]键不同。 前者对所有用户有效,后者只对当前用户有效。 注册表中可运行的程序的自启动主要有Run键。


1 .运行键


Run键的位置是[HKEY_CURRENT_


user\software\Microsoft\windows\current version\run和[HKEY_


local _ machine\software\Microsoft\windows\current version\run ],下面的所有程序将在每次开始登录时按顺序自动运行。


2 .运行键


RunOnce是[ HKEY _ current _ user\software\Microsoft\windows


CurrentVersion\RunOnce]和[ HKEY _ local _ machine\software\Microsoft


windows\currentversion\Runonce]键与run不同,RunOnce下的程序只自动运行一次。


以Run键为中心进行说明。 要设置Run键下指定的数据,设计调用的接口通常如下:


创建指定的注册表项。 如果已经存在,请选中。 longregcreatekeyexa(HkeyHkey,LPCTSTR lpSubKey,DWORD Reserved,LPTSTR lpClass,DWORD dwOptions,REGSAM samDesired,LPsecured )


其中hKey是需要打开的主键的名称,lpSubKey是需要打开的子键的名称,Reserved是保留的,必须赋值为0。 lpClass是一个条目,它指向定义密钥类型的字符串。 空着也没关系。 使用本地和远程注册表时,可以使用此参数。 dwOptions进入参数并指定键的特殊选项。 参数可以是以下值


REG_OPTION_BACKUP_RESTORE,0x00000004L


REG_OPTION_NON_VOLATILE,0x00000000L,


REG_OPTION_VOLATILE,0x00000001L,


一般使用REG_OPTION_NON_VOLATILE。 samDesired是定义权限,lpSecurityAttributes参与并定义返回的句柄是否可以从子进程继承。 如果为NULL,则无法继承。 phkResult是返回的句柄。 lpdwDisposition是参与者,可能具有以下值REG_CREATED_NEW_KEY :0x00000001L此密钥是新创建的密钥。 REG_OPENED_EXISTING_KEY,0x00000002L此密钥是已存在的密钥。


注册表项下指定值的数据和类型longregsetvalueexa(HkeyHkey,LPCTSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,lpcte


其中hKey是打开项目的句柄,lpValueName:是指向包含要设置的值的名称的字符串的指针。 如果指定的注册表项中不存在具有该值名称的值,函数会将该值添加到条目中。 Reserved:的保留值必须强制为0。 dwType:指定要存储的数据类型,而lpData:是包含要为指定值名称存储的数据的缓冲区。 cbData:指定lpData参数指向的数据

的大小,单位是字节。

删除注册表中键值

LONG RegDeleteValueA(HKEY hKey, LPCSTR lpValueName);
其中hKey是一个已打开项的句柄,lpValueName:指向一个字符串的指针,该字符串包含了欲删除值的名称。

具体代码如下:
创建一个界面,按钮的槽函数中写入或删除注册表键值。

构造函数中创建键值:

{std::string lpRun = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";DWORD dwDisposition = 0;long lRet = RegCreateKeyExA(HKEY_LOCAL_MACHINE, lpRun.c_str(), 0, NULL, \ REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &m_hKey, &dwDisposition);if (lRet != ERROR_SUCCESS) //失败 { qDebug() <<"RegCreateKeyExA failed!"; }}

其中m_hKey作为成员变量HKEY m_hKey,是操作注册表的句柄。

槽函数为:

{ if (m_hKey == nullptr) { return; }if (m_bAutoRun) { QString qStrAppPath = QApplication::applicationFilePath(); qStrAppPath.replace("/", "\\"); DWORD dwRet = qStrAppPath.length() * 2; // QtGuiApplication1应用程序名字(不加后缀.exe) long lRet = RegSetValueExA(m_hKey, "QtGuiApplication1", 0, REG_SZ, (PBYTE)qStrAppPath.toStdString().c_str(), dwRet); if (lRet != ERROR_SUCCESS) //失败 { qDebug() <<"RegSetValueExA failed!"; } } else { RegDeleteValueA(m_hKey, "QtGuiApplication1"); }}

点击按钮后写注册表成功,查看注册表键值如下:

适用于:win7,win10
优点:一般软件中均会有一个选项是否开启自启动,勾选与取消勾选实际上就是通过这种方式修改注册表实现的。
缺点:需要有一点编码能力。

注意:
1.我们开发的项目为了能够兼容32位系统和64位系统,一般应用程序都是32位的。在操作注册表时就涉及到32位和64位注册表的问题。64位windows系统中的注册表分为32位注册表和64位注册表项。为了防止注册表键冲突,注册表在某些键也分成了两个部分。一部分是专门给64位系统访问的,另一部分是专门给32位系统访问的。当32位程序去访问某些键值的时候,和文件转向类似,系统也会自动地把程序的访问转向到Wow6432Node下面。调用RegCreateKeyEx创建项时要samDesired要赋值权限与上KEY_WOW64_64KEY时,是在正常的路径下,即\Software\Microsoft\Windows\CurrentVersion\Run中;samDesired要赋值权限与上KEY_WOW64_32KEY时,创建项被重定向到了Wow6432Node节点中,\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run中。
经测试,在win7和win10上无论传入KEY_WOW64_64KEY还是KEY_WOW64_32KEY程序均可自启动成功。
2.上述三个接口均还有另外一个版本,名称的最后一个字母不是A而是W,而不带最后一个字母的接口是如下宏控制的:

#ifdef UNICODE#define RegCreateKeyEx RegCreateKeyExW#else#define RegCreateKeyEx RegCreateKeyExA#endif // !UNICODE

即UIcode下,如果调用RegCreateKeyEx,实际上调用的是RegCreateKeyExW,而调用该接口时必须要注意传入的参数(路径,软件名等),必须要转换成宽字符再传入,否则创建接口RegCreateKeyExW会报错87,参数错误,调用写入注册表接口RegSetValueExW会导致写入的注册表项乱码。所以在传入参数前应先利用MultiByteToWideChar接口把字符串转换为宽字符字符串。为了避免上述问题,建议直接调用末尾是A的接口。
具体代码如下:

string转成wstring的函数

void StringToWstring(std::wstring& szDst, std::string str){ std::string temp = str; int len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, NULL, 0); wchar_t * wszUtf8 = new wchar_t[len + 1]; memset(wszUtf8, 0, len * 2 + 2); MultiByteToWideChar(CP_ACP, 0, (LPCSTR)temp.c_str(), -1, (LPWSTR)wszUtf8, len); szDst = wszUtf8; std::wstring r = wszUtf8; delete[] wszUtf8;}

构造函数中创建键值

{std::string lpRun = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; std::wstring wszDest; StringToWstring(wszDest, lpRun); DWORD dwDisposition = 0; long lRet = RegCreateKeyExW(HKEY_LOCAL_MACHINE, wszDest.c_str(), 0, NULL, \ REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &m_hKey, &dwDisposition); if (lRet != ERROR_SUCCESS) //失败 { qDebug() <<"RegCreateKeyExW failed!"; }}

槽函数为:

{ if (m_hKey == nullptr) { return; } if (m_bAutoRun) { QString qStrAppPath = QApplication::applicationFilePath(); qStrAppPath.replace("/", "\\"); std::wstring wszDest; StringToWstring(wszDest, qStrAppPath.toStdString()); DWORD dwRet = qStrAppPath.length() * 2; std::wstring wszDestName; StringToWstring(wszDestName, "QtGuiApplication1"); long lRet = RegSetValueExW(m_hKey, wszDestName.c_str(), 0, REG_SZ, (PBYTE)wszDest.c_str(), dwRet); if (lRet != ERROR_SUCCESS) //失败 { qDebug() <<"RegSetValueExW failed!"; } } else { std::wstring wszDestName; StringToWstring(wszDestName, "QtGuiApplication1"); RegDeleteValueW(m_hKey, wszDestName.c_str()); }}

图中不乱码的为转换成宽字符后再写入注册表的结果,乱码为没有转换字符串调用接口的结果。


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
dmcm0010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有