Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Закрепление ярлыков в меню "Пуск" в ХР (http://forum.oszone.net/showthread.php?t=234011)

TERMINAL 04-05-2012 10:10 1910306

Закрепление ярлыков в меню "Пуск" в ХР
 
Добрый день !
Есть статья Закрепление ярлыков в меню "Пуск" и статья Hey, Scripting Guy! Can I Pin a File to the Start Menu by Using a Script?.
Возможно ли, более подходящую вторую статью, сделать так в AutoIt ?

Iska 04-05-2012 10:38 1910324

TERMINAL, в аккурат по этой самой статье Hey, Scripting Guy! Can I Pin a File to the Start Menu by Using a Script? делаете на AutoIt (я, правда, предпочитаю прикреплять не сами исполняемые файлы, а ярлыки из Главного меню).

Какие проблемы с переводом с WSH на AutoIt?

TERMINAL 04-05-2012 15:38 1910501

Цитата:

Цитата Iska
Какие проблемы с переводом с WSH на AutoIt? »

Угадали, и хотелось бы конечно тоже ярлыки создавать...

Iska 04-05-2012 16:05 1910515

Цитата:

Цитата TERMINAL
Угадали »

Что угадал? Я спросил — «какие проблемы?», а Вы отвечаете — «угадал»?!

TERMINAL 05-05-2012 09:36 1910871

Iska, проблема с переводом с WSH на AutoIt.

Iska 05-05-2012 13:19 1910952

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 1911070

Iska, А обновить сразу можно меню ПУСК, чтобы увидеть изменения?

Iska 05-05-2012 18:44 1911111

TERMINAL, я под Windows XP вижу изменения сразу — мы ведь работаем с самим Проводником.

TERMINAL 05-05-2012 18:58 1911124

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)

Iska 05-05-2012 20:09 1911158

TERMINAL, скомпилируйте скрипт для консоли (как CUI) и запустите скомпилированный код непосредственно из командной строки. Если будут ошибки — Вы их увидите. Либо просто сделайте перенаправление потока ошибок в файл:
Код:

"<скомпилированный код>.exe" 2>errors.txt
и посмотрите на его содержимое.

Цитата:

Цитата TERMINAL
я так понял поиск идёт по самому ПУСК=Все программы? »

Нет. Мы спускаемся по дереву Проводника: «C:\Documents and Settings\UserName\Главное меню» [это "shell:Start Menu"] → «Программы» → «Internet Explorer.lnk». Сия структура справедлива для Windows XP.

TERMINAL 05-05-2012 20:13 1911159

Цитата:

Цитата Iska
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\Главное меню должен тоже ярлык лежать на этот файл или ехе должен быть?

Iska 05-05-2012 22:12 1911220

Получается, что не в курсе.

Ладно. Замените все «ConsoleWriteError()» на «MsgBox()».

TERMINAL 07-05-2012 09:20 1911774

Цитата:

Цитата Iska
Получается, что не в курсе.
Ладно. Замените все «ConsoleWriteError()» на «MsgBox()». »

Да разницы то никакой, то в консоли выводит, а то сообщением....Для эксперемента заменил на MsgBox()-всеравно тишина, без ошибок и ничего не появляется...

Iska 07-05-2012 10:28 1911796

TERMINAL, сожалею, у меня нет идей. Ждите более опытных коллег.

_syd_ 15-07-2012 00:40 1951962

TERMINAL, поищите файл Skype.lnk в папке с профилями пользователей, скорее всего найдёте его в профиле "All Users", то бишь правильный вариант в данном случае будет несколько иной. Проверено на [addon] Skype 5.10.32.114 Business Edition

TERMINAL 16-07-2012 19:00 1952977

_syd_, вроде бы работает, а вот можно закрепить с другим именем как я хочу, например на русском языке-Скайп ?

SharkyEXE 07-09-2015 05:26 2550374

Всем здравствуйте.

Моя ОС: MS Windows 7 SP1 Pro x64 Rus

1) Здесь есть код 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)


2) Создал пустой файл C:\1.au3

3) В файл C:\1.au3 вставил целиком/полностью код 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)


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 2550618

Пожалуйста, сделайте в этом коде - чтобы прописать путь к файлу-ярлыку:
1) прописал путь C:\Users\-\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Блокнот.lnk
2) скомпилировал в exe файл скрипт au3
3) запустил exe файл
4) в меню "Пуск" закреплен файл-ярлык Блокнот

-TRM- 14-10-2015 11:44 2563770

SharkyEXE, FileCreateShortcut(@WindowsDir & "\NOTEPAD.EXE", @ProgramsCommonDir & "\Блокнотик.lnk", @WindowsDir, "", "Это блокнот", "", "", @SW_MINIMIZE)


Время: 15:14.

Время: 15:14.
© OSzone.net 2001-