小编Ren*_*ers的帖子

C#从任务栏隐藏应用程序

我一直在努力从应用程序中隐藏任务栏中的另一个应用程序.
我一直在使用SetWindowLong函数来设置/删除扩展样式上的WS_EX_APPWINDOW .

我已尝试单独设置和删除属性以及获取当前WindowLong,并删除/添加到该属性,如下所示:

SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & WS_EX_APPWINDOW);
Run Code Online (Sandbox Code Playgroud)

并尝试删除它:

SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & ~WS_EX_APPWINDOW);
Run Code Online (Sandbox Code Playgroud)

在没有先让窗口长的情况下也尝试了这两种方法.这是我的整个代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    [DllImport("User32.dll")]
    public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
    [DllImport("User32.dll")]
    public static extern int GetWindowLong(IntPtr hWnd, int nIndex);

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    private const int SW_HIDE = 0x00;
    private const int SW_SHOW = 0x05;

    private const int WS_EX_APPWINDOW = 0x40000;
    private const …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke spy++

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

SetProcessDpiAwareness没有效果

我一直在尝试在ClickOnce应用程序上禁用DPI感知.
我很快发现,无法在清单中指定它,因为ClickOnce不支持清单文件中的asm.v3.

我找到的下一个选项是调用新的Windows函数SetProcessDpiAwareness.

根据教程,

在创建应用程序窗口之前调用SetProcessDpiAwareness.

教程中,

您必须在任何Win32API调用之前调用SetProcessDpiAwareness

你必须尽早调用这个函数.所以,为了测试,我创建了一个完全空白的WPF应用程序,并将其作为我的整个App类:

[DllImport("SHCore.dll", SetLastError = true)]
private static extern bool SetProcessDpiAwareness(PROCESS_DPI_AWARENESS awareness);

[DllImport("SHCore.dll", SetLastError = true)]
private static extern void GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS awareness);

private enum PROCESS_DPI_AWARENESS
{
    Process_DPI_Unaware = 0,
    Process_System_DPI_Aware = 1,
    Process_Per_Monitor_DPI_Aware = 2
}

static App()
{
    var result = SetProcessDpiAwareness(PROCESS_DPI_AWARENESS.Process_DPI_Unaware);
    var setDpiError = Marshal.GetLastWin32Error();
    MessageBox.Show("Dpi set: " + result.ToString());

    PROCESS_DPI_AWARENESS awareness;
    GetProcessDpiAwareness(Process.GetCurrentProcess().Handle, out awareness);
    var getDpiError = Marshal.GetLastWin32Error();
    MessageBox.Show(awareness.ToString());

    MessageBox.Show("Set DPI error: …
Run Code Online (Sandbox Code Playgroud)

c# wpf clickonce pinvoke dpi

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

ASP.NET 5依赖注入 - [FromServices]属性是否仅在控制器中工作?

使用asp.net 5 beta-8,我有这样的东西注册为服务:

services.AddTransient<IMyClass, MyClass>();
Run Code Online (Sandbox Code Playgroud)

当我在控制器中的属性上使用此属性时,myClass将设置为该实例IMyClass.

public class HomeController : Controller
{
    [FromServices]
    public IMyClass myClass { get; set; }

    public IActionResult Index()
    {
        //myClass is good
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在不继承的类中使用它时Controller,它似乎没有将myClass属性设置为以下实例IMyClass:

public class MyService
{
    [FromServices]
    public IMyClass myClass { get; set; }

    public void DoSomething(){
      //myClass is null
    }
}
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?如何在常规类中注入依赖项?

dependency-injection asp.net-core-mvc asp.net-core

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

.NET创建新的调度程序

我正在尝试使用调度程序创建第二个线程,以便我可以让主要调度程序(对于UI)完全没有压力,并且让UI不断响应.

现在,我可以为每个sub(或C#中的void)创建多个线程,但是我不可能创建一个新线程并抓住它的调度程序,并调用它吗?这就是我所做的:

Private CheckLoopThread As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf CheckLoop))

CheckLoopThread.Priority = System.Threading.ThreadPriority.Lowest
CheckLoopThread.Start()
Dim Test As Windows.Threading.Dispatcher = Windows.Threading.Dispatcher.FromThread(CheckLoopThread)
Run Code Online (Sandbox Code Playgroud)

但是,变量"Test"在执行"Nothing"之后.这怎么可能?是另一种创建第二个调度程序的方法吗?

答案在任何.NET表单中都很受欢迎.Visual Basic或C#.我在.NET 4.0框架上使用VB.NET WPF.

提前致谢.

vb.net multithreading dispatcher

6
推荐指数
3
解决办法
6804
查看次数

PHP filesize()On Files> 2 GB

我一直在讨论如何在PHP中获取> = 2 GB的文件的有效文件大小.

示例
这里我使用filesize()函数检查大小为3,827,394,560字节的文件的文件大小:

echo "The file is " . filesize('C:\MyFile.rar') . " bytes.";
Run Code Online (Sandbox Code Playgroud)

结果
这是它返回的内容:

该文件是-467572736字节.

背景
PHP使用有符号整数,这意味着它可以表示的最大数量是2,147,483,647(+/- 2 GB).
这是有限的地方.

php signed filesize

5
推荐指数
2
解决办法
8705
查看次数

Blazor 作用域 CSS 未在 Azure Pipelines 上构建

我正在开发一个使用作用域 CSS 的 Blazor 应用程序,但是当我尝试使用 Azure Pipelines 构建它时,不会生成作用域 CSS 文件。我在一台可以通过 RDP 访问的本地计算机上构建,并且我发现该wwwroot/{assemblyname}.styles.css文件在运行后完全丢失dotnet publish

当我在同一台计算机上运行 Azure Pipelines 手动显示的确切命令时,它就存在并且工作得很好。

任务azure-pipelines.yml

- task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '5.x'
...
- task: DotNetCoreCLI@2
  condition: succeeded()
  displayName: Publish my.project.blazor
  inputs:
    command: 'publish'
    publishWebProjects: false
    projects: 'src\my.project.blazor\my.project.blazor.csproj'
    arguments: '/p:Version=$(MainVersion).$(Patch) -o $(PublishFolder) -c Release -v d'
    zipAfterPublish: false
    modifyOutputPath: false
Run Code Online (Sandbox Code Playgroud)

管道构建开始:

Starting: Publish my.project.blazor
==============================================================================
Task         : .NET Core
Description  : Build, test, package, or publish a dotnet application, or run …
Run Code Online (Sandbox Code Playgroud)

css msbuild azure-pipelines blazor

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

来自Process.MainWindowHandle的C#HwndSource

我试图"挂钩"窗口的消息以检测最小化/最大化.我环顾四周,并认为这样做的唯一/最佳解决方案是挂钩窗口的消息,并检查WM_WINDOWPOSCHANGED消息,然后检查它的状态.

我遇到了一个问题.

System.Windows.Interop.HwndSource source = System.Windows.Interop.HwndSource.FromHwnd(System.Diagnostics.Process.GetProcessesByName("notepad")[0].MainWindowHandle);
System.Windows.Interop.HwndSourceHook hook = new System.Windows.Interop.HwndSourceHook(WndProc);
source.AddHook(hook);
Run Code Online (Sandbox Code Playgroud)

它会给我一个"对象引用不设置为对象的实例"."source.AddHook ..."上的错误.在断点时,也清楚源变量为空.换句话说:它无法在第一行获得HwndSource.

我知道可以使用"WindowInteropHelper",但是当你将实际窗口作为Windows.Window可用时,但在我的情况下,我没有.


RenéSackers 非常感谢任何解决方法/解决方案

PS我在执行代码时100%确定记事本是否正在运行,它设法找到它,它是主窗口句柄.

c# interop hwnd messages

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