我正在使用SharpShell编写一个小的新shell上下文菜单项,将当前选定的文件复制到新的子文件夹,然后提示用户输入目录的新名称.
搜索StackOverflow,我找到了这个答案.但是,我想在SharpShell中做同样的事情.
我会以某种方式对它进行射击SVSI_EDIT,我可以深深地找到它,SharpShell.Interop但我不确定这是如何工作的.我找不到任何文档或代码示例.
(编辑:我想找出如何Pidl从文件名中获取一个好的开始,但也许我根本不需要它?)
网络连接快捷方式(以太网,Wi-Fi等)具有不同的上下文菜单,具体取决于连接状态(已连接/已断开连接).我使用以下代码(Delphi)来检索和显示此菜单.
var pidl, child: PItemIdList;
pFolder: IShellFolder;
pMenu: IContextMenu;
menu: HMENU;
begin
SHParseDisplayName(PChar('%USERPROFILE%\Desktop\eth0.lnk'), nil, pidl, 0, PDWORD(nil)^);
SHBindToParent(pidl, IID_IShellFolder, Pointer(pFolder), child);
CoTaskMemFree(pidl);
pFolder.GetUIObjectOf(0, 1, child, IID_IContextMenu, nil, pMenu);
menu := CreatePopupMenu;
pMenu.QueryContextMenu(menu, 0, 0, $7fff, CMF_NORMAL);
TrackPopupMenuEx(menu, TPM_LEFTBUTTON, 0, 0, Handle, nil);
DestroyMenu(menu);
end;
Run Code Online (Sandbox Code Playgroud)
但在改变连接状态后,我不断收到旧菜单.并重新启动我的应用程序后.有时重启我的应用程序后,我得到正确的菜单.
为什么会发生以及如何解决?
操作系统:32位和64位Windows 7/8/10
C++代码:
PIDLIST_ABSOLUTE pidl;
if SUCCEEDED(SHParseDisplayName(L"%USERPROFILE%\\Desktop\\eth0.lnk", NULL, &pidl, 0, NULL))
{
PCUITEMID_CHILD child;
CComQIPtr<IShellFolder> pFolder;
if SUCCEEDED(SHBindToParent(pidl, IID_IShellFolder, (void**)&pFolder, &child))
{
CComQIPtr<IContextMenu> pMenu;
if SUCCEEDED(pFolder->GetUIObjectOf(0, 1, &child, IID_IContextMenu, NULL, (void**)&pMenu))
{
HMENU menu …Run Code Online (Sandbox Code Playgroud) 我有一个监听jabber服务器并相应响应的脚本.虽然它不应该停止,但昨晚它确实如此.现在我想每分钟运行一个cron作业来检查脚本是否正在运行,如果没有则启动它.
问题是,如何检查特定脚本是否仍在运行?
在windows/cygwin上,我希望能够将PATH变量保存到一台机器上的文件中并将其加载到另一台机器上;
用于存储我正在做的变量:
echo %PATH% > dat
Run Code Online (Sandbox Code Playgroud)
但是,不确定以后如何加载它.
set PATH=???????
Run Code Online (Sandbox Code Playgroud)
谢谢拉米
我已经创建了一个应用程序,它为您提供计算机中的文件列表.每当您单击列表中的任何项目时,它旁边的小PictureBox都应显示相应文件的缩略图.我在Windows 7上使用C#.
为了获得缩略图,我再次发现了一个在不同问题中发布的方法.首先,我引用Windows API代码包.然后,我使用以下代码:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
Run Code Online (Sandbox Code Playgroud)
这并不总是有效.有时,显示的缩略图仅仅是"默认应用程序"图标.我发现只有Windows以前为该文件生成了缩略图并将其存储在缩略图缓存中才会显示真正的缩略图.这意味着我必须手动打开文件夹,等待Windows为每个文件生成缩略图,然后我的应用程序将能够看到那些拇指.
我的程序如何在使用它们之前强制Windows 7生成真正的缩略图?
更新(由Li0liQ提供)
可以通过添加FormatOption强制缩略图检索:
ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个例外,如果缩略图还没有:
当前的ShellObject没有有效的缩略图处理程序,或者在提取此特定shell对象的缩略图时出现问题.---> System.Runtime.InteropServices.COMException:类未注册(来自HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))
请参阅如何在Windows资源管理器中刷新文件的缩略图?潜在线索的问题和代码片段.
如果mkdir创建了一个新目录,那么会创建一个新文件?例如"something.text".
我尝试了几个命令mkdir(FileName) - 工作正常.但我不知道如何在目录中创建新文件.我知道我可以随时转到我的项目文件夹然后创建我的新文件,但我想知道如何使用终端来提高工作效率.
由于科迪灰色提到回答我的其他问题时,在这里,雷蒙德陈谈论覆盖图标怎么都一个糟糕的选择在这里(请注意,文章是一岁).
反叠加的实质性论点是,一次只能显示一个......所以,如果两个适用,哪一个获胜?一个似是而非的论点是,只有15个 - 我认为这是微软的设计选择,而不是反对其功效的论据.
随着文件拓扑的变化:
我相信文件和文件夹需要等效的状态指示器才能立即识别其状态.
什么是图标叠加的替代方法,它在文件/文件夹的状态上呈现相同的即时可视队列?也许需要一个新的图标模型?
编辑:
2010-12-14
我越是想到这一点,我就越觉得只有一个叠加层并且无法使叠加层一起工作的想法是荒谬的.
除非出于技术原因,否则您不能有多个叠加层?
考虑(在我的头顶):
当您在屏幕分辨率对话框中按下识别按钮时,Windows会在每个监视器上显示大的白色监视器编号.很容易在Windows XP(使用EnumDisplayDevices)中以编程方式与监视器坐标一起找到它们,但在Windows 7上它已经坏了.我怎样才能做到这一点?
有人知道吗?
我正在寻找一种方法将文件夹(包含子文件夹)放入具有以下条件的回收站:
它必须以静默方式完成 - 没有任何 Windows UI.
永远不能永久删除该文件夹.如果无法将其放入回收站,我希望API失败.
像CopyFileEx那样获取进程的回调例程.
到目前为止,我能够想出这个:
SHFILEOPSTRUCT sfo = {0};
sfo.wFunc = FO_DELETE;
sfo.pFrom = L"K:\\test del from USB\0"; //Folder on a USB stick
sfo.fFlags = FOF_ALLOWUNDO |
FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR |
FOF_WANTNUKEWARNING;
int res = SHFileOperation(&sfo);
BOOL bFullSuccess = res == 0 && !sfo.fAnyOperationsAborted;
Run Code Online (Sandbox Code Playgroud)
哪个位于USB闪存驱动器上的文件夹可怕失败,即尽管有标志,它仍被永久删除FOF_ALLOWUNDO.
所以我是不是做对了,或者SHFileOperation API是非常错误的!
知道如何做我上面概述的内容吗?
编辑:我实现了IRecycleBinManager::WillRecycle@Denis Anisimov建议的方法,但显然更多.这是我的C++版本.我需要的方法的第一个接口定义:
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5869092D-8AF9-4A6C-AE84-1F03BE2246CC")
IRecycleBinManager : public IUnknown
{
public: …Run Code Online (Sandbox Code Playgroud) 我从github gtfs_SQL_importer复制了以下代码:
cat gtfs_tables.sql \
<(python import_gtfs_to_sql.py path/to/gtfs/data/directory) \
gtfs_tables_makeindexes.sql \
vacuumer.sql \
| psql mydbname
Run Code Online (Sandbox Code Playgroud)
我试图在Windows上运行它,并用cat等效的windows 替换对UNIX命令的调用,type这应该与is-there-replacement-for-cat-on-windows类似.
但是,当我执行该代码时,我收到一些错误:
文件名,目录或文件系统的语法是错误的.
所以我试图将管道文件的数量限制为仅将对python的调用和对以下内容的调用结合起来psql:
type <(C:/python27/python path/to/py-script.py path/to/file-argument) | psql -U myUser -d myDataBase
Run Code Online (Sandbox Code Playgroud)
产生相同的错误.
但是,当我单独执行python脚本时,它按预期工作:
C:/python27/python path/to/py-script.py path/to/file-argument
Run Code Online (Sandbox Code Playgroud)
因此,我假设使用错误导致type将脚本的结果直接传递给psql.
有谁知道正确的语法?
编辑:为了确保问题与未找到的文件无关,我使用了命令中所有参数的绝对路径,除了type和psql-command(它们都通过%PATH%-variable 处理).
windows-shell ×10
windows ×4
winapi ×3
c# ×2
c++ ×2
batch-file ×1
command ×1
contextmenu ×1
cron ×1
cygwin ×1
delphi ×1
icons ×1
php ×1
pipeline ×1
python ×1
recycle-bin ×1
sharpshell ×1
shell ×1
shell-icons ×1
terminal ×1
thumbnails ×1
windows-7 ×1