Articles of .net

如何“停靠”/附加winformsforms

我想在同一个应用程序中附加两个窗体,就像一些音乐播放器,比如winamp,在窗户可以拆开或者连接在一起,然后移动一个窗口到另一个窗口太! 描述这种行为可能有更好的术语 任何模式或代码样本,这样做?

如何修改正在使用的DLL?

如果我有同一个进程的多个实例访问某个DLL,有没有办法让这些进程之一获得它的锁,删除它,replace它,并继续?

正确的方法来激活我的MainForm从一个NotifyIcon,如果它没有集中已经

我只想用托盘通知图标replace我的winforms应用程序的任务栏button。 这意味着,如果用户左键单击该图标,则表单应该被激活,否则将被最小化或隐藏。 我阅读了很多关于正确使用NotifyIcon的文章,似乎我不得不接受一个黑客解决scheme。 那么,最合适的方法是什么? 我主要是为了运行,但现在我被困在检测,如果我的表单已被激活 – 因为当单击图标,表单失去焦点,所以我不能检查Focused属性。 下面的代码还没有解决这个问题,所以如果窗体只是被其他窗口隐藏,你必须点击2次,因为第一次点击最小化。 如何改进? private void FormMain_Resize(object sender, EventArgs e) { if (WindowState == FormWindowState.Minimized) Hide(); } private void notifyIcon_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) if (WindowState == FormWindowState.Minimized) { WindowState = FormWindowState.Normal; Show(); Activate(); } else { Hide(); WindowState = FormWindowState.Minimized; } } (我也不明白为什么Click事件触发右键单击,这已经打开我的情况下的上下文菜单…) (当然,最好有一个适当的最小化animation,但这里还有其他的问题,这个问题没有真正解决) (我知道我说的Focused […]

通过C#确定本地组的成员

我想知道是否有人知道如何通过C#以编程方式获得远程服务器上本地组的成员资格。 这是否需要pipe理员权限? 如果有,是否有任何方法来确认当前login的用户的成员(或不)这些组?

为我的应用程序创build属性处理程序,以将自定义属性添加到文件格式

我想为我的应用程序文件types添加自定义属性,就像Microsoft Word文件tyep .docx在Vista和窗口7中的详细信息窗格上的属性,显示作者属性等尝试为我的应用程序做同样的事情,但还没有线索。 在.net2.0中工作。我不知道我在做什么错, using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.InteropServices.ComTypes; using Microsoft.Win32; namespace TestShell { [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("b7d14566-0509-4cce-a71f-0a554233bd9b")] interface IInitializeWithFile { [PreserveSig] int Initialize([MarshalAs(UnmanagedType.LPWStr)] string pszFilePath, uint grfMode); } [StructLayout(LayoutKind.Sequential)] public struct PROPERTYKEY { public Guid fmtid; public UIntPtr pid; } [ComImport] [Guid("c8e2d566-186e-4d49-bf41-6909ead56acc")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface IPropertyStoreCapabilities { […]

什么USB设备(友好名称)当前连接到PC?

我可以得到目前连接到电脑的设备清单吗? 我检查了这个和这个线程,但我似乎无法find实际的名称(即iPod Touch 4等)有没有一种方法来find设备的名称在人类的语言,所以我可以显示这个列表(匹配设备)给用户? 任何得到这个信息的PI? 更新:我注意到,计算机的设备pipe理能够显示这个信息,这意味着它存在的地方,我只是不知道正确的地方访问它。 我在registry中find了这个信息,但是“Mighty Drive”和“iPod”之间有一些不一致的地方,我正在寻找一个可靠的registry。 寻找这个信息的关键。

什么是实施托pipe属性处理程序shell扩展的正确方法?

现在,.NET CLR 4.0支持并行(SxS)操作,现在应该可以在托pipe代码中编写shell扩展了。 我已经尝试过,并成功地编写了一个Property Handler,它实现了IPropertyStore,IInitializeWithStream和IPropertyStoreCapabilities。 处理程序工作正常,并通过浏览器浏览文件时按预期调用。 在显示预览面板和文件属性“详细信息”面板中的自定义属性时,它也可以正常工作。 但是,当我尝试在预览面板中编辑属性,然后单击“保存”时,出现“文件正在使用”错误,说该文件在Windows资源pipe理器中打开。 一些花絮: 当资源pipe理器调用IInitializeWithStream.Initialize时,STGM属性被设置为STGM_SHARE_DENY_WRITE。 而资源pipe理器在任何时候都不会调用IPropertyStore.SetValue或IPropertyStore.Commit。 我看到在不同的线程对我的处理程序重复调用相同的文件属性。 那么,我需要改变(或在registry中设置)以使财产保存工作? 更新: 感谢本,我有它的工作。 “困难的部分”(至less对我来说)是理解COM互操作将永远不会调用我的PropertyHandler上的Dispose或Finalize。 这是我打开的文件,直到GC运行。 幸运的是,“属性处理程序协议”的工作原理是当为ReadValue()调用IInitializeWithSream.Initialize()时,streamMode是ReadOnly,当调用SetValue()时,streamMode将被调用ReadWrite和Commit()最后。 int IInitializeWithStream.Initialize( IStream stream, uint grfMode ) { _stream = stream; _streamMode = (Stgm)grfMode; Load(); // We release here cause if this is a read operation we won't get called back, // and our finializer isn't called. […]

在Windows窗体中注册MouseEnter / MouseLeave事件禁用控件?

我想为禁用的button注册MouseEnter / MouseLeave事件。 它不工作allthough它启用button的工作.. //Enable Disable controls on form load EnableDisableControls("Load"); var grupButtons = control.Controls.OfType<Button>(); foreach (Button btns in grupButtons) { //btns.MouseMove += new MouseEventHandler(MainframeDataExchangeTool_MouseMove); btns.MouseEnter += new EventHandler(btns_MouseEnter); btns.MouseLeave += new EventHandler(btns_MouseLeave); } private void btns_MouseEnter(object sender, EventArgs e) { } private void btns_MouseLeave(object sender, EventArgs e) { var parent = sender as Control; […]

用WMI调用解决“拒绝访问”exception

对于WMI请求执行时,出现“拒绝访问”消息的exception。 某些WMI请求似乎要求比其他更高的安全权限。 最终我的目标是监视系统和日志中的进程启动。 不pipe有没有更好的方法,它现在成为了让这个WMI方法起作用的牺牲品。 我已经尝试过使用C#.Net进行安全工具 – > WMI编程的代码,但仍然收到exception。 如果您复制在博客条目中find的代码,您可以重现我的问题。 关于类似主题的另一篇文章可以在链接文本中find,但是再次尝试一下代码,你会看到相同的安全exception。 我如何允许我的代码执行这些WMI请求? 我在一个新的C#命令行项目中运行Windows 7 Pro和VS 2010。 编辑:select“以pipe理员身份运行”VS2010实例,然后执行代码工程。 如何自动执行此操作,以便用户不必手动提升权限?

如何访问Windows中的特殊目录?

什么是C#语法来检索Windows上的用户的桌面,文档文件夹和其他系统文件夹?