给别人的软件启动前加上自己的提示框

开始之前我们先做下准备工作首先载入OD,我们把前四行先复制一下粘贴到记事本上,因为一会儿我们修改的时候会把前三行给自动填充,所以一会儿我们要给它补上。然后Ctrl+N打开函数列表,找到 MessageBoxA 函数 右键复制一下粘贴到记事本上接下来,我们找到一个空白的地方写上我们要提示字符。选中一段空白的地方然后按“空格”在“ASCII”里编辑我们的字符编辑好以后,我们选中编辑好的字符串右键保存一下(注:我们编辑提示信息的地址得记下,一会儿要用的,用的地址是“00406F80”和“00406FC0”)保存好后,我们直接用OD载入我们刚才保存的exe文件。载入后,我们直接 Ctrl+B 搜索二进制字符串“00 00 00 00 00”……(也就是找到空白处,开始编写代码)选中一行按“空格”开始编写编写完成后,我们回到程序刚载入时的起始地方,把第一句改成“jmp 00405D9E”,也就是说让程序运行前先执行下我们的提示框,然后再正常运行。完成后保存下吧。这里我就不上图了,记得是 “保存全部修改”哦。好,我们现在来执行下我们修改后的程序吧 转自 https://www.xuepojie.com/thread-1381-1-2.html练手软件下载地址 https://www.xuepojie.com/forum.php?mod=attachment&aid=MjY2MHwyZmJiNDcxYnwxNjM3NDc3MDQyfDEzNDc4N3wxMzgx

利用ntfs属性隐藏windows后门文件的方法

浅析ADS(供选数据流)隐藏Windows后门的方法 ADS (供选数据流/ alternate data stream)NTFS使用Master File Table (MFT) 来管理文件。windows系统中的每个文件都对应一个MFT记录。而每一个MFT记录由若干个属性(attribute)组成,用来描述该文件的具体信息。比如 $FILE_NAME 属性描述了该文件的文件名和创建修改访问时间,而$DATA属性包含了该文件的具体内容。很多人想当然的认为一个文件只能有一个$DATA属性,这是错误的。在NTFS中,一个文件可以有多个$DATA属性。比如我现在想给test.txt加入一个名为ThisIsAnADS的$DATA属性: 1c:\test>echo Hello, freebuf! > test.txt:ThisIsAnADS 你可能发现了这两个$DATA属性还是略有不同的,第一个没有名称,而第二个有名称(ThisIsAnADS)!通常人们称第一个为主数据流(primary data stream )。主数据流在文件创建的同时就被创建了,并且默认没有名称,所以也叫做未名数据流 (unnamed data stream)。第二个是我们后来创建的,并且赋予了名称(ThisIsAnADS)。这个就是供选数据流 (alternate data stream,ADS)。绝大多数用户只会和主数据流打交道,从某种意义上来说,ADS对用户是隐藏的。用常规的dir命令和windows文件管理器都没法发现ADS。而当我们查看文件内容的时候也仅仅显示主数据流的内容。 123456789101112c:\test>dir test.txtVolume in drive C is OSVolume Serial Number is F467-BAF0 Directory of c:\test 2015-07-26 10:29 13 test.txt1 File(s) 13 bytes0 Dir(s) 42 991 456 256 bytes free c:\test>type test.txtHello, world! 看!dir和type命令只显示了主数据流的长度和内容。但是我们可以使用dir /r 命令来列出ADS 12345678910c:\test>dir /r test.txtVolume in drive C is OSVolume Serial Number is F467-BAF0 Directory of c:\test 2015-07-26 10:29 13 test.txt18 test.txt:ThisIsAnADS:$DATA1 File(s) 13 bytes0 Dir(s) 42 991 382 528 bytes free 我们也可以用powershell命令Get-Content来查看ADS的内容

简单三步抢先体验安装WIN11安卓子系统

#如何抢先体验安装WIN11的安卓子系统? 目前安卓子系统仅仅推送给美国地区的 Beta 渠道用户,使用本文方法可以跳过这个限制!所需要子系统下载地址 https://pan.huang1111.cn/s/E7yOSb 安卓adb下载地址 https://dl.google.com/android/repository/platform-tools-latest-windows.zip win11已经有安卓子系统了啦,只需三步,就可以让你的Win11,抢先体验安卓子系统,今天我们来聊聊,如何快速安装Win11的安卓子系统。 第一步,打开win11的控制面板,钩选上虚拟机平台,确定后重启第二步,下载Windows Subsystem For Android你可以直接通过这个地址(https://www.microsoft.com/store/productId/9P3395VX91NR)在微软商店下载,但有诸多限制,可以直接在国内下载Win11安卓子系统在国内下载(https://pan.huang1111.cn/s/E7yOSb),adb下载地址 https://dl.google.com/android/repository/platform-tools-latest-windows.zip下载好后重命名为wsa,然后以管理员打开powershell运行 1Add-AppxPackage wsa.Msixbundle 注意命令的大小写,不能写错!正确后开始安装安卓子系统 第三步,安装安卓应用,通过开始菜单,运行安卓子系统,打开安卓子系统的开发人员模式,同时打开一下安卓子系统的文件,如果你的电脑没有开启虚拟化,就会有错误提示,无法打开文件,正确开启虚拟化后刷新IP地址,开发人员模式会提示adb的连接地址,下载好安卓的adb程序,解压后在adb目录打开命令提示符,运行adb connect 上面显示的地址 1adb connect 127.0.0.1:58526 如果安卓子系统没有正确运行,会弹出连接失败,你可以重新运行一下文件或点击子系统资源激活安卓子系统,再次使用adb进行连接,正确连接后会提示adb连接成功,然后就 可以使用adb安装应用,输入adb install app包的地址,

一个设置绕过TPM成功安装WIN11正式版系统

一个设置让你绕过TPM,成功安装WIN11的方法!安装WIN11需要检测电脑是否有TPM2.0芯片?没有TPM能不能安装WIN11呢?今天我们来聊聊没有TPM2.0,如何成功安装WIN11?首先,下载好WIN11正式版的ISO映像文件,点击setup开始安装,跳过输入产品密钥,选择专业版,弹出此电脑无法运行WIN11,按键盘上的Shift+F10打开命令提示符,运行注册表regedit,依次打开HKEY_LOCAL_MACHINE,SYSTEM Setup,对着Setup项右键,新建 LabConfig项,在此项下新建32位BypassTPMCheck的DWORD值,并设置为1,再新建32位的DWORD值BypassSecureBootCheck,并设置为1,关闭注册表,关闭命令行,点击左上角返回上一步,再点击下一步,成功跳过TPM检测,选择安装类型,新装需进行分区及格式化,升级就直接选择安装的系统盘符,下一步后就开始安装,重启两次后来到海内存知己界面,选择国家,选择输入法和布局,漫长的更新检查后,输入电脑名称,多次转圈后再一次自动重启,输入帐户和密码,设置找回帐户的三个安全问题及答案,来到隐私设置,显示准备界面,完成后进入Win11桌面。Win11的激活仍然可以使用,WIN10的激活方法!数字激活仍然可以永久激活了WIN11,至于跳过TPM,你也可以在安装前,直接打开ISO映像文件,在source目录下,改名或删除或修改appraiserres.dll文件,如果你的主板支持TPM2.0那就在BIOS中打开设置,都可以成功安装Win11系统! 欢迎关注百脑问抖音:杰叔说电脑 抖音号:jscomp 欢迎关注百脑问抖音:表情包零动画 抖音号:bqbao 欢迎关注百脑问小红书:杰叔说电脑

一句代码,揭开CPU执行原理

C语言写入一行代码 sum = a + b 计算机是怎样执行你写的这行代码的?C语言的一行代码int sum = a + b;经过编译器编译后你从IDA反编译后看到就是这个样子8B 45 EC mov eax, [ebp+a]03 45 E0 add eax, [ebp+b]89 45 F8 mov [ebp+sum], eax汇编代码对应的机器指令分别为8B 45 EC03 45 E089 45 F8十六进制只是为了书写方便计算机真正能看懂的是二进制的比特流10001011 01000101 11101100 00000011 01000101 11100000 10001001 01000101 11111000 计算机怎么执行这些比特流的呢?我们先了解一下CPU的指令格式x86架构CPU指令格式象这样每一条指令主要有六个部份,操作码是必须的,标识这条指令是什么功能CPU是执行指令的核心部件,在CPU中有一个指令寄存器IP,(32位叫eip 64位叫rip),开始执行上面的二进制比特流时,CPU指令寄存器指向第一条指令,开始读取第一个字节:10001011,也就是十六进制的8B,然后开始指令译码这是x86架构的cpu指令操作码表:看到8b是 mov指令往eax塞数据,再往后看十六进制 45的译码就是根据ebp寄存器的值+8位偏移来读取数据,再往后读取一个字节,就是偏移值 EC。第一条指令译出来就是:将ebp+EC位置处的4个字节的数据取出来,放到eax寄存器中。这就是这一条指令要干的事情,同时CPU得出,这一条指令长度是3个字节,下一条指令的起始地址是在3个字节之后,指令寄存器EIP就向后移动,指向下一条指令的地址:$ + 3执行完一条以后,又来到指令寄存器EIP指向的地方,随后再次指令译码、执行,不断重复这个过程,依次执行每一条指令。这其实就是CPU工作最基本的原理。 欢迎关注百脑问抖音:杰叔说电脑 抖音号:jscomp 欢迎关注百脑问抖音:表情包零动画 抖音号:bqbao 欢迎关注百脑问小红书:电脑百科知识

解决C盘空间不足的万能方法

简介C盘空间只有50G的大小,为什么能保存下900多G的游戏?今天我们来说说解决C盘空间不足的万能方法!C盘空间不足的解决方法通常有以下几种,第一,安装软件时选择其他盘,第二,清理系统的垃圾或冗余文件第三,扩展C盘分区,增加C盘容量。有没有一种方法让C盘空间永远存不满呢?回到我们开头的话题,50G的C盘,可以保存900多G的游戏。解释这个问题就要说到NTFS文件格式的符号链接,我们只要把存放在C盘的数据文件或文件夹移到其他盘,再创建文件或文件夹的符号链接到C盘,就能让C盘永远占不满!怎么创建符号链接呢,以C盘的photoshop目录为例,把photoshop剪切放在D盘,然后打开命令提示符,输入mklink /d “C:\Program Files\Adobe\Photoshop” “D:\Program Files\Adobe\Photoshop” 回车,其他所有设置不用更改,就象photoshop目录仍然在C盘一样!这就是网吧的电脑玩steam的游戏,C盘可以存放无限游戏的原因! mklink命令详解 mklink 命令区别:/d 给目录创建符号链接,简称符号链接、软链接;/h 创建硬链接,简称硬链接;/j 给目录创建联接点,简称软链接。当没有上面3个命令符时,创建是文件软链接!文件类型:.symlink注意:路径,建议使用绝对路径,必须使用英文双引号将路径括起来;空格,命令之间必须有空格 符号链接、目录链接、硬链接与快捷方式 欢迎关注百脑问抖音:杰叔说电脑 抖音号:jscomp 欢迎关注百脑问抖音:表情包零动画 抖音号:bqbao 欢迎关注百脑问小红书:电脑百科知识

如何从微软官方高速下载Win11正式版ISO?

如何才能从微软官方快速下载到win11正式版?从百度搜索win11官方正式版,搜索结果均是2021年10月以前的记录,中国Win11正式版推送时间10月6日 正式版版本号22000.194,显然,从百度搜索出来的结果均不能下载,下载后都是原来的win11测试版! win11微软官方正式版下载方法 打开网址 https://www.microsoft.com/zh-cn/software-download/windows11 界面如下:其中有三个选项 Windows 11 安装助手,如果你是在您当前所使用设备上安装 Windows 11,就选择此项下载,下载后是一个Windows11InstallationAssistant.exe可执行文件,运行后按照提示安装! 创建 Windows 11 安装媒体,如果要在新电脑或旧电脑上重新安装 Windows 11 或执行全新安装,请使用此选项下载媒体创建工具,以制作可引导的 USB 或 DVD。下载后是一个MediaCreationToolW11.exe的可执行文件,可以创建安装U盘或安装光盘! 下载 Windows 11 磁盘映像 (ISO),此项先选择win11或win11家庭版,点击下载后,再选择语言,确认就可以直接下载win11的ISO文件!此下载链接24小时有效,需要在24小时内下载完成! 加快下载win11官方正式版速度的方法!如果你是选择的第二项制作安装U盘,可能速度稍快!但从微软官方的下载链接下载ISO,速度很慢,我们可以离线下载Win11官方正式版ISO。百度网盘和微云的离线下载均不能下载Win11官方正式版ISO,均会显示失败!我们可以从offcloud离线下载!首先打开 https://offcloud.com/, 然后输入一个可用的电子邮件,点击加入 如果你想后续使用offcloud,可以在offcloud发来的电子邮件中设置密码,以后就可以使用邮件和密码登录offcloud!进入offcloud界面后,如下面图示,首先在1处选择代理为香港,然后在2处把微软官方Win11正式版的下载地址粘贴,再按3处的下载按钮,在offcloud弹出来的链接进行下载,速度可能达到几M或十几M的速度! 这样就可以高速的下载Win11官方正式版了!还能避免你下载到满是插件、广告、锁主页等的微软十月推出的Win11正式版系统! 欢迎关注百脑问抖音:杰叔说电脑 抖音号:jscomp

利用Nvidia的API设置数字振动数值源码_显示器亮度、对比度等设置源码

开始是一位朋友有这个需求,他给了我一个英伟达官网的开发包,名字是:R410-developer.zip(诸位可以自己到英伟达官网下载),里面提供了一些示例,包含自定义分辨率、显示器颜色设置等,但是显示器色彩设置的例子一致没有跑通,而且我也没有找到哪个参数是可以设置数字振动值的,所以憋屈了很多天。但直到看到了一个 AHK 版本实现的设置工具通过代码发现,其实实现方法是通过 nvapi.dll 动态库导出的一个查询函数地址的方法,将指定接口导出来执行具体业务。在加上在 github 上搜索的各类示例,最终实现了这个功能,下面详细介绍实现步骤。 需要的方法和结构设置数字振动数值需要先通过 nvapi.dll 导出的 NvAPI_QueryInterface_t 方法获取 NvAPI_Initialize_t 方法来初始化 NvAPI。然后依次获取显示器句柄、获取当前显示器数字振动值、设置数字振动值的函数地址,他们的声明分别对应如下:12345678910// 查询在 nvapi.dll 中函数的地址方法函数声明typedef int*(*NvAPI_QueryInterface_t)(unsigned int offset);// 初始化 NvAPI 的方法typedef int(*NvAPI_Initialize_t)();// 根据 ID 枚举显示器句柄的方法typedef int(*NvAPI_EnumNvidiaDisplayHandle_t)(int thisEnum, int* pNvDispHandle);// 获取数字振动当前值typedef int(*NvAPI_GetDVCInfoEx_t)(int hNvDisplay, int outputId, NV_DISPLAY_DVC_INFO_EX* pDVCInfo);// 设置数字振动值typedef int(*NvAPI_SetDVCLevelEx_t)(int hNvDisplay, int outputId, NV_DISPLAY_DVC_INFO_EX* pDVCInfo); 其中设置和获取数字振动值需要一个结构体 NV_DISPLAY_DVC_INFO_EX,其声明如下:12345678typedef struct{ unsigned int version; // 结构体版本 int currentLevel; // 当前级别 int minLevel; // 最低级别 int maxLevel; // 最高级别 int defaultLevel; // 默认级别} NV_DISPLAY_DVC_INFO_EX, *PNV_DISPLAY_DVC_INFO_EX; 获取各个接口地址我们首先 Load nvapi.dll 然后得到 nvapi_QueryInterface 方法的地址,然后通过 nvapi_QueryInterface 方法查询另外一些接口的地址。如下所示:123456789101112131415161718192021222324bool NvController::Initialize(){ hModule = LoadLibraryW(TEXT("nvapi.dll")); if (hModule == nullptr) { std::cerr << "Failed to load nvapi.dll." << std::endl; return false; } NvAPI_QueryInterface = (NvAPI_QueryInterface_t)GetProcAddress(hModule, "nvapi_QueryInterface"); NvAPI_Initialize = (NvAPI_Initialize_t)(*NvAPI_QueryInterface)(_NvAPI_Initialize); NvAPI_EnumNvidiaDisplayHandle = (NvAPI_EnumNvidiaDisplayHandle_t)(*NvAPI_QueryInterface)(_NvAPI_EnumNvidiaDisplayHandle); NvAPI_GetDVCInfoEx = (NvAPI_GetDVCInfoEx_t)(*NvAPI_QueryInterface)(_NvAPI_GetDVCInfoEx); NvAPI_SetDVCLevelEx = (NvAPI_SetDVCLevelEx_t)(*NvAPI_QueryInterface)(_NvAPI_SetDVCLevelEx); _NvAPI_Status status = (_NvAPI_Status)(*NvAPI_Initialize)(); if (status != NVAPI_OK) { std::cerr << "NvAPI initialization failed." << std::endl; return false; } return true;} 其中以下划线开头的枚举名字是每个函数在 dll 中的对应地址,这些是写死的,如下所示:12345678enum NvAPIs{ _NvAPI_Initialize = 0x150E828, _NvAPI_EnumNvidiaDisplayHandle = 0x9ABDD40D, _NvAPI_GetAssociatedNvidiaDisplayName = 0x22A78B05, _NvAPI_GetDVCInfoEx = 0x0E45002D, _NvAPI_SetDVCLevelEx = 0x4A82C2B1}; 你可能会问,你怎么知道这些函数地址的?其实我也是搜索到的,也看了以前 NvAPI 老版本提供的代码,可以搜索到相关痕迹。点击查看此文件里面有完整的所有函数地址。 获取和设置数字振动得到了各个函数的地址,我们就可以设置数字振动值了,代码如下:12345678910111213141516171819202122232425bool NvController::SetDVCLevelEx(int nDisp, int level){ int NvDispHandle; if (EnumNvidiaDisplayHandle(nDisp, &NvDispHandle) != 0) { NV_DISPLAY_DVC_INFO_EX oldInfo = GetDvcInfoEx(nDisp); NV_DISPLAY_DVC_INFO_EX info; info.version = oldInfo.version; info.currentLevel = level; info.minLevel = oldInfo.minLevel; info.maxLevel = oldInfo.maxLevel; info.defaultLevel = oldInfo.defaultLevel; _NvAPI_Status status = (_NvAPI_Status)(*NvAPI_SetDVCLevelEx)(NvDispHandle, 0, &info); if (status != NVAPI_OK) { return false; } return true; } return false;} 我们首先获得用户传入的显示器编号所对应的句柄,然后根据这个句柄获取当前数字振动的数值,然后修改其 currentLevel 成员数值来设置数字振动效果。这样处理后就可以使用了。完整代码参考地址:https://github.com/nmgwddj/nvapi-example 转载自https://cloud.tencent.com/developer/article/13715644. 屏幕亮度,对比度获取和调节 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960bool set_screen_brightness(long val){ HWND hDesktopWnd = GetDesktopWindow(); HMONITOR hMonitor = MonitorFromWindow(hDesktopWnd, MONITOR_DEFAULTTOPRIMARY); DWORD cPhysicalMonitors = 0; if (!GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors)) return false; LPPHYSICAL_MONITOR pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(cPhysicalMonitors* sizeof(PHYSICAL_MONITOR)); if (pPhysicalMonitors) { GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors); //设置屏幕亮度 SetMonitorBrightness(pPhysicalMonitors->hPhysicalMonitor, val); //设置屏幕对比度 //SetMonitorContrast(pPhysicalMonitors->hPhysicalMonitor, val); // Close the monitor handles. DestroyPhysicalMonitors(cPhysicalMonitors, pPhysicalMonitors); // Free the array. free(pPhysicalMonitors); } return true;}long get_screen_brightness(){ long lret = -1; HWND hDesktopWnd = GetDesktopWindow(); HMONITOR hMonitor = MonitorFromWindow(hDesktopWnd, MONITOR_DEFAULTTOPRIMARY); DWORD dwMin = 0, dwMax = 0, dwCur = 0; DWORD cPhysicalMonitors = 0; if (!GetNumberOfPhysicalMonitorsFromHMONITOR(hMonitor, &cPhysicalMonitors)) return false; LPPHYSICAL_MONITOR pPhysicalMonitors = (LPPHYSICAL_MONITOR)malloc(cPhysicalMonitors* sizeof(PHYSICAL_MONITOR)); if (pPhysicalMonitors) { GetPhysicalMonitorsFromHMONITOR(hMonitor, cPhysicalMonitors, pPhysicalMonitors); //获取屏幕对比度 //if (GetMonitorContrast(pPhysicalMonitors->hPhysicalMonitor, &dwMin, &dwCur, &dwMax)) //获取屏幕亮度 if (GetMonitorBrightness(pPhysicalMonitors->hPhysicalMonitor, &dwMin, &dwCur, &dwMax)) { lret = dwCur; } //SetMonitorContrast(pPhysicalMonitors->hPhysicalMonitor, val); // Close the monitor handles. DestroyPhysicalMonitors(cPhysicalMonitors, pPhysicalMonitors); // Free the array. free(pPhysicalMonitors); } return lret;} 屏幕色彩灰度调节(Gamma调节)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758// #pragma pack(push, 4)// typedef struct _tagD3dGammaramp_t// {// WORD red[256];// WORD green[256];// WORD blue[256];// }D3DGAMMARAMP, *LPD3DGAMMARAMP;// #pragma pack(pop)class CScreenDC{public: CScreenDC(){ m_hdc = GetDC(NULL); } ~CScreenDC(){ if (m_hdc) ReleaseDC(NULL, m_hdc); m_hdc = NULL; } operator HDC(){ return m_hdc; }private: HDC m_hdc;};bool set_screen_gray(long val){ //HDC的对比度 val = min(100, val); val = max(0, val); val = val*128.0 / 100; /* bright >=0 && bright <= 128 */ CScreenDC hScreenDc; D3DGAMMARAMP Ramp = { 0 }; BOOL bret = GetDeviceGammaRamp(hScreenDc, &Ramp); if (!bret) return false; for (int iIndex = 0; iIndex < 256; iIndex++) { //bright 为什么需要+128,因为当 bring < 128 的时候效果同bright = 0 Ramp.red[iIndex] = min(65535, iIndex * (val + 128)); Ramp.green[iIndex] = min(65535, iIndex * (val + 128)); Ramp.blue[iIndex] = min(65535, iIndex * (val + 128)); } bret = SetDeviceGammaRamp(hScreenDc, &Ramp); return bret ? true:false;}long get_screen_gray(){ CScreenDC hScreenDc; D3DGAMMARAMP Ramp = { 0 }; BOOL bret = GetDeviceGammaRamp(hScreenDc, &Ramp); if (!bret) return -1; long bright = Ramp.red[1] - 128; bright = bright * 100.0 / 128; bright = min(100, bright); bright = max(0, bright); return bright;} 鼠标移动速度调节123456789101112131415161718bool set_mousemove_speed(long val){ //其接收范围在1(最慢)和20(最快)之间的值。值为10是 val = min(20, val); val = max(1, val); BOOL bret = SystemParametersInfo(SPI_SETMOUSESPEED, 0, (LPVOID)val, SPIF_UPDATEINIFILE || SPIF_SENDCHANGE || SPIF_SENDWININICHANGE); if (!bret) return false; return true;}long get_mousemove_speed(){ int nSpeed = 0; BOOL bret = SystemParametersInfo(SPI_GETMOUSESPEED, 0, &nSpeed, 0); if (!bret) return -1; return nSpeed;} 鼠标双击速度调节1234567891011121314151617181920//方法1:SystemParametersInfo(SPI_SETDOUBLECLICKTIME....bool set_mousedbclick_speed(long val){ //最快200ms 最慢 900ms 间隔70ms //SPI_SETDOUBLECLICKTIME val = 550 - (val - 10) * 35; val = min(900, val); val = max(200, val); BOOL bret = SetDoubleClickTime(val); if (!bret) return false; return true;}UINT get_mousedbclick_speed(){ UINT ival = GetDoubleClickTime(); ival = (ival - 550) / 35 + 10; return ival;} 转自 https://blog.csdn.net/CAir2/article/details/103897288 华夏网盟的成品下载 链接:https://share.weiyun.com/GJUzRJLE 密码:6jaisr

实现QQ8.0和QQ9.0登录界面动态背景效果

QQ8.0和QQ9.0登录界面的头部动态背景非常有个性,如何实现的呢? QQ8.0的登录界面效果,使用的JS和html5实现!就是QQ登录界面的这张图片最终的效果如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229<!DOCTYPE html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>html5背景</title> <style type="text/css"> *{margin:0;padding:0;list-style-type:none;} a,img{border:0;} </style> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script></head><body><div id="container" style="width:100%;height:700px;"> <div id="anitOut"></div></div><script type="text/javascript">$(function () { if (!window.ActiveXObject && !!document.createElement("canvas").getContext) { $.getScript("cav.js", function () { var t = { width: 1.5, height: 1.5, depth: 10, segments: 12, slices: 6, xRange: 0.8, yRange: 0.1, zRange: 1, ambient: "#525252", diffuse: "#FFFFFF", speed: 0.0002 }; var G = { count: 2, xyScalar: 1, zOffset: 100, ambient: "#002c4a", diffuse: "#005584", speed: 0.001, gravity: 1200, dampening: 0.95, minLimit: 10, maxLimit: null, minDistance: 20, maxDistance: 400, autopilot: false, draw: false, bounds: CAV.Vector3.create(), step: CAV.Vector3.create(Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1)) }; var m = "canvas"; var E = "svg"; var x = { renderer: m }; var i, n = Date.now(); var L = CAV.Vector3.create(); var k = CAV.Vector3.create(); var z = document.getElementById("container"); var w = document.getElementById("anitOut"); var D, I, h, q, y; var g; var r; function C() { F(); p(); s(); B(); v(); K(z.offsetWidth, z.offsetHeight); o() } function F() { g = new CAV.CanvasRenderer(); H(x.renderer) } function H(N) { if (D) { w.removeChild(D.element) } switch (N) { case m: D = g; break } D.setSize(z.offsetWidth, z.offsetHeight); w.appendChild(D.element) } function p() { I = new CAV.Scene() } function s() { I.remove(h); D.clear(); q = new CAV.Plane(t.width * D.width, t.height * D.height, t.segments, t.slices); y = new CAV.Material(t.ambient, t.diffuse); h = new CAV.Mesh(q, y); I.add(h); var N, O; for (N = q.vertices.length - 1; N >= 0; N--) { O = q.vertices[N]; O.anchor = CAV.Vector3.clone(O.position); O.step = CAV.Vector3.create(Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1), Math.randomInRange(0.2, 1)); O.time = Math.randomInRange(0, Math.PIM2) } } function B() { var O, N; for (O = I.lights.length - 1; O >= 0; O--) { N = I.lights[O]; I.remove(N) } D.clear(); for (O = 0; O < G.count; O++) { N = new CAV.Light(G.ambient, G.diffuse); N.ambientHex = N.ambient.format(); N.diffuseHex = N.diffuse.format(); I.add(N); N.mass = Math.randomInRange(0.5, 1); N.velocity = CAV.Vector3.create(); N.acceleration = CAV.Vector3.create(); N.force = CAV.Vector3.create() } } function K(O, N) { D.setSize(O, N); CAV.Vector3.set(L, D.halfWidth, D.halfHeight); s() } function o() { i = Date.now() - n; u(); M(); requestAnimationFrame(o) } function u() { var Q, P, O, R, T, V, U, S = t.depth / 2; CAV.Vector3.copy(G.bounds, L); CAV.Vector3.multiplyScalar(G.bounds, G.xyScalar); CAV.Vector3.setZ(k, G.zOffset); for (R = I.lights.length - 1; R >= 0; R--) { T = I.lights[R]; CAV.Vector3.setZ(T.position, G.zOffset); var N = Math.clamp(CAV.Vector3.distanceSquared(T.position, k), G.minDistance, G.maxDistance); var W = G.gravity * T.mass / N; CAV.Vector3.subtractVectors(T.force, k, T.position); CAV.Vector3.normalise(T.force); CAV.Vector3.multiplyScalar(T.force, W); CAV.Vector3.set(T.acceleration); CAV.Vector3.add(T.acceleration, T.force); CAV.Vector3.add(T.velocity, T.acceleration); CAV.Vector3.multiplyScalar(T.velocity, G.dampening); CAV.Vector3.limit(T.velocity, G.minLimit, G.maxLimit); CAV.Vector3.add(T.position, T.velocity) } for (V = q.vertices.length - 1; V >= 0; V--) { U = q.vertices[V]; Q = Math.sin(U.time + U.step[0] * i * t.speed); P = Math.cos(U.time + U.step[1] * i * t.speed); O = Math.sin(U.time + U.step[2] * i * t.speed); CAV.Vector3.set(U.position, t.xRange * q.segmentWidth * Q, t.yRange * q.sliceHeight * P, t.zRange * S * O - S); CAV.Vector3.add(U.position, U.anchor) } q.dirty = true } function M() { D.render(I) } function J(O) { var Q, N, S = O; var P = function (T) { for (Q = 0, l = I.lights.length; Q < l; Q++) { N = I.lights[Q]; N.ambient.set(T); N.ambientHex = N.ambient.format() } }; var R = function (T) { for (Q = 0, l = I.lights.length; Q < l; Q++) { N = I.lights[Q]; N.diffuse.set(T); N.diffuseHex = N.diffuse.format() } }; return { set: function () { P(S[0]); R(S[1]) } } } function v() { window.addEventListener("resize", j) } function A(N) { CAV.Vector3.set(k, N.x, D.height - N.y); CAV.Vector3.subtract(k, L) } function j(N) { K(z.offsetWidth, z.offsetHeight); M() } C(); }) } else { alert('调用cav.js失败'); }});</script></body></html> 其中的cav.js下载地址:链接:https://share.weiyun.com/KDUzFY4R 密码:b5gvk3就这个cav.js,以前是腾讯官方的地址,即http://im-img.qq.com/pcqq/js/200/cav.js?_=1428576021379 但现在已经失效了,百度搜索,到处是积分下载!拿着腾讯的东西赚积分!!! QQ9.0的登录界面梦幻的动画,实际为视频!QQ9.5登录界面的动态素材如下您的浏览器不支持HTML5的 video 标签,无法为您播放!

成功,从《全力以赴》开始_励志演讲

梦想不会自动实现的,厌倦了平庸的话,就全力以赴吧!“在任何时候都能牺牲自己,成为自己,成为未来。”这是埃克里·托马斯的励志演讲短片,全程激情昂扬,为忙碌迷茫的人们,注射一剂强心剂如果无法播放,复制下面的链接在浏览器中打开即可https://ks-xpc18.xpccdn.com/4a3ce671-a5ed-4287-a40e-1d88f3cf574a.mp4 var oCss = document.createElement( "link" ); oCss.rel = "stylesheet"; oCss.href = "//cdn.bootcdn.net/ajax/libs/dplayer/1.9.1/DPlayer.min.css"; document.getElementsByTagName('head').item(0).appendChild(oCss); function dynamicLoad() { var _doc=document.getElementsByTagName('head')[0]; var script=document.createElement('script'); script.setAttribute('type','text/javascript'); script.setAttribute('src','//cdn.bootcdn.net/ajax/libs/dplayer/1.9.1/DPlayer.min.js'); _doc.appendChild(script); script.onload=script.onreadystatechange=function(){ if(!this.readyState||this.readyState=='loaded'||this.readyState=='complete'){ var dplayer=new DPlayer({ element: document.getElementById('dplayer'), preload: 'auto', autoplay: false, theme: '#FADFA3', video:{ quality: [{ name: '标准', url: 'https://ks-xpc18.xpccdn.com/4a3ce671-a5ed-4287-a40e-1d88f3cf574a.mp4' }], defaultQuality: 0, pic: '', type: 'auto' } }); } script.onload=script.onreadystatechange=null; } } dynamicLoad(); 视频地址