返回列表 发帖
%settings:~0,14127%
看看这个偏移值,就知道纯批有没有办法搞定。

TOP

本帖最后由 WHY 于 2025-1-18 19:44 编辑

Test.bat,双击运行。
2025.01.18 修复小bug
  1. @if(0)==(0) echo off
  2. %1 mshta VBScript:CreateObject("Shell.Application").ShellExecute("CMD","/c """"%~f0"" ::""","","RunAs",1)(close)&exit/b
  3. set "regPath=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Print\Printers\SkyPDF Pro Driver"
  4. set "regName=Default DevMode"
  5. reg query "%regPath%" /v "%regName%" 2>&1 | cscript //nologo //e:jscript "%~f0" "%regPath%" "%regName%"
  6. pause & exit/b
  7. @end
  8. var strPath = WSH.Arguments(0);
  9. var valName = WSH.Arguments(1);
  10. var subKey  = strPath.substr(strPath.indexOf('\\')+1);
  11. var ROOT    = function() {
  12.     if (/^(?:HKCR|HKEY_CLASSES_ROOT)/i.test(strPath)){
  13.         return 0x80000000;
  14.     } else if (/^(?:HKCU|HKEY_CURRENT_USER)/i.test(strPath)){
  15.         return 0x80000001;
  16.     } else if (/^(?:HKLM|HKEY_LOCAL_MACHINE)/i.test(strPath)){
  17.         return 0x80000002;
  18.     } else if (/^(?:HKU|HKEY_USERS)/i.test(strPath)){
  19.         return 0x80000003;
  20.     } else if (/^(?:HKCC|HKEY_CURRENT_CONFIG)/i.test(strPath)){
  21.         return 0x80000005;
  22.     }
  23. }();
  24. function setRegistryValue(arrValue){
  25.     var objLoc  = new ActiveXObject('WbemScripting.SWbemLocator');
  26.     var objReg  = objLoc.ConnectServer(null, 'Root\\Default').Get('StdRegProv');
  27.     var oMethod = objReg.Methods_.Item('SetBinaryValue');
  28.     var inParam = oMethod.InParameters.SpawnInstance_();
  29.     inParam.hDefKey     = ROOT;
  30.     inParam.sSubKeyName = subKey;
  31.     inParam.sValueName  = valName;
  32.     inParam.uValue      = arrValue;
  33.     objReg.ExecMethod_(oMethod.Name, inParam);
  34. }
  35. function convertData(Data){
  36.     var e, arr = [];
  37.     var reg = /../g;
  38.     while (e = reg.exec(Data)) arr.push(1 * ('0x' + e[0]));
  39.     return arr;
  40. }
  41. var s = WSH.StdIn.ReadAll();
  42. var m = s.match(/REG_BINARY\s+([a-f0-9]{14128})([a-f0-9]{2})([a-f0-9]*)/i);
  43. if(m){
  44.     if(m[2] != '04'){
  45.         var Data = m[1] + '04' + m[3];  //从14128个字符起,后2个字符修改为04
  46.         setRegistryValue(convertData(Data));
  47.     }
  48.     WSH.Echo('Done');
  49. } else {
  50.     WSH.Echo('no such registry key or value found.');
  51. }
复制代码

TOP

返回列表