我的代码背后有以下代码:
public partial class MainWindow
{
private Track _movieSkipSliderTrack;
private Slider sMovieSkipSlider = null;
private Label lbTimeTooltip = null;
private MediaElement Player = null;
public VideoPlayerViewModel ViewModel
{
get { return DataContext as VideoPlayerViewModel; }
}
public MainWindow()
{
InitializeComponent();
}
private void SMovieSkipSlider_OnLoaded(object sender, RoutedEventArgs e)
{
_movieSkipSliderTrack = (Track)sMovieSkipSlider.Template.FindName("PART_Track", sMovieSkipSlider);
_movieSkipSliderTrack.Thumb.DragDelta += Thumb_DragDelta;
_movieSkipSliderTrack.Thumb.MouseEnter += Thumb_MouseEnter;
}
private void Thumb_MouseEnter(object sender, MouseEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed && e.MouseDevice.Captured == null)
{
var args = new MouseButtonEventArgs(e.MouseDevice, …
Run Code Online (Sandbox Code Playgroud) 我正在为我的媒体播放器制作用户可更改的设置,而我正在努力找到解决问题的优雅方案.
例如,我的一个设置 - 暂停视频的最后一帧,如果没有选中,它将继续通过播放列表,或者只有1个文件,重置它并在开始时暂停.
这就是我实现它的方式:
private void OnMediaEndedCommand()
{
if (GeneralSettings.PauseOnLastFrame)
{
MediaPlayer.SetMediaState(MediaPlayerStates.Pause);
return;
}
if (PlayListViewModel.FilesCollection.Last().Equals(PlayListViewModel.FilesCollection.Current) && !Repeat)
{
ChangeMediaPlayerSource(PlayListViewModel.ChangeCurrent(() => PlayListViewModel.FilesCollection.MoveNext()));
MediaPlayer.SetMediaState(MediaPlayerStates.Stop);
return;
}
ChangeMediaPlayerSource(PlayListViewModel.ChangeCurrent(() => PlayListViewModel.FilesCollection.MoveNext()));
}
Run Code Online (Sandbox Code Playgroud)
它包含在主窗口的ViewModel中,其中media元素是GeneralSettings.PauseOnLastFrame
布尔属性.
此命令绑定如下:
<MediaElement ....>
<ia:Interaction.Triggers>
<ia:EventTrigger EventName="MediaEnded">
<ia:InvokeCommandAction Command="{Binding MediaEndedCommand}"/>
</ia:EventTrigger>
</ia:Interaction.Triggers>
</MediaElement>
Run Code Online (Sandbox Code Playgroud)
它有效,但很糟糕,我该如何以优雅的方式实现这样的设置系统呢?某些设置可能不是布尔值,它们可能有多个选项,有些可能仅在启动时应用,而其他设置如上图所示,基于事件.
我如何检测我无法控制的进程何时因某些通知而闪烁。我只见过专注于您可以控制的应用程序的解决方案。在我的情况下,可能有多个所述进程同时处于活动状态,其中一个可能正在闪烁。
这是我的尝试:
using (Process process = Process.GetProcesses().FirstOrDefault(p => p.ProcessName.ToLower() == "..."))
using (ProcessModule module = process.MainModule)
{
var a = GetModuleHandleEx(0x00000004, module.ModuleName, out var hModule);
var hHook = SetWindowsHookEx(HookType.WH_SHELL, (code, param, lParam) =>
{
//test
return IntPtr.Zero;
}, hModule, 0);
}
Run Code Online (Sandbox Code Playgroud)
其中DLL导入如下:
public enum HookType : int
{
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = …
Run Code Online (Sandbox Code Playgroud) 我有一个winforms应用程序,我需要获取用户的当前键盘布局.为此,我正在使用System.Windows.Forms.InputLanguage.CurrentInputLanguage.LayoutName
.
只要用户将表单作为其活动窗口,一旦他将其他内容聚焦并更改了前一个属性不会返回正确值的语言,它就会正常工作,当表单仍然是活动窗口时,它将返回最后使用的语言.
是否有一种方法可以获得用户键盘布局的名称,即使他没有关注表单,对可以使用的内容没有任何限制.