Skip to content

Commit 78ec2a9

Browse files
committed
* 开始和结束录制支持快捷键;
1 parent 84ec8c8 commit 78ec2a9

6 files changed

Lines changed: 129 additions & 27 deletions

File tree

src/Mouser/MainWindow.xaml

Lines changed: 73 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,86 @@
66
xmlns:local="clr-namespace:Mouser"
77
mc:Ignorable="d"
88
Topmost="True"
9-
Title="Mouser" Height="120" Width="400">
9+
ResizeMode="NoResize"
10+
Title="Mouser"
11+
Height="220"
12+
Width="450">
1013
<Grid x:Name="LayoutRoot">
11-
<Grid.ColumnDefinitions>
12-
<ColumnDefinition Width="1*"/>
13-
<ColumnDefinition Width="1*"/>
14-
<ColumnDefinition Width="1*"/>
15-
<ColumnDefinition Width="1*"/>
16-
<ColumnDefinition Width="1*"/>
17-
</Grid.ColumnDefinitions>
1814
<Grid.RowDefinitions>
19-
<RowDefinition/>
20-
<RowDefinition/>
15+
<RowDefinition Height="Auto"/>
16+
<RowDefinition Height="Auto"/>
17+
<RowDefinition Height="Auto"/>
18+
<RowDefinition Height="Auto"/>
2119
<RowDefinition/>
2220
</Grid.RowDefinitions>
21+
<Grid.Resources>
22+
<Style TargetType="Button">
23+
<Setter Property="Margin" Value="2"/>
24+
<Setter Property="FontSize" Value="16"/>
25+
<Setter Property="BorderThickness" Value="0.5"/>
26+
<!--<Setter Property="BorderBrush" Value="CornflowerBlue"/>-->
27+
<!--<Setter Property="Background" Value="#FFF5F5FF"/>-->
28+
<Style.Triggers>
29+
<Trigger Property="IsMouseOver" Value="True">
30+
<Setter Property="Foreground" Value="CornflowerBlue"/>
31+
<Setter Property="BorderBrush" Value="CornflowerBlue"/>
32+
<Setter Property="Background" Value="Transparent"/>
33+
</Trigger>
34+
</Style.Triggers>
35+
</Style>
36+
</Grid.Resources>
2337

24-
<ProgressBar x:Name="ProgressBar" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5" BorderThickness="0"/>
38+
<ProgressBar x:Name="ProgressBar" Grid.Row="0" Grid.Column="0" BorderThickness="0" Height="5" Background="Transparent"/>
2539

26-
<TextBlock Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="5" VerticalAlignment="Center"
27-
FontSize="20"
28-
Text="Alt+F12结束播放"/>
40+
<Grid Grid.Row="1">
41+
<Grid.ColumnDefinitions>
42+
<ColumnDefinition Width="Auto"/>
43+
<ColumnDefinition Width="Auto"/>
44+
<ColumnDefinition/>
45+
</Grid.ColumnDefinitions>
46+
47+
<Button Grid.Column="0"
48+
BorderThickness="0"
49+
Margin="10"
50+
Padding="10"
51+
Cursor="Hand"
52+
Click="BtnToolSpeed_OnClick"
53+
Background="Transparent"
54+
HorizontalAlignment="Left">
55+
<Image Source="Resources/toolspeed.png" Stretch="Uniform" Width="32" Height="32"/>
56+
</Button>
57+
<Button Grid.Column="1"
58+
BorderThickness="0"
59+
Margin="10"
60+
Padding="10"
61+
Cursor="Hand"
62+
Click="BtnGithub_OnClick"
63+
Background="Transparent"
64+
HorizontalAlignment="Left">
65+
<Image Source="Resources/github.png" Height="32" Width="32"/>
66+
</Button>
67+
<TextBlock Grid.Column="2"
68+
VerticalAlignment="Center"
69+
FontSize="20"
70+
Margin="10"
71+
Text="Alt + F12 结束播放"/>
72+
</Grid>
2973

30-
<Button x:Name="BtnStart" BorderThickness="0" Grid.Column="0" Grid.Row="1" Content="Start" Click="BtnStart_OnClick"/>
31-
<Button x:Name="BtnEnd" BorderThickness="0" Grid.Column="1" Grid.Row="1" Content="End" Click="BtnEnd_OnClick"/>
32-
<Button x:Name="BtnPlay" BorderThickness="0" Grid.Column="2" Grid.Row="1" Content="Play" Click="BtnPlay_OnClick"/>
33-
<Button x:Name="BtnSave" BorderThickness="0" Grid.Column="3" Grid.Row="1" Content="Save" Click="BtnSave_OnClick"/>
34-
<Button x:Name="BtnLoad" BorderThickness="0" Grid.Column="4" Grid.Row="1" Content="Load" Click="BtnLoad_OnClick"/>
74+
<TextBlock x:Name="TbkInfo" Grid.Row="3" Grid.Column="0" Margin="10,0"/>
3575

36-
<TextBlock x:Name="TbkInfo" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="4"/>
76+
<Grid Grid.Row="4" Grid.Column="0" Margin="2,10,2,2">
77+
<Grid.ColumnDefinitions>
78+
<ColumnDefinition Width="3*"/>
79+
<ColumnDefinition Width="3*"/>
80+
<ColumnDefinition Width="2*"/>
81+
<ColumnDefinition Width="2*"/>
82+
<ColumnDefinition Width="2*"/>
83+
</Grid.ColumnDefinitions>
84+
<Button x:Name="BtnStart" Grid.Column="0" Content="录制 &#x000D; Alt + F9" Click="BtnStart_OnClick" TextBlock.TextAlignment="Center"/>
85+
<Button x:Name="BtnEnd" Grid.Column="1" Content="停止 &#x000D; Alt + F10" Click="BtnEnd_OnClick" TextBlock.TextAlignment="Center"/>
86+
<Button x:Name="BtnPlay" Grid.Column="2" Content="播放" Click="BtnPlay_OnClick"/>
87+
<Button x:Name="BtnSave" Grid.Column="3" Content="保存" Click="BtnSave_OnClick"/>
88+
<Button x:Name="BtnLoad" Grid.Column="4" Content="加载" Click="BtnLoad_OnClick"/>
89+
</Grid>
3790
</Grid>
3891
</Window>

src/Mouser/MainWindow.xaml.cs

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@ protected override void OnSourceInitialized(EventArgs e)
6262
base.OnSourceInitialized(e);
6363

6464
var handle = new WindowInteropHelper(this).Handle;
65+
HotKeyManager.RegisterHotKey(handle, HotKeyManager.WM_HOTKEY_RECORD_START, HotKeyManager.MOD_ALT, HotKeyManager.VK_F9);
66+
HotKeyManager.RegisterHotKey(handle, HotKeyManager.WM_HOTKEY_RECORD_STOP, HotKeyManager.MOD_ALT, HotKeyManager.VK_F10);
6567
HotKeyManager.RegisterHotKey(handle, HotKeyManager.WM_HOTKEY_START, HotKeyManager.MOD_ALT, HotKeyManager.VK_F11);
6668
HotKeyManager.RegisterHotKey(handle, HotKeyManager.WM_HOTKEY_STOP, HotKeyManager.MOD_ALT, HotKeyManager.VK_F12);
67-
69+
6870
// HwndSource source = HwndSource.FromHwnd(handle);
6971
HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
7072
source?.AddHook(WndProc);
@@ -78,6 +80,12 @@ private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref b
7880
{
7981
switch (wParam.ToInt32())
8082
{
83+
case HotKeyManager.WM_HOTKEY_RECORD_START:
84+
StartRecoding();
85+
break;
86+
case HotKeyManager.WM_HOTKEY_RECORD_STOP:
87+
StopRecoding();
88+
break;
8189
case HotKeyManager.WM_HOTKEY_START:
8290

8391
break;
@@ -101,16 +109,34 @@ private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref b
101109

102110
private void BtnStart_OnClick(object sender, RoutedEventArgs e)
103111
{
104-
_currentRecord = new Record()
112+
StartRecoding();
113+
}
114+
115+
private void StartRecoding()
116+
{
117+
Dispatcher.Invoke(() =>
105118
{
106-
BeginTime = _last = DateTime.Now,
107-
};
108-
_mouseHook.Start();
119+
_currentRecord = new Record()
120+
{
121+
BeginTime = _last = DateTime.Now,
122+
};
123+
_mouseHook.Start();
124+
ProgressBar.IsIndeterminate = true;
125+
});
109126
}
110127

111128
private void BtnEnd_OnClick(object sender, RoutedEventArgs e)
112129
{
113-
_mouseHook.Stop();
130+
StopRecoding();
131+
}
132+
133+
private void StopRecoding()
134+
{
135+
Dispatcher.Invoke(() =>
136+
{
137+
_mouseHook.Stop();
138+
ProgressBar.IsIndeterminate = false;
139+
});
114140
}
115141

116142
private void OnMouseActivity(object sender, MouseEventArgs args)
@@ -265,5 +291,21 @@ private void BtnLoad_OnClick(object sender, RoutedEventArgs e)
265291
}
266292

267293
#endregion
294+
295+
296+
297+
#region 超链接
298+
299+
private void BtnGithub_OnClick(object sender, RoutedEventArgs e)
300+
{
301+
Process.Start("https://github.com/liwuqingxin/MouseRec");
302+
}
303+
304+
private void BtnToolSpeed_OnClick(object sender, RoutedEventArgs e)
305+
{
306+
Process.Start("https://www.devtools.nlnet.net");
307+
}
308+
309+
#endregion
268310
}
269311
}

src/Mouser/Mouser.csproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,11 @@
134134
<ItemGroup>
135135
<None Include="App.config" />
136136
</ItemGroup>
137-
<ItemGroup />
137+
<ItemGroup>
138+
<Resource Include="Resources\github.png" />
139+
</ItemGroup>
140+
<ItemGroup>
141+
<Resource Include="Resources\toolspeed.png" />
142+
</ItemGroup>
138143
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
139144
</Project>

src/Mouser/Resources/github.png

8.47 KB
Loading

src/Mouser/Resources/toolspeed.png

5.95 KB
Loading

src/Mouser/Utils/Win32/HotKeyManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public static class HotKeyManager
2323
// Id of our hot keys.
2424
public const int WM_HOTKEY_START = 0x0001;
2525
public const int WM_HOTKEY_STOP = 0x0002;
26+
public const int WM_HOTKEY_RECORD_START = 0x0003;
27+
public const int WM_HOTKEY_RECORD_STOP = 0x0004;
2628

2729
// virtual-key
2830
// https://docs.microsoft.com/zh-cn/windows/win32/inputdev/virtual-key-codes?redirectedfrom=MSDN

0 commit comments

Comments
 (0)