Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Смена иконки ярлыка командой в .bat

Ответить
Настройки темы
CMD/BAT - [решено] Смена иконки ярлыка командой в .bat

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: Алексей_Мокшанов@vk
Дата: 09-11-2012
Вопрос с предысторией (для пущего осознания ситуации)
изначально хотелось переключать "Устройство воспроизведения" в один клик, тут нашлось решение в виде утилиты DefSound
тк в DefSound реализована командная строка, народ смекнул и заваял
start.bat
Код: Выделить весь код
IF exist log.txt goto loop1
echo 0>log.txt
DefSound-x32.exe 0
goto exit
:loop1
del log.txt
DefSound-x32.exe 1
:exit
taskkill /im DefSound-x32.exe
START.JS
Код: Выделить весь код
var activex = new ActiveXObject("WScript.Shell");
activex.Run("start.bat", 0, true);
оба файлика требуется положить в папку к DefSound и запускать всю эту конструкцию с ярлыка созданного для START.JS
теперь у меня имеется проблема в индикации активного "Устройство воспроизведения", и мне думается что иконка ярлыка (созданного для START.JS) самый изящный способ
потому прошу откликнуться людей кто в состоянии дополнить (переделать) данную конструкцию для того что бы она не только переключала "Устройство воспроизведения" но и меняла иконку ярлыка
в системе имеется два устройства вывода звука, насколько я понимаю их в коде нумеруют как 0 и 1, чтоб далеко не отходить от устоявшегося обозначения будем считать что в папку со всеми файлами положены две иконки 0.ico и 1.ico, а на рабочем столе имеется ярлык START.lnk

не в тему: что выполняет (делает) данный код
читать дальше »
Код: Выделить весь код
@ECHO OFF
SETLOCAL EnableDelayedExpansion

FOR /F "tokens=*" %%I IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render"') DO (
	SET AudCount = 0
	FOR /F "tokens=3" %%J IN ('REG QUERY "%%I"^|FINDSTR /I /C:"devicestate"') DO (
		IF /I "%%J" EQU "0x1" (
			SET /a AudCount+=1
			ECHO %%I>>"%TMP%\renderlist.txt"
		)
	)
)

IF /I %AudCount% NEQ 0 (
	SET DevID=0
	SET DevName=
	FOR /F "tokens=*" %%I IN (%TMP%\renderlist.txt) DO (
		
		FOR /F "tokens=2*" %%J IN ('REG QUERY "%%I\Properties" /v "{b3f8fa53-0004-438e-9003-51a46e139bfc},6"') DO (
			SET DevName=%%K
		)
		
		FOR /F "tokens=2*" %%J IN ('REG QUERY "%%I\Properties" /v "{a45c254e-df1c-4efd-8020-67d146a850e0},2"') DO (
			SET DevName=!DevName! - %%K
		)
		
		IF /I "!DevName!" EQU "%~1" (
			CD /D "%~dp0"
			IF /I "%PROCESSOR_ARCHITECTURE%" EQU "x86" DefSound-x32.exe !DevID! %~2
			IF /I "%PROCESSOR_ARCHITECTURE%" EQU "amd64" DefSound-x64.exe !DevID! %~2
			DEL /F "%TMP%\renderlist.txt"
			GOTO :EOF
		)
		SET /a DevID+=1
	)
	DEL /F "%TMP%\renderlist.txt"
)
обнаружил это в DefSound.cmd, прилагался в архиве DefSound.zip тут, но про него не было ни слова, хочется знать его ценность и необходимость а также функционал

Отправлено: 13:53, 07-11-2012

 

Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


А может сделать два ярлыка с разными иконками и копировать их bat-ом попеременно с автоматическим удаление перед копированием новогоИЛИ

Отправлено: 22:06, 07-11-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Алексей_Мокшанов@vk:
ссылки на инструкции и мануалы не предлагать, требуется готовое решение имеющейся проблемы »
Желанию получить готовое решение должны предшествовать хотя бы минимальные усилия:

1. Разместить потребную информацию здесь же, а не посылать возжелавших помочь бегать по ссылкам.
2. Сообщить имя неназванного ярлыка на Рабочем столе.
3. Выложить здесь же Ваши «допустим 0.ico и 1.ico». Или это тоже — к «требуется готовое решение», Вам должен кто-то сделать?

Отправлено: 06:03, 08-11-2012 | #3


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


Iska, Капитан Тиг - «Хранитель Пиратского Кодекса Чести»

Отправлено: 06:12, 08-11-2012 | #4


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата zion87:
А может сделать два ярлыка с разными иконками и копировать их bat-ом попеременно с автоматическим удаление перед копированием нового »
идея не так уж и плоха если бы не одно но, ярлыки фигурно разложены по рабочему столу, а если каждый раз создавать новый он будет липнуть к левому краю в "конец очереди" что не есть гуд и вовсе не по феншую (если например не удалять предварительно а с заменой то место сохраниться насколько мне известно), ИЛИ возможно где то близко но тоже врятли решает поставленную задачу (даже если там и имеется необходимая составляющая то мне не подсилу её вычленить и применить), потому и требуется именно смена иконки ярлыка
спасибо за попытку

Цитата Iska:
Желанию получить готовое решение должны предшествовать хотя бы минимальные усилия:
1. Разместить потребную информацию здесь же, а не посылать возжелавших помочь бегать по ссылкам.
2. Сообщить имя неназванного ярлыка на Рабочем столе.
3. Выложить здесь же Ваши «допустим 0.ico и 1.ico». Или это тоже — к «требуется готовое решение», Вам должен кто-то сделать? »
1. Отчасти согласен, но не хотелось разводить дубли да и кликнуть на ссылку не считаю за маломальский труд
2. я думаю если в коде его назвать START.lnk а потом пояснить что мол вместо START.lnk впиши название своего, так будет вполне приемлемо
3. а я думаю человеку составляющему (дополняющему) код по барабану что за картинки кроются под 0.ico и 1.ico, главное их имена прописать в коде правильно, а потом пояснить мол не забудь их в папку с прогой и скриптами положить, так будет вполне приемлемо

Последний раз редактировалось Алексей_Мокшанов@vk, 08-11-2012 в 18:40.


Отправлено: 09:25, 08-11-2012 | #5


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


если не нравится идея с копированием (из-за фигурного расположения) то возможен вариант с
Код: Выделить весь код
attrib 1.lnk +h
attrib 2.lnk -h
изменение в расположение всего одна клетка...

Отправлено: 19:45, 08-11-2012 | #6


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата zion87:
если не нравится идея с копированием (из-за фигурного расположения) то возможен вариант с
Код:
attrib 1.lnk +h
attrib 2.lnk -h
изменение в расположение всего одна клетка... »
не могли бы вы пояснить мне как и куда применить эти две строчки и что в этоге получиться

Отправлено: 21:00, 08-11-2012 | #7


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


вот скрипт меняющий иконку на рабочем столе - не перемещая...
Код: Выделить весь код
var vbOKCancel = 1;
var vbInformation = 64;
var vbCancel = 2;
var WSHShell = WScript.CreateObject("WScript.Shell");
Welcome();
var DesktopPath = WSHShell.SpecialFolders("Desktop");
var MyShortcut = WSHShell.CreateShortcut(DesktopPath + "\\Блокнот.lnk");
MyShortcut.TargetPath = WSHShell.ExpandEnvironmentStrings("%windir%\\notepad.exe");
MyShortcut.WorkingDirectory = WSHShell.ExpandEnvironmentStrings("%windir%");
MyShortcut.WindowStyle = 4;
MyShortcut.IconLocation = WSHShell.ExpandEnvironmentStrings("c:\\icq.ico");
MyShortcut.Save();
function Welcome() {
    var intDoIt;
}
создаешь два файла ico1.js и ico2.js
и
Код: Выделить весь код
IF exist log.txt goto loop1
echo 0>log.txt
DefSound-x32.exe 0
ico1.js
goto exit
:loop1
del log.txt
DefSound-x32.exe 1
ico2.js
:exit
taskkill /im DefSound-x32.exe
пример скрипта для ярлыка notepad.exe меняем на свою программу и все работает ... )))

если не понятно
var MyShortcut = Название ярлыка .lnk
MyShortcut.TargetPath = Расположение .exe
MyShortcut.WorkingDirectory = Рабочая директория .exe
MyShortcut.IconLocation = Расположение файла .ico

ОБЯЗАТЕЛЬНОЕ ИСПОЛЬЗОВАНИЕ ДВОЙНОГО СЛЕША \\ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Последний раз редактировалось zion87, 08-11-2012 в 22:15.


Отправлено: 22:04, 08-11-2012 | #8


Аватара для zion87

Старожил


Сообщения: 263
Благодарности: 69

Профиль | Отправить PM | Цитировать


Прошу прощения за мои разные мысли но простое замещение одного и того же файла происходит без перемещения по рабочему столу ))))
приведу пример
[code]
IF exist log.txt goto loop1
echo 0>log.txt
DefSound-x32.exe 0
copy /y c:\1.ico "рабочий стол\0.ico"
goto exit
:loop1
del log.txt
DefSound-x32.exe 1
copy /y c:\2.ico "рабочий стол\0.ico"
:exit
taskkill /im DefSound-x32.exe
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:24, 08-11-2012 | #9


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата zion87:
вот скрипт »
он прям меняет иконку или пересоздаёт ярлык с новой иконкой?
Цитата zion87:
простое замещение одного и того же файла »
это мы просто подменяем иконку на которую настроен ярлык? чего то так не работает, иконка заменяется а вот ярлык отображает то что изначально было
Или имеешь в виду что просто копируем с заменой заранее созданные и настроенные на разные иконки ярлыки?

в общем оба метода опробовал, оба работают, и оба занимаются затиранием старого ярлыка тем или иным способом, хотелось бы конечно изменять именно свойства ярлыка
спасибо за помощь

Последний раз редактировалось Алексей_Мокшанов@vk, 09-11-2012 в 01:39.


Отправлено: 00:06, 09-11-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Смена иконки ярлыка командой в .bat

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [решено] проблема с командой arp -s Dosmod Microsoft Windows 7 1 07-10-2011 20:19
как воспользоваться данной командой? xrenomx AutoIt 8 17-10-2010 22:38
[решено] Создание ярлыка и смена иконки? Centrinar AutoIt 1 10-04-2010 23:39
Разное - [решено] Смена иконки у ярлыка на DOS приложение Delirium Microsoft Windows 7 9 18-01-2010 07:50
Проблемы с командой su m0rfeusl Общий по Linux 6 28-01-2004 15:17




 
Переход