[原创][新]将Dell Media Direct按键改装成快捷启动菜单–2009完善版

[原创][新]将Dell Media Direct按键改装成快捷启动菜单–09完善版

09.3 修订 – 更换可执行文件生成器。
09.3.20 更新 – 版本2.0 

本文的前身:[原创]将Dell Media Direct按键改装成华丽的程序快捷启动菜单~
http://ddcspace.spaces.live.com/Blog/cns!EAACF9754046F850!5168.entry

本文将阐述一种使用Windows NT命令行解释器,运行批处理脚本,构建程序点播菜单的方法。

需求:
带有Dell Media Direct Home按键的Dell笔记本一台;Windows XP sp2运行环境;已安装Dell Quickset;少许磁盘空间。

目的:
戴尔笔记本的Media Direct软件和按键一样是个鸡肋。不过,我们可以把它改装成想要的东西。我的台式机用的是Logi的键盘,驱动程序iTouch可以把键盘上的快捷按键定义为点播菜单,通过设置达到快速启动程序的目的。现在我们通过Windows NT命令脚本,也就是CMD文件,达到类似的目的。

效果:
在XP运行环境下,按下Media Direct按键,弹出命令提示符,显示设置好的程序,然后用户输入点播字母再敲回车,命令提示符界面退出,启动相应的程序。

设计思路:
内容的核心有二——如何设计点播菜单界面与如何启动程序。我的思路:一行显示两个程序名,对应一个点播字母组合,组合由一个到三个字母组成,必须是唯一的,确保启动唯一的程序。输入字母组合后,如果对应程序,就启动它;如果对应二级子菜单,则显示对应的子菜单;如果没有对应项目,则显示输入错误,重新输入。

使用的命令主要是这些:回显echo,设置变量set,条件判断if,启动程序start,重定向goto。

以上为内容简介。下面进行具体操作。

Step 1. 改装Quickset。因为你没有装Media Experience,按下MD键以后会提示安装不成功!QuickSset的动作是调用某个目录下的DMX.exe,我们可以改造这个程序:

Step 1.1 编译我们自己用的DMX.exe。还是可以写一个命令行脚本,内容是调用另一个将要在Step 2中创建的菜单文件。使用如下代码:
   call I:documentDMXmenu.cmd
  说明:1. DMXmenu.cmd就是将要创建的菜单文件,名字可以随便起但不要包含空格。I:document是它的存放位置,这个取决于你。如果含有空格,需要在call命令中加入引号。
  2. call命令的作用是调用那个cmd文件,这样设计的目的是可以把菜单文件单独保存,有利于修改、备份、添加功能。

Step 1.2 初始化点播菜单文件。新建一个空白的文本文件,文件名和存放在什么地方无所谓,把上面那个“I:documentDMXmenu.cmd”换成你自己的决定就可以了。注意:如果路径包含空格(比如上面Program Files的那个),要把路径用一对英文双引号括起来。

Step 1.3 编译DMX.cmd。把Windows批处理文件编译成可执行文件,这个用软件实现即可(推荐一款绿色免费软件Bat To Exe Converter,文章结尾处有下载链接),保存成DMX.exe放在和dmx.cmd一样的地方就可以了!

Step 1.4 添加注册表项。把下面的文字保存成文本文件(文章结尾处有下载链接),然后扩展名改成.reg就变成了注册表文件,再合并到注册表即可。然后重启Quickset,方法是任务栏托盘图表里选退出,然后从开始菜单里启动。

***

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionApp PathsDMX.exe]
@="C:\Program Files\Dell\Media Experience\DMX.exe"
"Path"="C:\Program Files\Dell\Media Experience\"

***

注意C:\Program Files\Dell\Media Experience\这部分内容,确定是你存放那个文件的位置,并且斜杠要写两次。比如你把DMX.exe放在了D:dmx目录下,这里就替换成下面两行:

***

@="D:\dmx\DMX.exe"
"Path"="D:\dmx\"

***

Step 1.5 先睹为快–你可以先试一下这个DM键的威力,比如显示一行欢迎语句,检验运行是否正常,就在第1.2步里做的那个批处理文件(DMXmenu.cmd)中,只写一句@start notepad,保存,再按下DM键,如果启动了记事本程序,说明Step 1部分操作成功。

Step 2. 编写点播菜单文件。这一步很无聊,提醒一点,就是在application paths这一节里面,那些启动文件的路径不要加引号;还有有一些程序在start命令之后要紧跟一对引号,否则都会启动失败——不这样做的结果也挺有意思的,你可以自己试试(对计算机没有伤害),我到现在也没琢磨明白这是为什么。剩下的,你要是对控制台命令比较熟悉就慢慢琢磨吧,我把自己用的贴出来:

***

@echo off
setlocal
cls
color 0a
::version info
set vers=version 2.0 build 090320
set copyr=made by dtm.Scorp
::initialization
set errsts=0
set choose=NULL
set chslvl=1
title Dell Media Direct Menu %vers%
call :setapp

::print menu loop

:print_loop

call :print_logo

if %chslvl%==1 call :level_one
if %chslvl%==Adobe call :level_two_Adobe
if %chslvl%==MoftOff call :level_two_MoftOff
if %chslvl%==MediaEncToolkt call :level_two_MediaEncToolkt
if %chslvl%==SysPerf call :level_two_SysPerf
if %chslvl%==netapp call :level_two_netapp

:input_loop

call :input

:start_loop

if %chslvl%==1 call :level_one_launch
if %chslvl%==Adobe call :level_two_Adobe_launch
if %chslvl%==MoftOff call :level_two_MoftOff_launch
if %chslvl%==MediaEncToolkt call :level_two_MediaEncToolkt_launch
if %chslvl%==SysPerf call :level_two_SysPerf_launch
if %chslvl%==netapp call :level_two_netapp_launch

if %choose%==0 if %chslvl% NEQ 1 set chslvl=1
cls
set choose=NULL
goto :print_loop

:end
endlocal
exit

::******** sub commands

:print_logo

echo.
echo                                                MMM                           
echo  MM@       MMM .BMMMMMMMMMY   SMMMMMMMMMQ  MMMMMMMMMM@ XMMMMMMM  nMMMMMMMMMt 
echo   MMM     MMM  MMM      ;MME MMM       IMM     MMM     MMM.     MMM       MMM
echo    MMM   MMM  vMMv       MMM 7MM7,i;ii.        MMM     MMM      MMM       MMM
echo     MMM MMM   cMMv       MMM   ..i;;;:vMM#     MMM     MMM      MMM       MMM
echo      MMMMM    iMMM      iMM# MM$       MMM.    MMM     MMM      MMM       MMM
echo       MMM      .#MMMMMMMMMc   UMMMMMMMMM6.     MM@     MMM       1MMMMMMMMM1 
echo.
echo ——————————————————————————-
echo.

echo Quick Launch Menu for Dell Vostro 1400 Media Direct Button
echo %vers%     %copyr%
call :print_linefeed 2

goto :eof

::print blank lines
:: usage – call :print_linefeed [number]

:print_linefeed

for /l %%f in (1,1,%1) do (echo.)

goto :eof

:input

if %errsts%==1 (
  echo.
  set errsts=0
)
  set choose=NULL
  set /p choose=What do you Want^?   
  set choose=%choose: =_%
  if "%choose%"=="" set choose=NULL

goto :eof

::start program with START command
:: usage – call :stprog [application] [working directory]

:stprog

if "%2"=="" (
  start "" %1
) else (
  start "" %1 /d%2
)

goto :end

:level_one

echo applications
echo.
echo M      Maxthon                      N       Windows Notepad
echo NI      nEOiMAGING                  I    Windows Internet Explorer
echo A      Alcohol                      SR     Super Rabbit Magic Set
echo R      Real Player                  W      Winamp
echo L      LDOCE                        X      Kingsoft Xdict
echo S      SnagIt                       MP     Media Player Classic
echo U      Ultra-Edit 32                MQ     Windows Media Player
echo LE     Lavalys Everest              C      Calculator
echo 8      802.1X Net-Access            .
echo.
echo sub-menus
echo.
echo SA      Adobe                       SO     Microsoft Office 2003
echo SE     Media Encoding Toolkit       SS     System performances
echo SN     Net-connected Apps           .
echo.
echo CFG     menu configuration           XX     exit
echo D      Command Console (ASCII)           K2G    Reduction
echo DU     Command Console (Unicode)    .

call :print_linefeed 3

goto :eof

:level_one_launch

::running apps
if /i %choose%==xx goto :end
if /i %choose%==NULL goto :end
if /i %choose%==cfg (
  >nul copy H:DocumentDMXmenu.cmd H:DocumentDMXMbackup /y
  start "" notepad.exe H:Documentdmxmenu.cmd
  goto :end
)
if /i %choose%==m start /max "" %maxthon% /d%maxthonp% && goto :end
if /i %choose%==n call :stprog notepad.exe
if /i %choose%==ni start /max "" %neoimaging% && goto :end
if /i %choose%==d start "Command Console" cmd.exe && goto :end
if /i %choose%==du start cmd.exe /u && goto :end
if /i %choose%==i call :stprog iexplore.exe
if /i %choose%==a call :stprog %alcohol% %alcoholp%
if /i %choose%==sr call :stprog %superr% %superrp%
if /i %choose%==w start D:musicStartWinampAfterStartingService.exe && goto :end
if /i %choose%==r call :stprog %realplayer%
if /i %choose%==l call :stprog %ldoce% %ldocep%
if /i %choose%==s call :stprog %snagit%
if /i %choose%==mp call :stprog %mpc%
if /i %choose%==u start "" /max %ue% && goto :end
if /i %choose%==mq call :stprog %wmplayer%
if /i %choose%==c call :stprog calc
if /i %choose%==le call :stprog %everest%
if /i %choose%==rdc call :stprog %rdc%
if /i %choose%==k2g echo -0.068677425384521484375 && pause && goto :end
if /i %choose%==8 call :stprog %net% %netp%
  if /i %choose%==x call :stprog %xdict%

::sub-menu redirection
if /i %choose%==sa set chslvl=Adobe
if /i %choose%==so set chslvl=MoftOff
if /i %choose%==se set chslvl=MediaEncToolkt
if /i %choose%==ss set chslvl=SysPerf
if /i %choose%==sn set chslvl=netapp

set errsts=1

goto :eof

:level_two_Adobe

echo submenu – Adobe && call :print_linefeed 2 && echo applications
echo.
echo P      Photoshop                    U      Audition
echo M      Premiere Pro                 B      Bridge
echo.
echo PLG    Activate/Deacti 3rd-party Plugins for Photoshop
echo 0       goto menu level one

call :print_linefeed 3

goto :eof

:level_two_Adobe_launch

if /i %choose%==p start /max "" %photoshop% && goto :end
if /i %choose%==plg (
  cls && color 0c && echo. && echo Auto-Changing Applet by dtm && echo.
  call E:Adobe3prtplgnautochange.cmd
  cls && color 0a
  set choose=empty
  goto :print_loop
  )
if /i %choose%==u start /max "" %audition% && goto :end
if /i %choose%==m start /max "" %premiere% && goto :end
if /i %choose%==b start /max "" %bridge% && goto :end

set errsts=1

goto :eof

:level_two_MoftOff

echo submenu – Microsoft Office && call :print_linefeed 2 && echo applications
echo.
echo W      Word                         E      Excel
echo F      FrontPage                    P      PowerPoint
echo .
echo 0       goto menu level one

call :print_linefeed 3

goto :eof

:level_two_MoftOff_launch

if /i %choose%==w start /max "" winword && goto :end
if /i %choose%==e start /max "" excel && goto :end
if /i %choose%==f start /max "" frontpg && goto :end
if /i %choose%==p start /max "" powerpnt && goto :end

set errsts=1

goto :eof

:level_two_MediaEncToolkt

echo submenu – Media Encoding Toolkit && call :print_linefeed 2 && echo applications
echo.
echo E      Exact Audio Copy             MA     Monkey’s Audio
echo G      MeGUI                        DI     DGIndex
echo DD     DVD Decrypter                GEN    goto gen_core
echo.
echo 0       goto menu level one

call :print_linefeed 3

goto :eof

:level_two_MediaEncToolkt_launch

if /i %choose%==g call :stprog %megui% %meguip%
if /i %choose%==di call :stprog %dgindex% %dgindexp%
if /i %choose%==dd call :stprog %dvddecrypter% %dvddecrypterp%
if /i %choose%==gen call :stprog explorer "F:exchangevideo"
if /i %choose%==e call :stprog %eac% %eacp%
if /i %choose%==ma call :stprog %mac%

set errsts=1

goto :eof

:level_two_SysPerf

echo submenu – System Performance Settings && call :print_linefeed 2 && echo applications
echo.
echo SH + A /D    Shell Preview – A to Active and D to De-active
echo OO + A /D    O^&O Defrag – A to Start and D to Stop
echo.
echo 0       goto menu level one

call :print_linefeed 3

goto :eof

:level_two_SysPerf_launch

if /i %choose%==sha regsvr32 shimgvw.dll /s && goto :end
if /i %choose%==shd regsvr32 shimgvw.dll /s /u && goto :end
if /i %choose%==ooa start /w net start "o&o defrag" && goto :end
if /i %choose%==ood start /w net stop "o&o defrag" && goto :end

set errsts=1

goto :eof

:level_two_netapp

echo submenu – Net-connected Applications && call :print_linefeed 2 && echo applications
echo.
echo M      Windows Live Mail            S      Windows Live Messenger
echo W      Windows Live Writer          X      Firefox
echo Q      Tencent QQ                   B      BitTorrent
echo D      Net Transport                F      Fetion
echo E      easyMule                     T      Thunder
echo U      UUCall mini                  .
echo.
echo 0       goto menu level one

call :print_linefeed 3

goto :eof

:level_two_netapp_launch

if /i %choose%==m call :stprog wlmail
if /i %choose%==s call :stprog msnmsgr
if /i %choose%==w call :stprog %wlwriter%
if /i %choose%==p call :stprog %wlpg% %wlpgp%
if /i %choose%==q call :stprog %tcqq% %tcqqp%
if /i %choose%==b call :stprog %btdl%
if /i %choose%==d call :stprog %ntdl%
if /i %choose%==f call :stprog %fetion% %fetionp%
if /i %choose%==e call :stprog %easymule% %easymulep%
if /i %choose%==max call :stprog %oldmaxthon% %oldmaxthonp%
if /i %choose%==x call :stprog %firefox%
if /i %choose%==t call :stprog %thunder%
if /i %choose%==u call :stprog %uucall%

set errsts=1

goto :eof

::application paths

:setapp

set maxthon=D:netmaxthon2maxthon.exe
set maxthonp=D:netmaxthon2
set neoimaging="D:picturenEO iMAGINGnEOiMAGING.exe"
set eac=D:musicEACEAC.exe
set eacp=D:musicEAC
set photoshop="E:AdobeAdobe Photoshop CS3photoshop.exe"
set audition="E:AdobeAdobe Audition 3.0audition.exe"
set bridge="E:AdobeAdobe Bridge CS3Bridge.exe"
set alcohol="D:discAlcohol SoftAlcohol 120Alcohol.exe"
set alcoholp="D:discAlcohol SoftAlcohol 120"
set superr="D:toolSuper RabbitMagicSetsrgui.exe"
set superrp=C:Documents and SettingsCuiym「开始」菜单程序
set winamp=D:musicWinampwinamp.exe
set winampp=D:musicWinampPlugins
set realplayer=D:movieRealRealPlayerrealplay.exe
set mac="D:musicMonkey’s AudioMonkey’s Audio.exe"
set ldoce=D:dictionaryLongmanLDOCEldoce.exe
set ldocep=D:dictionaryLongmanLDOCE
set snagit="D:pictureTechSmithSnagIt 7SnagIt32.exe"
set mpc="D:movieRingz StudioStorm Codecmplayerc.exe"
set ue="D:toolIDM Computer SolutionsUltraEdit-32Uedit32.exe"
set wmplayer="C:Program FilesWindows Media Playerwmplayer.exe" /prefetch:1
set megui=D:movieMeGUIMeGUI.exe
set meguip=D:movieMeGUI
set dgindex="D:movieAviSynth 2.5dgmpgdec148_20060720DGIndex.exe"
set dgindexp=D:movieAviSynth 2.5dgmpgdec148_20060720
set dvddecrypter="D:movieDVD DecrypterDVDDecrypter.exe"
set dvddecrypterp=D:movieDVD DecrypterSounds
set everest="D:toolLavalysEVEREST Ultimate Editioneverest.exe"
set rdc=%SystemRoot%system32mstsc.exe
set premiere="E:AdobeAdobe Premiere Pro CS3Adobe Premiere Pro.exe"
set firefox="D:netMozilla Firefoxfirefox.exe"
set net="C:Program Files8021xUI.exe"
set netp=C:Program Files8021x
set wlwriter="C:Program FilesWindows LiveWriterWindowsLiveWriter.exe"
set tcqq=D:netTencentQQBinQQ.exe
set tcqqp=D:netTencentQQBin
set btdl=D:netBitTorrentbittorrent.exe
set ntdl="D:netXiNetTransport 2NetTransport.exe"
set fetion="D:netChina MobileFetionFetion.exe"
set fetionp="D:netChina MobileFetion"
set easymule=D:neteasyMuleemule.exe
set easymulep=D:neteasyMule
set xdict="C:Program FilesKingsoftPowerWord LiteXDict.exe"
set thunder="D:netThunder NetworkThunderThunder.exe"
set uucall="D:netUUCall_mini.exe"

goto :eof

***

说明:1. 变量:errsts,choose,chslvl,分别用来存放错误状态(正常0错误1),选择输入(一到三位的字母组合),菜单级别(1为根菜单,还有若干子菜单)
      2. if选择语句相关:参数/i表示忽略输入的大小写,判断的等号要写两次,多行命令要用括号括起来或者用两个&符号连成一行。
      3. 其他命令相关内容请参阅Windows帮助。
      4. 循环思路:启动后初始化环境,错误状态为0,选择输入为empty,菜单级别为1,进入循环,检测到级别为1,显示一级菜单,等待用户输入;判断输入值是否为一级菜单内已定义的项目,运行相应的程序,如果对应二级子菜单,则将菜单级别设置为对应的子菜单,进行下一次循环;如果错误,设置错误状态为1,进行下一次循环。
         而后的循环,首先检测菜单级别,显示对应菜单;再检测错误状态,如果正常则等待输入,错误则显示“输入错误”后,清除错误状态,等待输入。
      5. setlocal与endlocal语句确保设置的变量只在菜单程序的生命期与环境内有效,不干扰系统和其他程序运行。
      6. DMX.exe通过QuickSet调用启动,是一个最大化的窗口。因此这个菜单的窗口是最大化的,也就是一个占据了屏幕左半边的命令提示符界面。
      7. 如果不输入字符,直接退出。如果输入CFG,自动备份菜单文件,并打开记事本程序编辑菜单内容。备份文件的存放位置可以在launch menu level one一节中找到,实际上是一个copy命令。
      8. [09.3.20更新] 采用子程序调用,优化程序结构。

优点:
相比于Windows的快捷启动方式,菜单灵活,可以执行多种命令;设置集中,方便设置快捷键,并且只须保存若干个文件,不必储存大量快捷方式。
相比于其他快捷启动的软件,菜单只需要Dell的QuickSet,而这个软件大部分戴尔用户都会安装;全部内容都是Windows NT命令脚本,执行速度非常快,不占用多少内存和硬盘空间。

已知缺点:
设置程序的步骤比较繁琐,需要添加程序的存放位置、菜单中的项目、条件选择中的start命令。
少部分程序不能通过此菜单启动。

链接:
免费软件Bat to Exe Converter

09.3 修订 – 更换新的版本1.5  以前的1.4被SAV杀掉。。悲伤
http://cid-eaacf9754046f850.skydrive.live.com/embedrowdetail.aspx/applications/Bat|_To|_Exe|_Converter.zip
注册表文件dmx.reg
http://cid-eaacf9754046f850.skydrive.live.com/embedrowdetail.aspx/applications/dmx.rar

Advertisements
  1. #1 by on 三月 21, 2010 - 8:57 上午

    还可以,下了很多功夫,支持!我怎么觉得有点象映像劫持?

  2. #2 by dtm on 三月 24, 2010 - 5:49 上午

    不是映像劫持! 是把DMX.exe替换了而已. 本来想加Hook, 但是似乎那个Home按键只能用Quickset接收, 麻烦!

Log in or fill out contact info to leave a reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: