我正在尝试制作一个小程序,这样我就可以保持我的vlc播放器始终处于最佳状态,以便我可以在我的某些屏幕上观看电影,同时做其他事情。
我在另一个人身上发现了this code。我的代码看起来像这样
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System;
using System.Diagnostics;
using System.Windows.Shapes;
using System.Runtime.InteropServices;
namespace WpfApplication1
{
public class ProcessManager
{
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, uint windowStyle);
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);
public ProcessManager()
{
string processName = "vlc";
//SearchProcessAndModifyState(processName);
}
public void SearchProcessAndModifyState(string targetProcessName)
{
Process specifiedProcess = null;
Process[] processes = Process.GetProcesses();
for (int i = 0; i < processes.Length; i++)
{
Process process = processes[i];
if (process.ProcessName == targetProcessName)
{
specifiedProcess = process;
break;
}
}
if (specifiedProcess != null)
{
ProcessManager.ShowWindow(specifiedProcess.MainWindowHandle, 1u);
ProcessManager.SetWindowPos(specifiedProcess.MainWindowHandle, new IntPtr(-1), 0, 0, 0, 0, 3u);
}
}
}
}
现在,当我运行此程序时,vlc窗口将显示,但它不会保持在最顶层。所以我猜ShowWindow工作,但SetWindowPos没有。我通过File创建了项目 - &gt;新 - &gt;项目...... - &gt; Visual C# - &gt; Windows - &gt; Visual Studio 2013中的WPF应用程序,我使用的是Windows 8.1。有人知道吗?
答案 0 :(得分:1)
我有完全相同的问题。我通过在调用SetWindowPos之前插入以下内容来解决它:
const int GWL_EXSTYLE = -20;
const int WS_EX_TOPMOST = 8;
var extStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE).ToInt64();
extStyle |= WS_EX_TOPMOST;
SetWindowLongPtr(hWnd, GWL_EXSTYLE, new IntPtr(extStyle));
(GetWindowLongPtr和SetWindowLongPtr都可以在pinvoke.net上查找 - 从我的手机内存发布或者会给出一个更全面的答案!)