小编Rob*_*t P的帖子

如何在C#中获取常见的文件类型图标?

正如在这个关于获取常见文件类型图标的问题中所看到的,Windows程序很可能使用C++ Shell API获取已注册文件类型的图标.这些图标可能存在于磁盘上,也可能不存在 - 例如,我们想要创建自己的自定义文件浏览器,并希望在文件中显示与系统相关的图标.

是否有本地C#方式获取各种文件类型的图标(如果是,如何)或必须通过带有shell API的PInvoke来完成?

作为后续工作,如果有一种原生的.NET方式,那么有没有跨平台的方式呢?

.net c# windows icons file-type

17
推荐指数
3
解决办法
3万
查看次数

如何在Windows中注册最近使用的列表以准备Windows 7?

随着即将发布的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

windows registry mru jump-list windows-7

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

向GAC注册/安装程序集的"正确"方法是什么?

似乎有很多不同的方法来向GAC注册程序集,就像它们"工作"一样.但是,做到这一点的"正确"方式是什么?

回应Lou Franco(和gacutil):

我正在使用Gacutil进行开发,但在我看来并不是安装它的正确方法,因为gacutil不包含在.NET 1.1之前的基本.NET实用程序中 - 它只是一个开发人员工具.

附加:Gacutil(如下面的回复中所示)不可再发行,因此不应在任何您打算提供给非开发人员的应用程序中使用.AKA,客户.请参阅此博客文章(和评论)作者:Aaron Stebner.

回应使用WIX:

WIX可能很棒而且全部,但它如何在引擎盖下工作?WIX以正确的方式安装组件的方式有哪些细节?怎么看起来呢?它是系统/ .NET调用吗?是否需要在System32中的某个地方隐藏一些需要进行的调用?

(编辑:看起来WIX使用了MSI.请在接受的答案中查看我的评论.)

最终编辑:将组件安装到GAC的正确方法似乎是使用Windows安装程序,而不是其他任何东西.我要试试Wix.谢谢大家!

.net windows installer gac

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

如何在没有NativeMethods的情况下找到hWnd窗口的位置/位置?

我目前正在与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)

.net c# winapi watin screenshot

14
推荐指数
3
解决办法
3万
查看次数

在Perl中使用特殊变量$ _和@_有什么区别?

请解释一下究竟差别$_@_在Perl.何时使用,由示例代码给出.

perl

14
推荐指数
2
解决办法
3万
查看次数

如何配置Msys的默认大小,颜色和字体?

我最近一直在探索使用MSys作为我的Windows开发的'类似nix的shell.但是,默认的颜色和大小让我发疯.任何人都知道如何更改默认大小,颜色和/或字体?老实说,如果我可以让shell的默认字符宽度/高度更大,我会很高兴,但其他人也会很好...

澄清:msys shell是一个独立于Windows shell的应用程序 - 正常的"右键单击 - 左上角 - >属性"配置(与windows shell一样)不存在.

看起来在它下面射击rxvt.谢谢!

console mingw msys

13
推荐指数
2
解决办法
2万
查看次数

我应该在Perl中使用autobox吗?

对于那些不了解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

13
推荐指数
3
解决办法
706
查看次数

如何在Perl中以编程方式发现Win32 :: OLE对象的属性和方法?

使用Perl,使用Win32::OLE库加载COM/OLE对象并控制它们非常容易.我遇到的问题是确切地知道我正在访问的对象中有哪些方法和属性可用.其他语言中的某些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成静态接口.Perl的Win32::OLE库中是否存在这样的工具?

com perl win32ole

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

什么是条件变量初始化的pythonic方式?

由于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_messageget_other_message函数可能是多行代码并且基本上是无关的(你可以假设每个路径之后程序的状态是相同的); 这里的目标是message在功能的这一部分之外准备好使用.

我已经看到后一种结构在其他问题中多次使用,例如:

哪种结构更容易接受?

python

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

是否有使Perl模块或技术更容易使用长命名空间?

一些名称空间很长且很烦人.可以说我下载了名为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)

perl namespaces

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