随着即将发布的Windows 7,新推出的功能之一是跳转列表,其中包含最近使用的项目的自动填充.据说,如果您使用Windows注册表"正确"记录这些最近使用的项目,它们将自动出现.
那么,在注册表中它们实际上需要注册吗?还有标准的地方吗?
我做了更多的研究,但我仍然找不到任何相关的东西.看起来像一个漂亮的功能,如果它实际可用...
更新:下面发布的代码项目有一些有趣的点; 看着代码,它计划将条目写入
HKEY_CURRENT_USER\Software\MyCompany\MyProgram\MRU Registry entry
Run Code Online (Sandbox Code Playgroud)
在注册表中.但是,这实际上并没有对Windows进行注册.该路径只是碰巧被存储在注册表中,而不是在为MRU列表中的任何特别的地方.
更新2:看起来可能有一些关于如何在Windows 7中使用由akaDruid发布的链接提供的链接的良好信息.在演讲中,他们讨论了通过COM接口配置跳转列表.我现在要看一下视频,看看它是否也适用于Windows 7以前的应用程序.(当然,如果有人知道更好,我很乐意听到......)
更新3:发现它!
下面的视频向我介绍了一个命令 - SHAddToRecentDocs.跳转列表会自动填充应用添加到该列表的文档.该视频也涉及其他一些内容,但AddToRecentDocuments是关键.因此,只要您调用该函数,就可以以任何方式存储/填充"最近使用的"列表.
更新4:进一步观察视频,看起来只要您的应用程序已将自身注册为文件类型的正确处理程序,shell将通过为您调用SHAddToRecentDocs为您填充自动跳转列表.太棒了...... 我的微软做了一些优雅而相对简单的事情 :)
更新5:
最近在Windows 7 for Developers博客上发现了一篇详细介绍该过程的文章.
http://blogs.msdn.com/yochay/archive/2009/01/06/windows-7-taskbar-part-1-the-basics.aspx
似乎有很多不同的方法来向GAC注册程序集,就像它们"工作"一样.但是,做到这一点的"正确"方式是什么?
回应Lou Franco(和gacutil):
我正在使用Gacutil进行开发,但在我看来并不是安装它的正确方法,因为gacutil不包含在.NET 1.1之前的基本.NET实用程序中 - 它只是一个开发人员工具.
附加:Gacutil(如下面的回复中所示)不可再发行,因此不应在任何您打算提供给非开发人员的应用程序中使用.AKA,客户.请参阅此博客文章(和评论)作者:Aaron Stebner.
回应使用WIX:
WIX可能很棒而且全部,但它如何在引擎盖下工作?WIX以正确的方式安装组件的方式有哪些细节?怎么看起来呢?它是系统/ .NET调用吗?是否需要在System32中的某个地方隐藏一些需要进行的调用?
(编辑:看起来WIX使用了MSI.请在接受的答案中查看我的评论.)
最终编辑:将组件安装到GAC的正确方法似乎是使用Windows安装程序,而不是其他任何东西.我要试试Wix.谢谢大家!
我目前正在与WatiN合作,并发现它是一个伟大的网页浏览自动化工具.但是,截至上一版本,它的屏幕捕获功能似乎缺乏.除了Charles Petzold的一些代码之外,我还提出了一个可行的解决方案,用于从屏幕捕获屏幕截图(独立生成类似于此StackOverflow问题的代码).不幸的是,缺少一个组件:实际窗口在哪里?
WatiN方便地为hWnd您提供浏览器,因此我们可以(使用此简化示例)设置为从屏幕复制图像,如下所示:
// browser is either an WatiN.Core.IE or a WatiN.Core.FireFox...
IntPtr hWnd = browser.hWnd;
string filename = "my_file.bmp";
using (Graphics browser = Graphics.FromHwnd(browser.hWnd) )
using (Bitmap screenshot = new Bitmap((int)browser.VisibleClipBounds.Width,
(int)browser.VisibleClipBounds.Height,
browser))
using (Graphics screenGraphics = Graphics.FromImage(screenshot))
{
int hWndX = 0; // Upper left of graphics? Nope,
int hWndY = 0; // this is upper left of the entire desktop!
screenGraphics.CopyFromScreen(hWndX, hWndY, 0, 0,
new Size((int)browser.VisibileClipBounds.Width, …Run Code Online (Sandbox Code Playgroud) 我最近一直在探索使用MSys作为我的Windows开发的'类似nix的shell.但是,默认的颜色和大小让我发疯.任何人都知道如何更改默认大小,颜色和/或字体?老实说,如果我可以让shell的默认字符宽度/高度更大,我会很高兴,但其他人也会很好...
澄清:msys shell是一个独立于Windows shell的应用程序 - 正常的"右键单击 - 左上角 - >属性"配置(与windows shell一样)不存在.
看起来在它下面射击rxvt.谢谢!
对于那些不了解Perl的人来说autobox,它是一个模块,它为您提供内置基元的方法,甚至可以覆盖它们.
# primitives
'a string'->toupper();
10->to(1); # returns [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
# Arrays, array refs
[qw(A B C D E)]->for_each( sub { ... } );
@array->length()
# Hashes, hash refs
{ key => 'value', key2 => 'value2' }->values()
%hash->keys()
# Even specify your own base class...
use autobox SCALAR => 'Foo';
Run Code Online (Sandbox Code Playgroud)
总体而言,内置类型的方法更像是对象,简化了一些任务,使其他任务变得更加明显.
然而...
该autobox文档说有性能损失,一些比简单地调用对象的方法,比标准的语法更加多. 然后,有一些关于它在evals中使用的警告(特别是字符串evals)在某些情况下可能会导致问题. 它看起来似乎没有标准的许多Perl发行版.
使用autobox真的值得吗?
使用Perl,使用Win32::OLE库加载COM/OLE对象并控制它们非常容易.我遇到的问题是确切地知道我正在访问的对象中有哪些方法和属性可用.其他语言中的某些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成静态接口.Perl的Win32::OLE库中是否存在这样的工具?
由于Python的作用域规则,之后在范围内初始化的所有变量都可用.由于条件不引入新范围,因此不一定需要其他语言的构造(例如在该条件之前初始化变量).例如,我们可能有:
def foo(optionalvar = None):
# some processing, resulting in...
message = get_message()
if optionalvar is not None:
# some other processing, resulting in...
message = get_other_message()
# ... rest of function that uses message
Run Code Online (Sandbox Code Playgroud)
或者,我们可以改为:
def foo(optionalvar = None):
if optionalvar is None:
# processing, resulting in...
message = get_message()
else:
# other processing, resulting in...
message = get_other_message()
# ... rest of function that uses message
Run Code Online (Sandbox Code Playgroud)
当然,get_message和get_other_message函数可能是多行代码并且基本上是无关的(你可以假设每个路径之后程序的状态是相同的); 这里的目标是message在功能的这一部分之外准备好使用.
我已经看到后一种结构在其他问题中多次使用,例如:
哪种结构更容易接受?
一些名称空间很长且很烦人.可以说我下载了名为FooFoo-BarBar-BazBaz.tar.gz的假设包,它有以下模块:
FooFoo::BarBar::BazBaz::Bill
FooFoo::BarBar::BazBaz::Bob
FooFoo::BarBar::BazBaz::Ben
FooFoo::BarBar::BazBaz::Bozo
FooFoo::BarBar::BazBaz::Brown
FooFoo::BarBar::BazBaz::Berkly
FooFoo::BarBar::BazBaz::Berkly::First
FooFoo::BarBar::BazBaz::Berkly::Second
Run Code Online (Sandbox Code Playgroud)
是否有一个我可以使用的模块或技术类似于C++'using'语句,即有没有办法可以做
using FooFoo::BarBar::BazBaz;
Run Code Online (Sandbox Code Playgroud)
然后我会这样做
my $obj = Brown->new();
ok $obj->isa('FooFoo::BarBar::BazBaz::Brown') ; # true
# or...
ok $obj->isa('Brown'); # also true
Run Code Online (Sandbox Code Playgroud)