2024年10月去除水印及弹窗工具 V1.3 免费版
⑴我们可以通过修改mui文件去除一些预览版显示字样,但是随着系统的版本越来越高,传统的修改MUI文件方法已经无效。这里就为大家带来一款全新的去除水印和弹窗的小工具,有需要的可以下载。
⑵一、LoadStringW函数
⑶windows在窗体上显示的字符串大部分是从mui文件里提取,比如上面的① 里面,就是winver.exe的同名文件winver.exe.mui里提取。
⑷怎么取呢,就是通过user.dll里的一个函数LoadStringW,可以去MSDN了解下这个函数的具体定义,各个参数分别代表什么。
⑸比如我要取出中的“Windows”,通过代码实现就是:
⑹wchar_t lpBuff[];
⑺HINSTANCE handle = LoadLibraryW(L“C:\Windows\System\zh-\winver.exe.mui”;
⑻int ret = LoadStringW(handle,,lpBuff,;
⑼这个lpBuff缓冲就是放读取到“Windows”字样。
⑽知道这个原理,我们就可以对一些不想要的字符串进行拦截处理。比如这里,当读取资源的时候,把“评估副本,过期时间”给清空掉。
⑾拦截方法大致是这样,具体代码看我的github。
⑿int WINAPI myLoadStringW(HINSTANCE hInt, UINT uid, LPWSTR lpBuffer, int sizeBuffer
⒀int res= DLoadStringW(hInt, uid, lpBuffer, sizeBuffer;
⒁if (uid ==
⒂memset(lpBuffer, ‘’, sizeBuffer;
⒃return res;
⒄memset就是用来清空当读到资源id的时候的内容。
⒅二、BrandingFormatStringForEdition函数
⒆图中的②处的一整套字符串也是通过上面的LoadStringW从shell.dll.mui中读取。
⒇但是与上面不同的是这里带了个变量:“%WINDOWS_LONG%”,这个就是用来获取Windows版本名称的。从哪里来的呢,通过调试发现是从winbrand.dll的函数BrandingFormatStringForEdition调用而来。
⒈过程就是:上代码
⒉wchar_t lpBuffer[] = L“%WINDOWS_LONG%”;
⒊wchar_t* result = BrandingFormatStringForEdition(lpBuffer, EditionId, ;
⒋这里的EditionId就是平时说的skuid,版本ID,你想显示什么都可以在这个EditionId上动手脚。
⒌但这里只是想把“Insider Preview”字样去掉:
⒍wchar_t* WINAPI myBrandingFormatStringForEdition(const wchar_t* lpBuffer, int EditionId, unsigned int size
⒎wchar_t* res = pBrandingFormatStringForEdition(lpBuffer, EditionId, size;
⒏if (wcsstr(res, L“ Insider Preview” !=
⒐//省略替换的代码
⒑return res;
⒒类似的还有“%MICROSOFT_PANYNAME% %WINDOWS_GENERIC%”、“%WINDOWS_COPYRIGHT%”等等。
⒓三、去除过期时间字样
⒔剩下就是图中的③,日期加时间。
⒕与时间有关的函数就那么几个:FileTimeToSystemTime、FileTimeToLocalFileTime、GetTickCount、GetDateFormat、GetTimeFormat这些。
⒖不管它的通过什么算法获取过期时间或者怎么判断系统当前是否已经过期,你总得定义输出的格式。只要把GetDateFormat、GetTimeFormat拦住,你怎么修改格式都可以。甚至消除掉:
⒗int WINAPI myGetDateFormatW(LCID Locale, DWORD dwFlags, const SYSTEMTIME* lpDate, LPCWSTR lpFormat, LPWSTR lpDateStr, int hDate
⒘int res = DGetDateFormatW(Locale, dwFlags, lpDate, lpFormat, lpDateStr, hDate;
⒙memset(lpDateStr, ‘’, hDate;
⒚return res;