相关疑难解决方法(0)

隐藏窗口时如何获取 Process.MainWindowHandle

我有一个 WPF 应用程序。当它启动时,我需要检查是否已经有一个实例在运行。如果是这种情况,那么我会使用 PInvoke 来“显示”正在运行的实例:

SendNotifyMessage(proc.MainWindowHandle, ShowYourself, IntPtr.Zero, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

其中 proc 是另一个正在运行的实例

问题是,当proc隐藏在系统托盘中时。MainWindowHandle是 0。我做了很多搜索,但没有运气得到MainWindowHandle.

有人知道怎么做吗?

谢谢

c# wpf

5
推荐指数
1
解决办法
2164
查看次数

从应用程序运行一个实例

我有一个Windows应用程序(C#),我需要将其配置为当时从应用程序运行一个实例,这意味着一个用户单击.exe文件并运行应用程序并且用户没有关闭第一个实例正在运行的应用程序,需要运行下一个实例,因此它应该出现在第一个实例而不是打开新实例.

任何人都可以帮我怎么做?

提前致谢

c# semaphore

4
推荐指数
1
解决办法
7265
查看次数

在.net中创建单实例应用程序的最佳方法是什么?

可能重复:
创建单实例应用程序的正确方法是什么?
在.NET中防止给定应用程序的多个实例?

我是否检查是否存在另一个具有相同名称的进程?(如果用户没有这样的权限怎么办?)

将文件写入磁盘并在退出前将其删除?(异常终止怎么办?)

这样做的最佳做法是什么?

.net c# design-patterns

3
推荐指数
1
解决办法
1271
查看次数

当列表框为空时,如何在项目属性中选择“启动对象”?

我有一个 WPF 项目,我尝试使用 Dale Ragan在 StackOverflow 上描述的 Microsoft.VisualBasic dll 的配方使其成为单实例应用程序

在带有 Framework 4.5 的 Visual Studio 2013 中这样做会在编译时给我 2 倍的相同错误:“...为每个入口点定义了多个入口点...”。然后我认为我会在我的项目属性的“应用程序”选项卡的“启动对象”项的组合框选项中看到两个入口点。但它是空的。为什么“启动对象”comboBox 为空以及如何设置入口点?会不会是微软的bug?

附加信息: - 带有入口点的 2 个文件是“App.g.cs”(自动生成)和我新定义的带有入口点的类 - main :“EntryPoint.cs”

c# wpf startup entry-point project-properties

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

DDE:实现通过Shell和ddeexec正确启动的应用程序

我正在尝试实现一个应用程序,它将自己注册为DDE服务器,以便它正确响应我们的自定义".qsx"文件类型,就像WinWord响应".docx"文件类型一样.

  1. 如果应用程序已在运行并且有人双击".qsx"文件,那么我们希望已打开的应用程序接收DDE打开命令并打开相关文件.
  2. 但是,如果应用程序尚未运行,则shell应启动我们的应用程序,然后与应用程序建立DDE连接并告诉它像以前一样打开该文件.

我们有第1部分完美无缺地工作.

但是,对于第2部分,Shell启动命令,但随后失败并显示"将命令发送到程序时出现问题".这对应于从"ShellExecute"Windows API函数返回的返回码"SE_ERR_DDEFAIL"(29).

实际上,我编写了一个名为"ShellExecute.exe"的自定义控制台应用程序,它可以完全独立于explorer.exe重现此问题.

如果我运行ShellExecute.exe并且我们的"DDE服务器"应用程序已启动,则它可以正常运行.如果我为".docx"文档运行ShellExecute.exe并且WinWord未运行,则WinWord正确启动并加载文档如果我为".qsx"文档运行ShellExecute.exe并且我们的应用程序未运行,ShellExecuteEx将启动该应用程序但在我们的服务器应用程序甚至有机会注册为DDE服务器之前,立即返回SE_ERR_DDEFAIL.

出于某种原因,似乎对于WinWord,ShellExecute等待它启动.

我已经尝试运行procmon.exe运行这两个案例,看看ShellExecute可能在注册表中寻找的区分我们的案例和WinWord.exe,但我找不到任何东西.

我真正需要的是ShellExecute算法的源代码,这样我就可以找出它为WinWord工作的原因,而不是我们的自定义扩展.

任何人都可以详细解释ShellExecute在启动应用程序时所做的工作,特别是它知道如何"等待"应用程序注册为DDE服务器?

windows winapi dde

2
推荐指数
1
解决办法
4772
查看次数

Win 10 虚拟桌面

关于Win 10中虚拟桌面功能的问题很多,但答案并不令人满意。当我使用 UWP、c# 和 XAML 开发 Windows 10 应用程序时,我找不到使用此功能的方法。我想要实现的行为与典型的 Win 10 应用程序显示的行为相同,比方说:像 Edge。如果您在虚拟桌面 A 上打开 Edge,切换到桌面 B 并从那里启动 Edge,它会自动切换回桌面 A 并显示 Edge 窗口。如何做到这一点:VS 2015、UWP App、c#??

编辑:也许它与单实例应用程序有关。但我正在寻找的是以下问题的答案: - 有多少个虚拟桌面?- 我自己的应用程序在哪个虚拟桌面上?- 如何将我的应用程序移动到不同的虚拟桌面?

问候海科

.net c# windows-10

2
推荐指数
1
解决办法
1460
查看次数

一次只允许该方法执行一次

我认为这是相当简单的任务,但我真的找不到好的答案。我有一个类/方法,可以从不同的服务器下载文件,处理它们,并对数据库进行更改。问题是,它可以由管理员手动启动,我想防止该进程的多个实例同时运行。有什么简单的方法可以实现这一目标吗?

c# asp.net-core

2
推荐指数
1
解决办法
2134
查看次数

检查WPF应用程序的其他实例是否正在运行

WPF应用程序是否可以检查应用程序的任何其他实例是否正在运行?我正在创建一个应该只有一个实例的应用程序,当用户再次尝试打开它时,它会提示"另一个实例正在运行"的消息.

我猜我必须检查进程日志以匹配我的应用程序名称,但我不知道如何去做.

c# wpf instance single-instance

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

C#SetForegroundWindow不工作

我已经限制我的C#windows应用程序只允许一次运行一个实例,使用这个问题如何强制C#.net应用程序在Windows中只运行一个实例?

它运行良好,并且不允许同时运行多个应用程序实例.

问题是如果用户试图打开应用程序的第二个实例,我希望当前活动的实例能够出现在前面.

我工作的问题似乎解决了这个问题,但它对我不起作用.

我认为这是因为我的应用程序不符合允许该方法的标准:SetForegroundWindow 工作.

我的问题是,我怎样才能做到这一点.我的代码如下:

using System    ;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace RTRFIDListener_Client
{
    static class Program
    {
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool SetForegroundWindow(IntPtr hWnd);

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            bool createdNew = true;

            using (Mutex mutex = new Mutex(true, "RTRFIDListener_Client", out createdNew))
            {
                if (createdNew)
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new frm_Main());
                }
                else
                {
                    Process current …
Run Code Online (Sandbox Code Playgroud)

c#

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

一次启动应用程序C#

我只是在C#中创建一个应用程序,但我不喜欢它.我想让应用程序运行一次.现在,如果我的应用程序正在运行,当我再次运行应用程序时,将启动另一个应用程序.我想让应用程序只运行一次,如果你想再次运行应用程序,而不是创建另一个应用程序,而是启动正在运行的应用程序.

谢谢.

c# forms single-instance

-1
推荐指数
1
解决办法
3118
查看次数