标签: windows-shell

更改 Shell 注册表

在我的应用程序开始时,我将注册表的 shell 值更改为自定义 shell 并杀死 explorer.exe(它在应用程序之外完成),我希望允许后门返回原始 shell 并带回资源管理器。可执行程序。恢复进程对我来说很好,但是当我运行我的代码来更改注册表值时,没有抛出异常,但是当我签入 regedit 时该值没有改变,这是我的代码(在另一个问题上看到它):

        RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", true);
        regKey.SetValue("Shell", "explorer.exe", RegistryValueKind.String);
        regKey.Close();
Run Code Online (Sandbox Code Playgroud)

请帮忙

c# windows registry windows-shell regedit

1
推荐指数
1
解决办法
5800
查看次数

更新Windows资源管理器中显示的可用空间量

如何更新Windows资源管理器中显示的可用空间量?

假设打开Windows资源管理器并以编程方式删除某些文件.Windows资源管理器不会刷新以显示可用的新可用空间.

所以,我尝试使用SHChangeNotify这样的(Delphi代码):

ws := 'C:\';
SHChangeNotify (SHCNE_FREESPACE, SHCNF_PATH, PWideChar(ws), nil); 
Run Code Online (Sandbox Code Playgroud)

但它不会更新"Windows资源管理器"中报告的值.

请帮忙.

windows delphi windows-shell delphi-7

1
推荐指数
1
解决办法
228
查看次数

当SHBrowseForFolder返回时如何获得焦点

我目前正在使用SHBrowseForFolder()打开浏览文件夹窗口但是当按下取消/确定时如何将焦点返回到我的主窗口.我读到我应该在对话框关闭之前重新启用我的主窗口,但究竟是哪里?有什么想法吗?

void buttonPush(HWND hWnd) {
    EnableWindow(hWnd, FALSE);
    BROWSEINFO bi = { 0 };
    TCHAR szDir[MAX_PATH] = { 0 };
    LPITEMIDLIST pid = NULL;
    LPMALLOC pMalloc = NULL;

    if (SUCCEEDED(SHGetMalloc(&pMalloc)))
    {
        ZeroMemory(&bi,sizeof(bi));
        bi.hwndOwner = NULL;
        bi.pszDisplayName = NULL;
        bi.pidlRoot = NULL;
        bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_USENEWUI;
        bi.lpfn = BrowseCallbackProc;

        pidl = SHBrowseForFolder(&bi); 
        if (pidl) 
        { 
            // Folder selected in dialog
            pMalloc->Free(pidl); 
        } 
        pMalloc->Release();
    }
    EnableWindow(hWnd, TRUE);
}
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi windows-shell

1
推荐指数
2
解决办法
581
查看次数

为什么这个 COM 代码会泄露?

我正在维护一个使用 Windows 资源管理器覆盖图标的应用程序。有时,某些操作需要我强制刷新特定文件夹的资源管理器视图。我使用以下使用 COM 的函数来执行此操作:

void RefreshExplorerView(CString strPath)
{
    CComPtr<IShellWindows> pShellWindows;

    CoInitialize(NULL);

    if(SUCCEEDED(pShellWindows.CoCreateInstance(CLSID_ShellWindows)))
    {
        IDispatch* pFolder=NULL;
        VARIANT variant;
        V_VT(&variant) = VT_I4;

        for(V_I4(&variant) = 0; pShellWindows->Item(variant, &pFolder) == S_OK; V_I4(&variant)++)
        {
            CComPtr<IWebBrowserApp> pWebBrowserApp;
            if(SUCCEEDED(pFolder->QueryInterface(IID_PPV_ARGS(&pWebBrowserApp))))
            {
                BSTR LocationURL = NULL;
                pWebBrowserApp->get_LocationURL(&LocationURL);

                if(LocationURL != NULL && strPath.CompareNoCase(LocationURL) == 0)
                {
                    CComPtr<IServiceProvider> pServiceProvider;
                    if(SUCCEEDED(pWebBrowserApp->QueryInterface(IID_PPV_ARGS(&pServiceProvider))))
                    {
                        CComPtr<IShellBrowser> pShellBrowser;
                        if(SUCCEEDED(pServiceProvider->QueryInterface(IID_PPV_ARGS(&pShellBrowser))))
                        {
                            IShellView* pShellView;
                            if(SUCCEEDED(pShellBrowser->QueryActiveShellView(&pShellView)))
                            {
                                pShellView->Refresh();
                                pShellView->Release();
                            }
                        }
                    }
                }

                SysFreeString(LocationURL);
            }
            pFolder->Release();
            pFolder = NULL;
        }
    }

    CoUninitialize();
}
Run Code Online (Sandbox Code Playgroud)

我注意到,当我的程序定期进行此刷新时,它的大小会慢慢增长,并且 UMDH 向我表明,每次运行时,我似乎都在泄漏pFolder和实例。 …

c++ windows com atl windows-shell

1
推荐指数
1
解决办法
698
查看次数

检查 python 函数返回的退出代码

我写了一个python函数

def foo():
    if A:
        do something
    if B:
        exit(-1)

if __name__ == "__main__":
    foo()
Run Code Online (Sandbox Code Playgroud)

有什么方法可以检查 foo 函数返回的退出代码吗?我从 Windows shell 运行它。

windows-shell python-2.7

1
推荐指数
1
解决办法
8100
查看次数

确定explorer.exe是否作为Windows shell运行?

我需要确保explorer.exe作为系统shell运行.我需要做的是:

  • 用.覆盖当前的shell(Winlogon\Shell)explorer.exe
  • 运行explorer.exe(作为shell)
  • 用我自己的shell覆盖当前的shell.

在最后两个步骤之间是一场比赛:

  • 如果我用自己的shell覆盖当前shell太快,只打开"我的文档"窗口.

所以问题是,是否有任何事件/互斥/回调我可以调用以确保资源管理器初始化为shell?

我设法做的最好是等待托盘窗口,如:

while(!FindWindow("Shell_TrayWnd", NULL)) { 
     sleep(250);
}
Run Code Online (Sandbox Code Playgroud)

这似乎有点草率,有更好的方法吗?

c winapi windows-explorer windows-shell

0
推荐指数
1
解决办法
1437
查看次数

通过文件扩展名获取扩展名和图标的最快方法?

有几种方法可以获取给定扩展的描述和默认图标(没有完整路径),例如"*.doc"我想获得"Microsoft Word文档"和相关图标,您认为这将是最快的以下之一:

  1. 搜索注册表:

    • 在注册表中,转到"HKCR.{extension}",读取默认值(让我们称之为文件类型)
    • 在"HKCR {filetype}\DefaultIcon"中,读取默认值:这是图标文件的路径(或图标容器文件,如带有嵌入图标资源的.exe)
    • 如果需要,请使用从首先提到的文件中提取图标资源的首选方法.
  2. 调用API ShGetFileInfo.我相信这有点慢.

  3. 根据Rob的说法,这里:如何使用Delphi从文件扩展名中获取图标和描述?

将IExtractIcon接口称为"更灵活,更高效"的替代方案.但它建议的顺序是使用IShellFolder接口,然后调用GetUIObjectOf获取文件的IExtractIcon接口,然后调用GetIconLocation和Extract来检索图标的句柄.(但是这个方法无法读取扩展描述?)

由于速度非常重要,因为我需要读取系统中所有文件类型的信息.

非常感谢你!

windows-shell

0
推荐指数
1
解决办法
2424
查看次数

在Windows上将每个shell会话的应用程序限制为一个实例

有很多解决方案可以限制应用程序运行两次.按进程名称搜索,使用命名的互斥锁等.但是如果我想将我的应用程序限制为shell会话,那么所有这些方法都不起作用.

用户可能在Windows上拥有多个登录会话和shell(对吗?)?如果这是真的,我希望能够在每个shell会话中运行我的应用程序的一个实例,但只允许一个.

有没有办法获得一个shell标识符,然后可以将其放入互斥锁名称?

c c++ windows windows-shell single-instance

0
推荐指数
1
解决办法
1533
查看次数

C++ Shell函数获取公共库文件夹的CSIDL

我想知道,在Windows平台上是否有任何API/CSIDL来检索公共用户帐户的库文件夹路径?

像这样的路径:"C:\ Users\Public"

c++ winapi windows-shell

0
推荐指数
1
解决办法
1079
查看次数

Shell上下文菜单

我目前正在运行Windows 7 x64 machine.

我编写了以下代码来右键单击添加上下文菜单:

    RegistryKey rKey = Registry.ClassesRoot.OpenSubKey("Directory\\Background\\shell", true);
    String[] names = rKey.GetSubKeyNames();
    foreach (String s in names)
    {
        System.Windows.Forms.MessageBox.Show(s); 
    }
    RegistryKey newKey = rKey.CreateSubKey("Your Application");
    RegistryKey newSubKey = newKey.CreateSubKey("command");
    newSubKey.SetValue("", "C:\\Windows\\System32\\notepad.exe");
    newSubKey.Close();
    newKey.Close();
    rKey.Close();                  
Run Code Online (Sandbox Code Playgroud)

如果我直接在注册表上重复该过程,它可以工作,但不是通过这个.

我也能够访问注册表,因为我添加了一个片段,告诉列出我需要的所有子键,但根本不添加一个.

c# contextmenu windows-shell

0
推荐指数
1
解决办法
781
查看次数

如何在 Windows 命令 shell 中初始化变量并回显它

如何在windows命令shell中初始化一个变量?我试过

(
var $a=1
echo $a
)
Run Code Online (Sandbox Code Playgroud)

并得到一个错误

'var' is not recognized as an internal or external command, operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

windows cmd windows-shell

0
推荐指数
1
解决办法
1万
查看次数

使用负IconIndex值创建ShellLink时出错

在Delphi XE7中,我使用此代码创建指向特定文件夹的SHELL LINK.此文件夹显示在Windows资源管理器中,其中包含由此文件夹中的desktop.ini文件定义的自定义文件夹图标.应使用desktop.ini文件中的图标参数创建SHELL LINK,即指向与desktop.ini文件相同的图标资源.所以这是代码:

function GetDesktopIniIconDataFromFolder(const APath: string; var VIconIndex: Integer): string;
var
  DeskTopIniFile: string;
  DesktopIni: System.IniFiles.TIniFile;
  ThisIconFileStr, ThisIconIndexStr: string;
  ThisIconIndexInt: Integer;
begin
  Result := '';
  if DirectoryExists(APath) then
  begin
    DeskTopIniFile := IncludeTrailingPathDelimiter(APath) + 'Desktop.ini';
    if FileExists(DeskTopIniFile) then
    begin
      DesktopIni := System.IniFiles.TIniFile.Create(DeskTopIniFile);
      try
        ThisIconFileStr := DesktopIni.ReadString('.ShellClassInfo', 'IconFile', '');
        if ThisIconFileStr <> '' then
        begin
          ThisIconIndexStr := DesktopIni.ReadString('.ShellClassInfo', 'IconIndex', '');
          if ThisIconIndexStr <> '' then
          begin
            ThisIconIndexInt := System.SysUtils.StrToIntDef(ThisIconIndexStr, MaxInt);
            if ThisIconIndexInt <> MaxInt then
            begin
              Result := ThisIconFileStr;
              VIconIndex := …
Run Code Online (Sandbox Code Playgroud)

delphi windows-shell delphi-xe7

-3
推荐指数
1
解决办法
253
查看次数

如何运行我的应用程序来代替默认的Windows XP shell?

我正与同事讨论以下是否可行:

  1. 在Windows XP中从USB驱动器安装MFC应用程序(此安装将由具有足够安装软件权限的用户手动启动).
  2. 重新启动后,应启动此应用程序而不是默认的Windows XP shell(explorer.exe).

有谁知道我怎么做到这一点?

c++ windows winapi windows-shell

-6
推荐指数
2
解决办法
1105
查看次数