无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3189|回复: 14

[原创] 发个另类的东西吧

[复制链接]
发表于 2018-11-25 21:02:23 | 显示全部楼层 |阅读模式
  1. #include"stdafx.h"
  2. #include<windows.h>
  3. #include<stdio.h>
  4. #include<ShlObj.h>
  5. #include<Shlwapi.h>
  6. #include<regex>

  7. #pragma comment(lib, "Shlwapi.lib")
  8. #pragma comment(lib, "Shell32.lib")
  9. #pragma comment(lib, "Ole32.lib")

  10. int getCurrentPath(TCHAR *);
  11. BOOL isFilenameValid(LPCTSTR);
  12. BOOL createLink(LPCTSTR, LPCTSTR, LPCTSTR);
  13. BOOL pin(int, LPCTSTR);
  14. BOOL unpin(int, LPCTSTR);
  15. int getTarget(LPCTSTR);
  16. BOOL getExe(LPCTSTR, TCHAR *, TCHAR *);
  17. BOOL getLink(LPCTSTR, TCHAR *);
  18. BOOL getUnloadLink(int, LPCTSTR, TCHAR *);
  19. int getOperation(LPCTSTR);
  20. void processError();

  21. int myError=-1;

  22. int _tmain(int argc, _TCHAR* argv[])
  23. {
  24.         int target;
  25.         BOOL isPin=TRUE;
  26.         TCHAR exePath[MAX_PATH], arguments[MAX_PATH], linkPath[MAX_PATH];
  27.         switch(argc){
  28.         case 3:
  29.                 target=getTarget(argv[1]);
  30.                 if(1==target || 2==target){
  31.                         if(getExe(argv[2], exePath, arguments))
  32.                                 if(getLink(PathFindFileName(exePath), linkPath))myError=0;
  33.                 }
  34.                 break;
  35.         case 4:
  36.                 target=getTarget(argv[1]);
  37.                 if(1==target || 2==target){
  38.                         if(getExe(argv[2], exePath, arguments))
  39.                                 if(getLink(argv[3], linkPath))myError=0;
  40.                 }
  41.                 else{
  42.                         target=getTarget(argv[2]);
  43.                         if(1==target || 2==target){
  44.                                 int operation=getOperation(argv[1]);
  45.                                 if(0==operation)break;
  46.                                 if(-1==operation){
  47.                                         isPin=FALSE;
  48.                                         if(getUnloadLink(target, argv[3], linkPath))myError=0;
  49.                                 }
  50.                                 else{
  51.                                         if(getExe(argv[3], exePath, arguments))
  52.                                                 if(getLink(PathFindFileName(exePath), linkPath))myError=0;
  53.                                 }
  54.                         }
  55.                 }
  56.                 break;
  57.         case 5:
  58.                 target=getTarget(argv[2]);
  59.                 if(1!=target && 2!=target)break;
  60.                 if(1!=getOperation(argv[1]))break;
  61.                 if(!getExe(argv[3], exePath, arguments))break;
  62.                 if(getLink(argv[4], linkPath))myError=0;
  63.         }
  64.         if(!myError)
  65.                 if(isPin){
  66.                         createLink(exePath, arguments, linkPath);
  67.                         pin(target, linkPath);
  68.                         if(!DeleteFile(linkPath))myError=-4;
  69.                 }
  70.                 else unpin(target, linkPath);
  71.         processError();
  72. }

  73. int getCurrentPath(TCHAR *buffer)
  74. {
  75.         GetModuleFileName(NULL, buffer, MAX_PATH);
  76.         TCHAR *temp=buffer;
  77.         while('\0'!=*temp++);
  78.         while('\\'!=*--temp);
  79.         *++temp='\0';
  80.         return temp-buffer;
  81. }

  82. BOOL isFilenameValid(LPCTSTR filename){
  83.         int cbMultiByte = WideCharToMultiByte(CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL);
  84.         char *pszText=new char[cbMultiByte];
  85.         WideCharToMultiByte(CP_ACP, 0, filename, -1, pszText, cbMultiByte, NULL, NULL);
  86.         int retVal=std::regex_match(pszText, std::regex("^[^ \\\\/|<>:"?*]+[^\\\\/|<>:"?*]*$"));
  87.         delete pszText;
  88.         return retVal;
  89. }

  90. BOOL createLink(LPCTSTR exePath, LPCTSTR arguments, LPCTSTR linkPath)
  91. {
  92.         CoInitialize(NULL);
  93.     HRESULT hr;
  94.     IShellLink     *pLink;
  95.     IPersistFile   *ppf;
  96.     hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);
  97.     if (FAILED(hr))return FALSE;
  98.     hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
  99.     if (FAILED(hr))
  100.     {
  101.         pLink->Release();
  102.         return FALSE;
  103.     }
  104.     pLink->SetPath(exePath);
  105.         pLink->SetArguments(arguments);
  106.         TCHAR buffer[256];
  107.         _tcscpy(buffer, exePath);
  108.         PathRemoveFileSpec(buffer);
  109.         pLink->SetWorkingDirectory(buffer);
  110.     pLink->SetShowCmd(SW_SHOWNORMAL);
  111.     hr = ppf->Save(linkPath, TRUE);
  112.     ppf->Release();
  113.     pLink->Release();
  114.         SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH, buffer, 0);
  115.         CoUninitialize();
  116.         return SUCCEEDED(hr);
  117. }

  118. BOOL pin(int target, LPCTSTR link){
  119.         LPCTSTR strTarget=1==target?TEXT("startpin"):TEXT("taskbarpin");
  120.         return (int)ShellExecute(NULL, strTarget, link, NULL, NULL, 0);
  121. }

  122. BOOL unpin(int target, LPCTSTR exe){
  123.         LPCTSTR strTarget=1==target?TEXT("startunpin"):TEXT("taskbarunpin");
  124.         return (int)ShellExecute(NULL, strTarget, exe, NULL, NULL, 0);
  125. }

  126. int getTarget(LPCTSTR argv){
  127.         return _tstoi(argv);
  128. }

  129. int getOperation(LPCTSTR argv){
  130.         if(0==_tcsicmp(argv, TEXT("/i")))return 1;
  131.         if(0==_tcsicmp(argv, TEXT("/u")))return -1;
  132.         return 0;
  133. }

  134. BOOL getExe(LPCTSTR argv, TCHAR *exePath, TCHAR *arguments){
  135.         TCHAR *pArguments, buffer[MAX_PATH];
  136.         _tcscpy(buffer, argv);
  137.         pArguments=PathGetArgs(buffer);
  138.         _tcscpy(arguments, pArguments);
  139.         _tcscpy(exePath, argv);
  140.         PathRemoveArgs(exePath);
  141.         if(PathIsRelative(exePath)){
  142.                 getCurrentPath(buffer);
  143.                 _tcscat(buffer, exePath);
  144.         }
  145.         else _tcscpy(buffer, exePath);
  146.         PathCanonicalize(exePath, buffer);
  147.         if(!PathFileExists(exePath) || PathIsDirectory(exePath) || !PathMatchSpec(exePath, TEXT("*.exe"))){
  148.                 myError=-2;
  149.                 return FALSE;
  150.         }
  151.         return TRUE;
  152. }

  153. BOOL getLink(LPCTSTR argv, TCHAR *link){
  154.     if(!isFilenameValid(argv)){myError=-3; return FALSE;}
  155.         int retVal=GetTempPath(MAX_PATH, link);
  156.         if(retVal>MAX_PATH || 0==retVal){myError=-4; return FALSE;}
  157.         _tcscat(link, argv);
  158.         PathRenameExtension(link, TEXT(".lnk"));
  159.         return TRUE;
  160. }

  161. BOOL getUnloadLink(int target, LPCTSTR argv, TCHAR *linkPath){
  162.         if(!isFilenameValid(argv)){myError=-3; return FALSE;}
  163.         SHGetSpecialFolderPath(NULL, linkPath, CSIDL_APPDATA, FALSE);
  164.         _tcscat(linkPath, TEXT("\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\"));
  165.         _tcscat(_tcscat(_tcscat(linkPath, 1==target?TEXT("StartMenu\"):TEXT("TaskBar")), argv), TEXT(".lnk"));
  166.     if(!PathFileExists(linkPath)){myError=-3; return FALSE;}
  167.         return TRUE;
  168. }

  169. void processError(){
  170.         LPCTSTR badUsage=TEXT("用法:\nPINT [/i|/u] <1/2> exePath [friendlyName]"),
  171.                 badLink=TEXT("无效的快捷方式名称!"), badExe=TEXT("指定的文件不是可执行程序!"), badTemp=TEXT("临时文件夹错误!");

  172.         switch(myError){
  173.         case -1:_tprintf(badUsage);break;
  174.         case -2:_tprintf(badExe);break;
  175.         case -3:_tprintf(badLink);break;
  176.         case -4:_tprintf(badTemp);break;
  177.         }
  178.         exit(myError);
  179. }
复制代码

评分

参与人数 1无忧币 +5 收起 理由
d9o + 5 很给力!

查看全部评分

 楼主| 发表于 2018-11-25 21:04:28 | 显示全部楼层
花了我一个星期时间搞出来了。结果在台机上运行很好,PE上不能运行。一琢磨,台机是Win7x64,PE是8x64,基础库都不一样。。。懒的弄了,源码上来,谁想弄谁弄吧。
回复

使用道具 举报

发表于 2018-11-25 21:09:21 | 显示全部楼层
干毛用的!!!???

点评

5楼  详情 回复 发表于 2018-11-26 06:14
回复

使用道具 举报

 楼主| 发表于 2018-11-25 21:12:43 | 显示全部楼层
这个程序是锁定程序到任务栏和开始菜单的,为避免麻烦,当前源码只支持.exe。Windows API是不是支持其它我没试。
现在这程序做到了能分别向开始菜单和任务栏锁定和解锁,锁定名称自定义。命令行操作。
参数:[/i|-i]  <1|2> exePath  [friendlyName]
功能:添加锁定
参数:</u|-u> <1|2> <friendlyName>
i为锁定,U为解锁,不分大小写。
1为开始菜单,2为任务栏
exepath可带参数,我只试了不太复杂的参数情况,成功的。用Explorer.exe  /e,::{20D0...那个试的。带参数的程序锁定时,一定要在命令两端加引号。友好名称如果包含空格,也要带引号。
有兴趣的自己建个工程编译吧。

点评

原来如此,一楼看的我一头雾水……感谢分享,我最近在用Win7!  详情 回复 发表于 2018-11-27 10:13
回复

使用道具 举报

 楼主| 发表于 2018-11-26 06:12:44 | 显示全部楼层
今天解决了。不是库的问题,是我VS2010默认的生成方式32位的,台机完整系统跑32位也行,PE跑不了。重新生成了64位版的,在很小的PE上测试通过。
回复

使用道具 举报

 楼主| 发表于 2018-11-26 06:14:46 | 显示全部楼层
zhangze 发表于 2018-11-25 21:09
干毛用的!!!???

5楼
回复

使用道具 举报

 楼主| 发表于 2018-11-26 10:34:25 | 显示全部楼层
更新:省略了/i参数和友好名称后,将使用系统默认的文件描述作为锁定名称;有/i参数省略了友好名称,将使用exe文件名作为锁定名称。
源代码:
  1. #include"stdafx.h"
  2. #include<windows.h>
  3. #include<stdio.h>
  4. #include<ShlObj.h>
  5. #include<Shlwapi.h>
  6. #include<regex>
  7. #include<strsafe.h>

  8. #pragma comment(lib, "Shlwapi.lib")
  9. #pragma comment(lib, "Shell32.lib")
  10. #pragma comment(lib, "Version.lib")
  11. #pragma comment(lib, "Ole32.lib")

  12. int getCurrentPath(LPTSTR);
  13. BOOL isFilenameValid(LPCTSTR);
  14. BOOL createLink(LPCTSTR, LPCTSTR, LPCTSTR);
  15. BOOL pin(int, LPCTSTR);
  16. BOOL unpin(int, LPCTSTR);
  17. int getTarget(LPCTSTR);
  18. BOOL getExe(LPCTSTR, LPTSTR, LPTSTR, LPTSTR);
  19. BOOL getLink(LPCTSTR, LPTSTR);
  20. BOOL getUnloadLink(int, LPCTSTR, LPTSTR);
  21. int getOperation(LPCTSTR);
  22. void processError();
  23. BOOL getDescription(LPCTSTR, LPTSTR);

  24. int myError=-1;

  25. int _tmain(int argc, _TCHAR* argv[])
  26. {
  27.         int target;
  28.         BOOL isPin=TRUE;
  29.         TCHAR exePath[MAX_PATH], arguments[MAX_PATH], linkPath[MAX_PATH], description[MAX_PATH];
  30.         switch(argc){
  31.         case 3:
  32.                 target=getTarget(argv[1]);
  33.                 if(1==target || 2==target){
  34.                         if(getExe(argv[2], exePath, arguments, description))
  35.                                 if(getDescription(exePath, description)){
  36.                                         if(getLink(description, linkPath))myError=0;
  37.                                 }
  38.                                 else{
  39.                                         if(getLink(PathFindFileName(exePath), linkPath))myError=0;
  40.                                 }
  41.                 }
  42.                 break;
  43.         case 4:
  44.                 target=getTarget(argv[1]);
  45.                 if(1==target || 2==target){
  46.                         if(getExe(argv[2], exePath, arguments, description))
  47.                                 if(getLink(argv[3], linkPath))myError=0;
  48.                 }
  49.                 else{
  50.                         target=getTarget(argv[2]);
  51.                         if(1==target || 2==target){
  52.                                 int operation=getOperation(argv[1]);
  53.                                 if(0==operation)break;
  54.                                 if(-1==operation){
  55.                                         isPin=FALSE;
  56.                                         if(getUnloadLink(target, argv[3], linkPath))myError=0;
  57.                                 }
  58.                                 else{
  59.                                         if(getExe(argv[3], exePath, arguments, description))
  60.                                                 if(getLink(PathFindFileName(exePath), linkPath))myError=0;
  61.                                 }
  62.                         }
  63.                 }
  64.                 break;
  65.         case 5:
  66.                 target=getTarget(argv[2]);
  67.                 if(1!=target && 2!=target)break;
  68.                 if(1!=getOperation(argv[1]))break;
  69.                 if(!getExe(argv[3], exePath, arguments, description))break;
  70.                 if(getLink(argv[4], linkPath))myError=0;
  71.         }
  72.         if(!myError)
  73.                 if(isPin){
  74.                         createLink(exePath, arguments, linkPath);
  75.                         pin(target, linkPath);
  76.                         if(!DeleteFile(linkPath))myError=-4;
  77.                 }
  78.                 else unpin(target, linkPath);
  79.         processError();
  80. }

  81. int getCurrentPath(LPTSTR buffer)
  82. {
  83.         GetModuleFileName(NULL, buffer, MAX_PATH);
  84.         LPTSTR temp=buffer;
  85.         while('\0'!=*temp++);
  86.         while('\\'!=*--temp);
  87.         *++temp='\0';
  88.         return temp-buffer;
  89. }

  90. BOOL isFilenameValid(LPCTSTR filename){
  91.         int cbMultiByte = WideCharToMultiByte(CP_ACP, 0, filename, -1, NULL, 0, NULL, NULL);
  92.         char *pszText=new char[cbMultiByte];
  93.         WideCharToMultiByte(CP_ACP, 0, filename, -1, pszText, cbMultiByte, NULL, NULL);
  94.         int retVal=std::regex_match(pszText, std::regex("^[^ \\\\/|<>:"?*]+[^\\\\/|<>:"?*]*$"));
  95.         delete pszText;
  96.         return retVal;
  97. }

  98. BOOL createLink(LPCTSTR exePath, LPCTSTR arguments, LPCTSTR linkPath)
  99. {
  100.         CoInitialize(NULL);
  101.     HRESULT hr;
  102.     IShellLink     *pLink;
  103.     IPersistFile   *ppf;
  104.     hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pLink);
  105.     if (FAILED(hr))return FALSE;
  106.     hr = pLink->QueryInterface(IID_IPersistFile, (void**)&ppf);
  107.     if (FAILED(hr))
  108.     {
  109.         pLink->Release();
  110.         return FALSE;
  111.     }
  112.     pLink->SetPath(exePath);
  113.         pLink->SetArguments(arguments);
  114.         TCHAR buffer[256];
  115.         _tcscpy(buffer, exePath);
  116.         PathRemoveFileSpec(buffer);
  117.         pLink->SetWorkingDirectory(buffer);
  118.     pLink->SetShowCmd(SW_SHOWNORMAL);
  119.     hr = ppf->Save(linkPath, TRUE);
  120.     ppf->Release();
  121.     pLink->Release();
  122.         SHChangeNotify(SHCNE_UPDATEDIR|SHCNE_INTERRUPT, SHCNF_FLUSH | SHCNF_PATH, buffer, 0);
  123.         CoUninitialize();
  124.         return SUCCEEDED(hr);
  125. }

  126. BOOL pin(int target, LPCTSTR link){
  127.         LPCTSTR strTarget=1==target?TEXT("startpin"):TEXT("taskbarpin");
  128.         return (int)ShellExecute(NULL, strTarget, link, NULL, NULL, 0);
  129. }

  130. BOOL unpin(int target, LPCTSTR exe){
  131.         LPCTSTR strTarget=1==target?TEXT("startunpin"):TEXT("taskbarunpin");
  132.         return (int)ShellExecute(NULL, strTarget, exe, NULL, NULL, 0);
  133. }

  134. int getTarget(LPCTSTR argv){
  135.         return _tstoi(argv);
  136. }

  137. int getOperation(LPCTSTR argv){
  138.         if(0==_tcsicmp(argv, TEXT("/i")))return 1;
  139.         if(0==_tcsicmp(argv, TEXT("/u")))return -1;
  140.         return 0;
  141. }

  142. BOOL getExe(LPCTSTR argv, LPTSTR exePath, LPTSTR arguments, LPTSTR description){
  143.         LPTSTR pArguments;
  144.         TCHAR buffer[MAX_PATH];
  145.         _tcscpy(buffer, argv);
  146.         pArguments=PathGetArgs(buffer);
  147.         _tcscpy(arguments, pArguments);
  148.         _tcscpy(exePath, argv);
  149.         PathRemoveArgs(exePath);
  150.         if(PathIsRelative(exePath)){
  151.                 getCurrentPath(buffer);
  152.                 _tcscat(buffer, exePath);
  153.         }
  154.         else _tcscpy(buffer, exePath);
  155.         PathCanonicalize(exePath, buffer);
  156.         if(!PathFileExists(exePath) || PathIsDirectory(exePath) || !PathMatchSpec(exePath, TEXT("*.exe"))){
  157.                 myError=-2;
  158.                 return FALSE;
  159.         }
  160.         getDescription(exePath, description);
  161.         return TRUE;
  162. }

  163. BOOL getLink(LPCTSTR argv, LPTSTR linkPath){
  164.     if(!isFilenameValid(argv)){myError=-3; return FALSE;}
  165.         int retVal=GetTempPath(MAX_PATH, linkPath);
  166.         if(retVal>MAX_PATH || 0==retVal){myError=-4; return FALSE;}
  167.         _tcscat(linkPath, argv);
  168.         PathRenameExtension(linkPath, TEXT(".lnk"));
  169.         return TRUE;
  170. }

  171. BOOL getUnloadLink(int target, LPCTSTR argv, LPTSTR linkPath){
  172.         if(!isFilenameValid(argv)){myError=-3; return FALSE;}
  173.         SHGetSpecialFolderPath(NULL, linkPath, CSIDL_APPDATA, FALSE);
  174.         _tcscat(linkPath, TEXT("\\Microsoft\\Internet Explorer\\Quick Launch\\User Pinned\"));
  175.         _tcscat(_tcscat(_tcscat(linkPath, 1==target?TEXT("StartMenu\"):TEXT("TaskBar")), argv), TEXT(".lnk"));
  176.     if(!PathFileExists(linkPath)){myError=-3; return FALSE;}
  177.         return TRUE;
  178. }

  179. void processError(){
  180.         LPCTSTR badUsage=TEXT("用法:\nPINT [/i|/u] <1/2> exePath [friendlyName]"),
  181.                 badLink=TEXT("无效的快捷方式名称!"), badExe=TEXT("指定的文件不是可执行程序!"), badTemp=TEXT("临时文件夹错误!");

  182.         switch(myError){
  183.         case -1:_tprintf(badUsage);break;
  184.         case -2:_tprintf(badExe);break;
  185.         case -3:_tprintf(badLink);break;
  186.         case -4:_tprintf(badTemp);break;
  187.         }
  188.         exit(myError);
  189. }

  190. BOOL getDescription(LPCTSTR exePath, LPTSTR description){
  191.         DWORD arg=0;
  192.         LPTSTR result;
  193.         int size=GetFileVersionInfoSize(exePath, &arg);
  194.         arg=FALSE;
  195.         if(size){
  196.                 byte *buffer=new byte[size];
  197.                 GetFileVersionInfo(exePath, 0, size, buffer);
  198.                 HRESULT hr;
  199.                 struct LANGANDCODEPAGE {
  200.                         WORD wLanguage;
  201.                         WORD wCodePage;
  202.                 } *lpTranslate;
  203.                 UINT cbTranslate, dwBytes;
  204.                 VerQueryValue(buffer, TEXT("\\VarFileInfo\\Translation"), (LPVOID*)&lpTranslate, &cbTranslate);
  205.                 TCHAR item[50];
  206.                 arg=FALSE;
  207.                 for(int i = (cbTranslate/sizeof(struct LANGANDCODEPAGE))-1; i>=0 ; i-- ){
  208.                         hr = StringCchPrintf(item, 50, TEXT("\\StringFileInfo\\%04x%04x\\FileDescription"),
  209.                                         lpTranslate[i].wLanguage,
  210.                                         lpTranslate[i].wCodePage);
  211.                         if (FAILED(hr)){delete buffer; return FALSE;}
  212.                         VerQueryValue(buffer, item, (LPVOID *)&result, &dwBytes);
  213.                         _tcscpy(description, result);
  214.                         arg=TRUE;
  215.                 }
  216.                 delete buffer;
  217.         }
  218.         return arg;
  219. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2018-11-26 10:40:56 | 显示全部楼层
提取码:lha1只有100K+,有兴趣的帮我测试一下其它系统是否能用。我测试的PE8x64可能用。用法说明见5楼和7楼
回复

使用道具 举报

 楼主| 发表于 2018-11-26 11:06:31 | 显示全部楼层
链接:提取码:mmau

点评

提取码:whhy  详情 回复 发表于 2018-11-26 18:00
啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟。  详情 回复 发表于 2018-11-26 14:29
回复

使用道具 举报

 楼主| 发表于 2018-11-26 13:30:18 | 显示全部楼层
回头准备再加入清除所有锁定的功能
回复

使用道具 举报

发表于 2018-11-26 14:29:41 | 显示全部楼层
hanzsim 发表于 2018-11-26 11:06
链接:提取码:mmau

啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟。

点评

提取码:yhhy  详情 回复 发表于 2018-11-27 04:34
回复

使用道具 举报

 楼主| 发表于 2018-11-26 18:00:21 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2018-11-27 04:34:59 | 显示全部楼层
whyme22 发表于 2018-11-26 14:29
啊哦,你来晚了,分享的文件已经被取消了,下次要早点哟。

提取码:yhhy
回复

使用道具 举报

发表于 2018-11-27 10:13:32 | 显示全部楼层
hanzsim 发表于 2018-11-25 21:12
这个程序是锁定程序到任务栏和开始菜单的,为避免麻烦,当前源码只支持.exe。Windows API是不是支持其它我 ...

原来如此,一楼看的我一头雾水……感谢分享,我最近在用Win7!
回复

使用道具 举报

 楼主| 发表于 2018-11-28 14:03:52 | 显示全部楼层
调整:
命令参数次序调整为
PINT  目标  [锁定或解锁] [程序和/或友好名称/快捷方式]
更新:
1.支持startmenu和taskbar作为目标,1/2保持不变。
2.支持如下的全部解除锁定命令:
PINT 1 /u
3.支持desktop.ini本地化后的锁定名称的解锁。解锁名称参数带有.lnk扩展名时,强制认定以快捷方式文件名方式解锁;解锁名称没有.lnk扩展名时,本地化名称与参数一致、快捷方式名称与参数一致的,都将被解锁。
提取码: 7jnq
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 22:02

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表