热门标签 | 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()); }}

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


推荐阅读
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
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社区 版权所有