书接上回嘿嘿
常见问题
Q:注册表是什么?
A:注册表实际上是一个管理配置系统运行参数的核心数据库,它记录了安装软件与运行程序的关联关系,计算机的硬件配置等信息。可以说计算机上所有针对硬件、软件、网络的操作都是源于注册表的。可以使用 regedit.exe 这个系统提供的注册表编辑器去管理编辑注册表。
C++ 写入注册表启动项
注意:需要重启才能重新加载注册表,这边写入的是开机自启动的注册表,代码中的刷新功能没成功(还有别的刷新注册表的方式,这边没有再去做其他尝试)。并且需要注意64与32位注册表的不同。
以下尝试的几种刷新方法:
- SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); //利用消息发送函数向WINDOWS发送刷新注册表的消息
- PostMessage(HWND_BROADCAST, WM_COMMAND, 41504, NULL); //模拟F5刷新
- SystemParametersInfo(SPI_SETCURSORS, 0, NULL, SPIF_SENDCHANGE); //通过给第一个参数传入一个SET属性的参数可以实现部分系统刷新功能
- SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)L”Environment”, SMTO_ABORTIFHUNG, 3000, NULL); ////通知所有打开的程序注册表已修改
SendMessageTimeout与SendMessage有什么不同?
1 | SendMessage : 如果指定窗口由调用线程创建,那么窗口过程会被当成一个子程序立即调用。如果指定窗口由另外一个线程创建,那么系统会切换到那个线程,并且调用合适的窗口过程。在线程之间传递的消息仅仅当接收线程执行message retrieval code才会被处理。发送线程会被堵塞直到接收线程处理完消息。但是,发送线程在等待的同时会处理收到的nonqueued messages。为了阻止这一点,使用带有SMTO_BLOCK参数的SendMessageTimeout。 |
64位的
1 |
|
x86
1 |
|
利用CMD命令行创建计划任务
CMD 命令行下有两个命令可以创建计划任务,一个是at,另一个是schtasks。
- at 命令仅在 Win7 及以下系统有效,支持指定任务的执行时间,支持远程创建计划任务,但不能指定任务在系统启动或用户登录时启动。与schtasks命令相比,其优势是创建计划任务所需的命令比较简单。
- schtasks支持 Windows 全系列系统,与at命令相比,可设置的选项更加丰富,能适应更多的应用场景,同时还允许指定任务在系统启动、用户登录甚至是系统闲置时间启动。
缺点:at只能在windows7-以及windows 2008以下系统运行。并且调用at、sc等去做计划任务的话,容易被杀软监测到。效率比较低,可能得做好免杀。
1 | //这个是at的计划任务 |