Articles of winforms

使用C#应用程序的给定URL激活现有浏览器窗口(不触发重新加载)

从C#应用程序我想激活(brint到前面)已经在用户默认浏览器中打开的网站。 我想以浏览器不可知的方式做到这一点。 困难的部分(至less对我来说)是我不希望浏览器打开一个新的标签,浏览器不能重新加载页面,如果它已经打开。 我可以在默认浏览器中打开URI System.Diagnostics.Process.Start("http://foo.example"); 但确切的行为取决于用户的默认浏览器(IE6似乎重用当前最高的浏览器窗口,谷歌浏览器将始终打开一个新的标签等) 我尝试的另一种方法是枚举所有打开的Windows,并根据窗口标题find我想要的(假设大多数浏览器将窗口标题设置为当前打开的页面的标题) public delegate bool EnumThreadWindowsCallback(int hWnd, int lParam); [DllImport("user32.dll")] static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")] static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData); [DllImport("user32.dll")] static extern int GetWindowText(int hWnd, StringBuilder text, int count); private bool FindWindowByRx(int hWnd, int lParam) { Regex pattern = new Regex("Example Title of Page", RegexOptions.IgnoreCase); StringBuilder […]

Windows窗体inheritance

我想创build一堆表单,它们都具有相同的属性,并通过分配构造函数的参数来初始化窗体构造函数中的属性。 我尝试创build一个从窗体inheritance的类,然后从所有类inheritance我的窗体,但是我想因为我无法调用InitializeComponent(),所以我遇到了一些问题。 什么是一些C#代码如何做到这一点?

Process.GetCurrentProcess()。MainWindowHandle返回零

我试图获得我的C#应用​​程序的主窗体(应用程序只有一个窗体)的窗口句柄(HWND)。 互联网上的一些解决scheme显示我可以使用: Process.GetCurrentProcess().MainWindowHandle 获取我的应用程序当前进程的窗口句柄。 但是这个值总是零,有什么不对?

当完整pathparsing为64位目录时,无法从32位C#应用程序启动快捷方式(lnk)文件

我试图从C#应用程序启动开始菜单中的程序,几乎开始菜单中的所有项目都是快捷方式(lnk)文件。 当使用Process.Start启动这些文件时,我发现如果lnk文件的完整path指向C:\ Program Files目录,我得到“系统找不到指定的path”错误。 我在Windows中使用文件系统redirect进行了一些研究,所以我尝试禁用它,但我仍然得到相同的错误: // disable file system redirection: IntPtr ptr = new IntPtr(); bool isWow64FsRedirectionDisabled = Wow64DisableWow64FsRedirection(ref ptr); // run the file: System.Diagnostics.Process.Start("c:\\splitter.lnk"); 这将返回“系统找不到指定的path”。 但是,如果从“开始”>“运行”对话框启动c:\ splitter.lnk,程序运行得很好。 您可以在任何64位计算机上重现此问题,方法是为任何64位应用程序创build快捷方式,将其放在C驱动器上,然后尝试使用上面的代码运行它。 有没有更好的方法来启动.lnk文件来避免这个问题? 还是我没有正确禁用文件redirect? 编辑:我也尝试设置UseShellExecute为true让操作系统运行该文件,但仍然失败,这是有趣的,因为从开始>运行对话框运行相同的path工作得很好: Process process = new Process(); process.StartInfo.UseShellExecute = true; process.StartInfo.FileName = "c:\\splitter.lnk"; process.Start(); 编辑2:我想,而不是试图直接启动LNK文件,我会得到它的目标,然后运行目标。 我试图使用如何解决C#中的.lnk和如何以编程方式跟随.lnk文件 ,但这两种方法返回完整path为C:\ Program Files文件(x86)\ Splitter.exe而不是C:\的实际path。 Program Files \ Splitter.exe。 也许我可以使用上面的方法之一来获得LNK文件的目标。 […]

Windows服务与Windows应用程序 – 最佳实践

什么时候应该去Windows服务,什么时候应该去通知区域运行的“后台应用程序”? 如果我没有错,我的devise决定是,在用户login到计算机之前需要运行的任何应用程序都应该是一个服务。 对于一切使用后台应用程序。 我的决定是对的吗? 此外,如果我需要“pipe理员权限”为我的后台应用程序,我会升级使用清单。 作为服务运行有没有其他的具体优势?

呼叫被被叫方拒绝

我的应用程序在我的win 7 64位机器上工作正常。 我试图在不同的win 7 64位机器上运行winforms visual studio 2008 .NET C#应用程序,现在我得到这个错误: See the end of this message for details on invoking just-in-time (JIT) debugging instead of this dialog box. ************** Exception Text ************** System.Runtime.InteropServices.COMException (0x80010001): Call was rejected by callee. (Exception from HRESULT: 0x80010001 (RPC_E_CALL_REJECTED)) at Microsoft.Office.Interop.Excel.WorkbookClass.get_Worksheets() at EmailSalesVolumeSolution.WorkBook.OpenWorkBook() in C:\Users\agordon\Documents\Visual Studio 2008\Projects\SubversionRepository\Internal Application\EmailSalesVolumeSolution\EmailSalesVolumeSolution\WorkBook.cs:line 40 […]

WinForms应用程序的最佳方式是确定它正在运行哪个Windows操作系统?

我有一个WinForms应用程序需要以特定的方式运行(特别是对某个安装程序的shell),基于它运行的操作系统。 我正在使用System.OperatingSystem类,并结合了PlatFormID,Major,Minor和Build数字,这些数字可以帮助您实现这一目标。 不幸的是,一个OperatinSystem对象的合法性,不允许你在一些平台之间进行精确的区分。 如Vista和Windows Server 2008,或Vista 32位和Vista 64位。 同样,XP 64位专业版似乎与Server 2003具有相同的版本信息。 那么是否可以从WinForms应用程序(使用c#)确切地确定您正在运行哪个Windows操作系统?

保持窗口前景(即使失去焦点)

在我的应用程序(C#,Windows窗体)中,我有一个电话信息屏幕:如果有一个来电,显示一个窗口,给调用者提供附加信息。 这个窗口应该在前台打开,即使用户正在另一个窗口中写入(所以用户仍然看到有关来电的信息),应该停留在那里。 首先,我已经使用了BringToFront – 但是在任何情况下(例如,当主应用程序不在前台时),这并不起作用。 现在我正在使用BringToFront和user32.dll函数BringWindowToTop – >这是可行的,但如果窗口失去焦点,它在后台。 我如何实现这种行为?

检测进程已经在使用C#.net的窗口中运行

如何检测一个进程是否已经在Windows任务pipe理器下运行? 我想获得内存和CPU使用率以及。

在c#winforms应用程序中显示窗口(文件/目录)上下文菜单

我试图在WinForms应用程序中显示标准的文件/目录上下文菜单 – 我想使用户能够像在Explorer中一样对我的应用程序中的文件进行操作。 应该有两个选项 用一些系统调用popup上下文菜单 从系统上下文菜单中读取所有内容并将其插入到我的上下文菜单中 你能指点我正确的方向吗? 谢谢