为Windows创建Shell替换所需的最低功能是什么?

时间:2011-01-19 01:14:20

标签: shell emacs cygwin

如您所知,我们可以通过更改Shell密钥来更改Windows Shell     HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Winlogon

我创建简单的AutoHotKey脚本,将其编译为cgywin.exe,并实现基本的WIN + R,WIN + E等。我的目标是Windows环境,其中没有任务栏,全屏Cygwin控制台和里面的emacs。我发现简单的AutoHotkey足够我

这是AutoHotKey脚本(编译为cygwin.exe)


Run C:\Development\Tools\Cygwin\Cygwin.bat,,max
Run C:\Development\Tools\Fun\xeyes.exe
run c:\Program Files\Digsby\digsby.exe
#h::
    run rundll32.exe powrprof.dll,SetSuspendState Hibernate
    return
#w::
    ifWinExist "@Gameloft:)"
    {
        WinActivate
    }else{  
        run e:\Data\vs.net\At Gameloft\At Gameloft\At Gameloft\bin\Release\At Gameloft.exe
        WinWait "@Gameloft:)"
        WinActivate
    }
    return
#y::
    run c:\Program Files\Digsby\digsby.exe
    return
#f::
    run firefox
    return
#t::
        run thunderbird
        return
#c::
        Run C:\Development\Tools\Cygwin\Cygwin.bat,,max
    return
#r::
    DllCall(DllCall("GetProcAddress", "Uint", DllCall("GetModuleHandle", "str", "shell32"), "Uint", 61), "Uint", 0, "Uint", 0, "Uint", 0, "Uint", 0, "Uint", 0, "Uint", 0)
    return
#g::
    run chrome
    return
#e::
    run c:\Program Files\zabkat\xplorer2_lite\xplorer2_lite.exe
    return
#^e::
    run explorer
    return
#d::
    WinSet, Style, -0xC00000, A
    WinMaximize, A
    return

但我意识到缺少某些shell功能。比如当我使用Chrome下载时,我可以“使用”打开文件夹“菜单来下载文件。似乎shell以某种方式提供了这些功能。

创建足够的Shell替换必须实现的最基本的东西是什么?

谢谢!

2 个答案:

答案 0 :(得分:1)

您所描述的是没有进程与简单文件名或路径的默认协议相关联的现象。例如,Chrome可能会尝试启动C:\Users\You\Downloads作为进程。但是,由于您替换了默认shell,因此没有可执行文件与该行为相关联。

然而,我不知道AutoHotKey是否可以处理传递它的普通参数。

答案 1 :(得分:1)

从技术上讲,shell没有“必需”功能 - 你根本不需要任何东西(当然,这样的shell不会起任何作用)。

在实践中,当您完全更换外壳时,有时会遇到问题(就像您一样)。这是因为默认shell(explorer.exe)是同一个进程,它也表现为Windows资源管理器。根据Chrome使用的API调用,可能无法打开文件夹窗口,因为没有正在运行的explorer.exe实例。

出于这个原因,今天的大多数shell替换都没有真正“替换”默认shell,但是它们运行在explorer.exe之上,但隐藏桌面和/或任务栏,而是呈现自己的界面。