各局皆様、こんにちは。アマチュア無線局、JS2IIUです。
FT8をやっているときに、交信中の相手や呼ぼうとしている相手のコールサインが少し見づらいので、大きく表示できるツールを作ってみました。JTDXやWSJT-Xは交信している間、相手きょくのコールサインをクリップボードにコピーしています。下の図のようなウィンドウを開いておくと、クリップボードを読んで、コールサインを表示するという単純なものです。
- Visual Studio 2022 を使用
- Visual Basic で作成
- WPF アプリ (.NET Framework)
目次
部品
クリップボードの内容を読みだす。クリップボードの中身がテキストであることを確認してから読み込みしています。
If Clipboard.ContainsText() Then
TextBlock.Text = Clipboard.GetText()
End If
ソースコード(抜粋)
クリップボードの内容がコールサインかどうかの判定はちゃんと行っていません。単純に文字数だけで判断していますので、コールサイン以外が表示されることもあります。FT8しているときは他ごとしない、まじめな無線家向けですね。
'タイマー処理
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Public Const CALL_MAX_LEN As Integer = 9
Public Const STR_NOT_CALL As String = "C/S"
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
SetupTimer()
End Sub
Private Sub WatchButton_Click(sender As Object, e As RoutedEventArgs) Handles WatchButton.Click
If Clipboard.ContainsText() Then
If Clipboard.GetText.Length < CALL_MAX_LEN Then
Me.CB_TextBlock.Text = Clipboard.GetText()
Else
Me.CB_TextBlock.Text = STR_NOT_CALL
End If
End If
End Sub
'タイマメソッド
Private Sub MyTimerMethod(sender As Object, e As EventArgs)
If Clipboard.ContainsText() Then
If Clipboard.GetText.Length < CALL_MAX_LEN Then
Me.CB_TextBlock.Text = Clipboard.GetText()
Else
Me.CB_TextBlock.Text = STR_NOT_CALL
End If
End If
End Sub
'タイマのインスタンス
Private _timer As DispatcherTimer
'タイマの設定
Private Sub SetupTimer()
'タイマのインスタンス生成
_timer = New DispatcherTimer()
'interval 1sec
_timer.Interval = New TimeSpan(0, 0, 1)
'タイマメソッド
AddHandler _timer.Tick, New EventHandler(AddressOf MyTimerMethod)
'タイマを開始
_timer.Start()
'画面閉じられるときに、タイマを停止する
AddHandler Me.Closing, New CancelEventHandler(AddressOf StopTimer)
End Sub
Private Sub StopTimer(sender As Object, e As CancelEventArgs)
_timer.Stop()
End Sub
End Class
参考サイト
- クリップボードに文字列をコピーする、クリップボードから文字列を取得する
- チュートリアル: Visual Basic で単純なアプリケーションを作成する
- タイマにより一定時間間隔で処理を行うには?(WPFタイマ編)
- 方法: 定数を宣言する (Visual Basic)
使用イメージ
実際に使ってみましたが、コールサインが見やすいので大変便利です。画面の隙間にちょこっと見えています。(下図)早速JTAlertで自動起動できるように設定しました。
最後まで読んでいただきありがとうございました。