标签: windows-shell

是否有操作系统功能将REFIID转换为有用的名称?

没有手动编写函数,可以将一些已知的REFIID转换为名称,例如:

if (riid == IID_IUnknown) return "IUnknown";
if (riid == IID_IShellBrowser) return "IShellBrowser";
...
Run Code Online (Sandbox Code Playgroud)

是否有系统调用会为众所周知的(甚至所有)REFIID返回合理的调试字符串?

c++ windows com windows-shell

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

操作Windows 7资源管理器导航窗格

基于我在超级用户处收到的答案,很明显我必须将以下内容添加到自定义资源管理器窗口启动器中.我想启动一个rooted explorer视图,只有那个窗口使导航窗格看起来像旧的Windows XP文件夹窗格.我已经编写了一个程序来在"开始"菜单上放置这些文件夹视图的快捷方式,因此更改快捷方式以通过启动程序运行是微不足道的.

这是XP文件夹窗格:

Windows XP资源管理器文件夹窗格

这是Windows 7导航窗格:

Windows 7资源管理器导航窗格http://www.280z28.org/images/NavigationPaneProblems.png

navigation windows-explorer windows-shell

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

使Windows刷新图标缓存

我真的很喜欢KDE SC 4的氧气外观.我写了一个程序将这些图标应用到windows.该程序是用NSIS编写的,目前几乎完全正常运行.但是,我发现让Windows了解图标更改的唯一方法是杀死explorer.exe,删除图标缓存,并重新生成explorer.exe.SHChangeNotifySHCNE_ASSOCCHANGED似乎无法使Windows知道的更改控制面板图标,我的电脑图标,等请提出一个更好的,那么残酷的方法来让Windows识别这些更改.

编辑:我发现了一个名为Icon Tweaker的程序似乎能够做到这一点,但它是封闭的来源,所以我不知道它是如何做到的.(IconTweaker:http://www.crystalxp.net/galerie/en.id.83-icontweaker.html )

编辑:感谢Anders的回复(见下文),我的工作正常.但是,我会把我工作的NSIS代码放在这里,万一其他人需要它

ReadRegStr $0 HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size"
IntOp $0 $0 + 1
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000
IntOp $0 $0 - 1
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000
Run Code Online (Sandbox Code Playgroud)

$ 0寄存器用于存储Shell Icon SizeHKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics.然后我们递增值并执行a SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL),然后递减并重新发送.

编辑:作为奖励,这可以用作在Windows …

windows icons nsis windows-shell shell-icons

5
推荐指数
2
解决办法
6234
查看次数

根据状态叠加不同文件上的图标

嗨,我是shell扩展的新手.我阅读了http://www.codeproject.com/KB/shell/overlayicon.aspx 文章,并能够在名称中包含字符串"sample"的文件上显示叠加图标.现在我的问题是我有一个应用程序,根据文件状态显示不同文件的不同叠加,如上传,上传,未上传等.请帮助我如何为特定路径中的特定文件/文件夹设置叠加系统.谢谢

c++ windows icons windows-shell overlays

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

如果我自己导入了SHParseDisplayName,为什么会出现访问冲突?

我试图在Delphi中获取pidl形式的路径时获得访问冲突,并且返回的pidl为nil.这是我的代码:

type
  // TParseDisplayName = function(pszPath: PChar; pbc: pointer; var pidl: PItemIDList; sfgaoIn: LongWord; var psfgaoOut: LongWord): LongInt;
  TParseDisplayName = function(pszPath: PWideChar; pbc: IBindCtx; var pidl: PItemIDList; sfgaoIn: ULong; var psfgaoOut: ULong): HResult;

var
  SHParseDisplayName: TParseDisplayName;
  SHELL32DLLHandle : THandle;

procedure test();
var
  ws : WideString;
  tmpLongWord: ULong;
  lpItemID: PItemIDList;
begin
  //ws := 'Mes documents';

  CoInitialize(nil);

  // path to test
  ws := 'C:\inetsdk\Nouveau Document WordPad.doc';

  if (SHParseDisplayName(PWideChar(ws), nil, lpItemID, 0, tmpLongWord) = S_OK) then
    if not assigned(lpItemID) then      
      s := SysErrorMessage(getLastError); …
Run Code Online (Sandbox Code Playgroud)

delphi winapi windows-shell

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

如何在Python中创建shell扩展上下文菜单(如dropbox)

我想创建一个上下文菜单shell扩展,以配合我用Python编写的程序.

我试图用在工作演示\Lib\site-packages\win32comext\shell\demos\servers\context_menu.pypywin32(这里是文件),但它并没有对我的X64 Win7的工作:它注册好了,并添加注册表项,但在上下文菜单中没有出现(即使经过重启).所以我搜索了一些,并记住Dropbox说只使用Python进行开发,我查看了它们的上下文菜单注册表项.我发现他们使用:DropboxExt64.15.dll在他们中InProcServer32(虽然我已经阅读过这个和其他一些资源,但我对shell扩展还不太了解).因此看起来他们将ac/c ++代码编译为dll并使用它来调用python代码.

我的问题是他们是怎么做到的?我在哪里可以找到有关如何使用此方法的资源(示例,指南等)?使用该方法有哪些缺陷context_menu.py

python windows-shell win32com

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

从自定义shell运行metro应用程序

我想为Windows 8 Embedded Standard(Release Preview)创建一个自定义shell(WinForms),允许用户运行,安装或更新应用程序(可以是桌面和/或城域应用程序).

因此,我explorer.exe在注册表中替换了自定义shell的路径,这非常有效.当我尝试使用IApplicationActivationManager运行metro风格的应用程序时(请参阅此处的实现细节),我收到以下错误消息:

应用程序管理器需要激活应用程序,但未运行.(HRESULT异常:0x80270257)

事件日志不包含任何其他信息(既不在Application也不在内TWinUI).

Metro风格的应用程序在explorer.exe用作shell 时运行良好.我还没有找到一个流程或服务,我可以简单地开始允许执行metro应用程序(我试图运行WWAHost.exe,但这失败并显示错误消息The system cannot execute the specified program.).explorer.exe手动启动不会改变任何东西.

windows-shell microsoft-metro windows-embedded-8

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

Java信息亭应用程序的Windows Shell

我已经在SWT中开发了一个Java应用程序,该应用程序应在作为信息亭运行的Windows系统上运行。该应用程序应该是系统中唯一运行的应用程序,并且应该在系统启动后立即打开。应该禁用任务管理器,Windows开始菜单,热键等所有功能(例如,请参见http://www.codeproject.com/Articles/7392/Lock-Windows-Desktop)。该应用程序还具有一个内置的管理员用户,该用户可以再次激活所有事情,从而有可能在系统中进行更改。这些事情已经实现。问题在于,当Windows启动时,它会持续几秒钟,直到应用程序打开为止,在此短时间内,用户会看到所有内容(直到应用程序启动,所有内容都无法禁用)。我已经搜索了互联网,唯一的解决方案似乎是替换注册表中的标准Windows Shell。现在出现了问题:

没有人知道如何编写一个用于Windows外壳

  1. 使我能够在启动时停用所有内容
  2. 让我在桌面上为我的应用程序添加快捷方式,以便用户可以打开应用程序
  3. 让我为应用程序中的管理员用户激活停用的功能

还是您有其他想法来实现这一目标?

谢谢

java windows kiosk windows-shell

5
推荐指数
0
解决办法
2388
查看次数

C++可能在COM方法边界抛出代码

C++异常不能跨越COM模块边界.

所以,假设我们在一个COM方法体中,并且调用一些C++ 潜在抛出的方法/函数(这可能因为例如使用STL类而抛出):

STDMETHODIMP CSomeComServer::DoSomething()
{
    CppDoSomething(); // <--- This may throw C++ exceptions
    return S_OK;
}
Run Code Online (Sandbox Code Playgroud)

Q1.上面的代码是可行的实现吗?例如,如果该代码是上下文菜单shell扩展的一部分,如果C++ CppDoSomething()函数抛出C++异常,那么Explorer会做什么?它是否捕获C++异常并卸载shell扩展?在快速失败的方法之后,它是否只是崩溃资源管理器(使用崩溃转储分析问题成为可能)?

Q2.像这样的实现会更好吗?

STDMETHODIMP CSomeComServer::DoSomething()
{
    //
    // Wrap the potentially-throwing C++ code call in a safe try/catch block.
    // C++ exceptions are caught and transformed to HRESULTs.
    //
    try
    {
        CppDoSomething(); // <--- This may throw C++ exceptions
        return S_OK;
    }
    //
    // Map C++ std::bad_alloc exception to E_OUTOFMEMORY HRESULT.
    //
    catch(const std::bad_alloc& ex) …
Run Code Online (Sandbox Code Playgroud)

c++ com winapi exception windows-shell

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

如何将SHCreateItemFromParsingName与Shell命名空间中的名称一起使用?

我正在使用SHCreateItemFromParsingName路径转换为IShellItem

IShellItem ParseName(String path)
{
    IShellItem shellItem;

    HRESULT hr = SHCreateItemFromParsingName(path, null, IShellItem, out shellItem);
    if (Failed(hr)) 
        throw new ECOMException(hr);
    return shellItem;
}
Run Code Online (Sandbox Code Playgroud)

注意:A IShellItem于2006年左右推出,旨在为Windows 95时代IShellFolder+ pidl构造提供方便的包装。你甚至可以问IShellItem咳嗽了它的基础IShellFolder,并pidlIParentAndItem.GetParentAndItem接口和方法。

不同的事物具有不同的显示名称

我可以在shell名称空间中找到一些众所周知的位置,并查看它们的绝对解析SIGDN_DESKTOPABSOLUTEPARSING)和编辑SIGDN_DESKTOPABSOLUTEEDITING)显示名称:

| Path              | Editing               | Parsing                                                           |
|-------------------|-----------------------|-------------------------------------------------------------------|
| C:\               | "C:\"                 | "C:\"                                                             |
| C:\Windows        | "C:\Windows"          | "C:\Windows"                                                      |
| Desktop …
Run Code Online (Sandbox Code Playgroud)

windows winapi windows-shell

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