Показать полную графическую версию : [решено] Закрепление ярлыков в меню "Пуск" в ХР
TERMINAL
04-05-2012, 10:10
Добрый день !
Есть статья Закрепление ярлыков в меню "Пуск" (http://www.oszone.net/6166) и статья Hey, Scripting Guy! Can I Pin a File to the Start Menu by Using a Script? (http://blogs.technet.com/b/heyscriptingguy/archive/2004/11/11/can-i-pin-a-file-to-the-start-menu-by-using-a-script.aspx).
Возможно ли, более подходящую вторую статью, сделать так в AutoIt ?
TERMINAL, в аккурат по этой самой статье Hey, Scripting Guy! Can I Pin a File to the Start Menu by Using a Script? (http://blogs.technet.com/b/heyscriptingguy/archive/2004/11/11/can-i-pin-a-file-to-the-start-menu-by-using-a-script.aspx) делаете на AutoIt (я, правда, предпочитаю прикреплять не сами исполняемые файлы, а ярлыки из Главного меню).
Какие проблемы с переводом с WSH на AutoIt?
TERMINAL
04-05-2012, 15:38
Какие проблемы с переводом с WSH на AutoIt? »
Угадали, и хотелось бы конечно тоже ярлыки создавать...
Угадали »
Что угадал? Я спросил — «какие проблемы?», а Вы отвечаете — «угадал»?!
TERMINAL
05-05-2012, 09:36
Iska, проблема с переводом с WSH на AutoIt.
WSH:
Option Explicit
Dim objShell
Dim objFolder
Dim objFolderItem
Dim objVerb
Set objShell = WScript.CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("shell:Start Menu")
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.ParseName("Программы")
If Not objFolderItem Is Nothing Then
If objFolderItem.IsFolder Then
Set objFolder = objFolderItem.GetFolder
If Not objFolder Is Nothing Then
Set objFolderItem = objFolder.ParseName("Internet Explorer.lnk")
If Not objFolderItem Is Nothing Then
For Each objVerb In objFolderItem.Verbs
' &Закрепить в меню "Пуск"
' &Изъять из меню "Пуск"
If objVerb.Name = "&Закрепить в меню ""Пуск""" Then
objVerb.DoIt()
End If
Next
Else
WScript.Echo "Can't parse name [Internet Explorer.lnk]"
End If
Else
WScript.Echo "Can't get folder from item [Программы]"
End If
Else
WScript.Echo "Folder item [Программы] is not a folder"
End If
Else
WScript.Echo "Can't parse name [Программы]"
End If
Else
WScript.Echo "Can't get folder [Start Menu]"
End If
WScript.Quit 0
AutoIt:
AutoItSetOption("MustDeclareVars", 1)
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.Namespace("shell:Start Menu")
Local $oFolderItem
Local $oVerb
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Программы")
If Not ObjName($oFolderItem) = "" Then
If $oFolderItem.IsFolder Then
$oFolder = $oFolderItem.GetFolder
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Internet Explorer.lnk")
If Not ObjName($oFolderItem) = "" Then
For $oVerb In $oFolderItem.Verbs
; &Закрепить в меню "Пуск"
; &Изъять из меню "Пуск"
If $oVerb.Name = "&Закрепить в меню ""Пуск""" Then
$oVerb.DoIt()
EndIf
Next
Else
ConsoleWriteError("Can't parse name [Internet Explorer.lnk]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder from item [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Folder item [Программы] is not a folder" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't parse name [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder [Start Menu]" & @CRLF)
EndIf
Exit(0)
Полагаю, что на основе этого будет понятнее.
TERMINAL
05-05-2012, 17:10
Iska, А обновить сразу можно меню ПУСК, чтобы увидеть изменения?
TERMINAL, я под Windows XP вижу изменения сразу — мы ведь работаем с самим Проводником.
TERMINAL
05-05-2012, 18:58
Iska, Ничего не происходит и ошибки не выдаёт-вроде всё правильно, я так понял поиск идёт по самому ПУСК=Все программы?
AutoItSetOption("MustDeclareVars", 1)
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.Namespace("shell:Start Menu")
Local $oFolderItem
Local $oVerb
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Программы")
If Not ObjName($oFolderItem) = "" Then
If $oFolderItem.IsFolder Then
$oFolder = $oFolderItem.GetFolder
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Skype 5.lnk")
If Not ObjName($oFolderItem) = "" Then
For $oVerb In $oFolderItem.Verbs
; &Закрепить в меню "Пуск"
; &Изъять из меню "Пуск"
If $oVerb.Name = '&Закрепить в меню ""Пуск""' Then
$oVerb.DoIt()
EndIf
Next
Else
ConsoleWriteError("Can't parse name [D:\Program Files\Skype\Phone\Skype.exe]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder from item [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Folder item [Программы] is not a folder" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't parse name [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder [Start Menu]" & @CRLF)
EndIf
Exit(0)
TERMINAL, скомпилируйте скрипт для консоли (как CUI) и запустите скомпилированный код непосредственно из командной строки. Если будут ошибки — Вы их увидите. Либо просто сделайте перенаправление потока ошибок в файл:
"<скомпилированный код>.exe" 2>errors.txt
и посмотрите на его содержимое.
я так понял поиск идёт по самому ПУСК=Все программы? »
Нет. Мы спускаемся по дереву Проводника: «C:\Documents and Settings\UserName\Главное меню» [это "shell:Start Menu"] → «Программы» → «Internet Explorer.lnk». Сия структура справедлива для Windows XP.
TERMINAL
05-05-2012, 20:13
TERMINAL, скомпилируйте скрипт для консоли (как CUI) и запустите скомпилированный код непосредственно из командной строки. Если будут ошибки — Вы их увидите. »
Да за это я вкурсе, мне в консоле пишет
>"D:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\tets.au3" /autoit3dir "D:\Program Files\AutoIt3" /UserParams
+>19:10:52 Starting AutoIt3Wrapper v.2.0.1.24 Environment(Language:0419 Keyboard:00000409 OS:WIN_XP/Service Pack 3 CPU:X64 OS:X86)
>Running AU3Check (1.54.19.0) from:D:\Program Files\AutoIt3
+>19:10:52 AU3Check ended.rc:0
>Running:(3.3.6.1):D:\Program Files\AutoIt3\autoit3.exe "C:\tets.au3"
+>19:10:55 AutoIT3.exe ended.rc:0
и ничего не добовляется. В C:\Documents and Settings\UserName\Главное меню должен тоже ярлык лежать на этот файл или ехе должен быть?
Получается, что не в курсе.
Ладно. Замените все «ConsoleWriteError()» на «MsgBox()».
TERMINAL
07-05-2012, 09:20
Получается, что не в курсе.
Ладно. Замените все «ConsoleWriteError()» на «MsgBox()». »
Да разницы то никакой, то в консоли выводит, а то сообщением....Для эксперемента заменил на MsgBox()-всеравно тишина, без ошибок и ничего не появляется...
TERMINAL, сожалею, у меня нет идей. Ждите более опытных коллег.
TERMINAL, поищите файл Skype.lnk в папке с профилями пользователей, скорее всего найдёте его в профиле "All Users", то бишь правильный вариант в данном случае будет несколько иной. Проверено на [addon] Skype 5.10.32.114 Business Edition (http://forum.oszone.net/thread-205267.html)
TERMINAL
16-07-2012, 19:00
_syd_, вроде бы работает, а вот можно закрепить с другим именем как я хочу, например на русском языке-Скайп ?
SharkyEXE
07-09-2015, 05:26
Всем здравствуйте.
Моя ОС: MS Windows 7 SP1 Pro x64 Rus
1) Здесь (http://forum.oszone.net/post-1910952-6.html) есть код AutoitAutoItSetOption("MustDeclareVars", 1)
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.Namespace("shell:Start Menu")
Local $oFolderItem
Local $oVerb
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Программы")
If Not ObjName($oFolderItem) = "" Then
If $oFolderItem.IsFolder Then
$oFolder = $oFolderItem.GetFolder
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Internet Explorer.lnk")
If Not ObjName($oFolderItem) = "" Then
For $oVerb In $oFolderItem.Verbs
; &Закрепить в меню "Пуск"
; &Изъять из меню "Пуск"
If $oVerb.Name = "&Закрепить в меню ""Пуск""" Then
$oVerb.DoIt()
EndIf
Next
Else
ConsoleWriteError("Can't parse name [Internet Explorer.lnk]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder from item [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Folder item [Программы] is not a folder" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't parse name [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder [Start Menu]" & @CRLF)
EndIf
Exit(0)
2) Создал пустой файл C:\1.au3
3) В файл C:\1.au3 вставил целиком/полностью код AutoItAutoItSetOption("MustDeclareVars", 1)
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.Namespace("shell:Start Menu")
Local $oFolderItem
Local $oVerb
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Программы")
If Not ObjName($oFolderItem) = "" Then
If $oFolderItem.IsFolder Then
$oFolder = $oFolderItem.GetFolder
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Internet Explorer.lnk")
If Not ObjName($oFolderItem) = "" Then
For $oVerb In $oFolderItem.Verbs
; &Закрепить в меню "Пуск"
; &Изъять из меню "Пуск"
If $oVerb.Name = "&Закрепить в меню ""Пуск""" Then
$oVerb.DoIt()
EndIf
Next
Else
ConsoleWriteError("Can't parse name [Internet Explorer.lnk]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder from item [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Folder item [Программы] is not a folder" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't parse name [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder [Start Menu]" & @CRLF)
EndIf
Exit(0)
4) В файле C:\1.au3 заменил только Internet Explorer.lnk на Блокнот.lnk
5) Получилось такAutoItSetOption("MustDeclareVars", 1)
Local $oShell = ObjCreate("Shell.Application")
Local $oFolder = $oShell.Namespace("shell:Start Menu")
Local $oFolderItem
Local $oVerb
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Программы")
If Not ObjName($oFolderItem) = "" Then
If $oFolderItem.IsFolder Then
$oFolder = $oFolderItem.GetFolder
If Not ObjName($oFolder) = "" Then
$oFolderItem = $oFolder.ParseName("Блокнот.lnk")
If Not ObjName($oFolderItem) = "" Then
For $oVerb In $oFolderItem.Verbs
; &Закрепить в меню "Пуск"
; &Изъять из меню "Пуск"
If $oVerb.Name = "&Закрепить в меню ""Пуск""" Then
$oVerb.DoIt()
EndIf
Next
Else
ConsoleWriteError("Can't parse name [Блокнот.lnk]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder from item [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Folder item [Программы] is not a folder" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't parse name [Программы]" & @CRLF)
EndIf
Else
ConsoleWriteError("Can't get folder [Start Menu]" & @CRLF)
EndIf
Exit(0)
6) Скомпилировал файл C:\1.au3 в exe, получился файл C:\1.exe
7) Запускаю файл C:\1.exe
8. Перезагрузил ПК
9) Нажимаю кнопку "Пуск", строки Блокнот нету
10) Файл-ярлык Блокнот.lnk, который надо закрепить в меню "Пуск", у меня находится в папке: C:\Users\-\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories
Что я сделал не так, пожалуйста, помогите мне.
SharkyEXE
07-09-2015, 18:53
Пожалуйста, сделайте в этом (http://forum.oszone.net/post-1910952-6.html) коде - чтобы прописать путь к файлу-ярлыку:
1) прописал путь C:\Users\-\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Блокнот.lnk
2) скомпилировал в exe файл скрипт au3
3) запустил exe файл
4) в меню "Пуск" закреплен файл-ярлык Блокнот
SharkyEXE, FileCreateShortcut(@WindowsDir & "\NOTEPAD.EXE", @ProgramsCommonDir & "\Блокнотик.lnk", @WindowsDir, "", "Это блокнот", "", "", @SW_MINIMIZE)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.