こんにちは。
> 外部アプリケーションからHAMLOGにデータを渡せることを,つい最近知りました.
この逆の
HAMLOGにから自作アプリケーションにデータを渡すことも出来ます。
Hamlogからコールサインを受け取りEntity解析をしてHamlogに、そのEntityのCodeを送る...や
WKD/CFM状況を表示するなどの自作ソフトで利用させていただいていました。
> cds.dwData = 1 Or THW_ENTER Or THW_FOCUS 'コールサインに文字列を送ってデータを送信後ENTERキーを押し,フォーカスを移す。
> データを送るのはうまくいくのですが,
> フォーカス・アクティブが Hamlog(の入力ウィンドウ)に移らず,当然前面に出てきません.
こちらではサンプルの記述で上手く動作しています。
下記に一部を抜粋します。
Module1 の中に記述
Type COPYDATASTRUCT
dwData As Long
cbData As Long
lpData As String
End Type
Public Const THW_ENTER = &H10000 ' データ送信後、ENTERキーを押したのと同じ
Public Const THW_FOCUS = &H20000 ' データ送信後、編集ボックスにフォーカス
Public Const THW_SAVEBOX_ON = &H40000 ' データ保存時、確認MessageBox表示あり
Public Const THW_SAVEBOX_OFF = &H80000 ' データ保存時、確認MessageBox表示なし
Public Const THW_APPLIhWnd = &H100000 ' メインウインドウのハンドルを返す
Public Const WM_COPYDATA = &H4A
Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal wnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As COPYDATASTRUCT) As Long
送るコマンドにて
cmmd = 15 Or THW_ENTER Or THW_FOCUS
cds.dwData = cmmd
cds.cbData = LenB(Trim(cbuff)) / 2 ' 文字列の長さ
cds.lpData = cbuff
hHwnd2 = SendMessage(HamloghWnd, WM_COPYDATA, DX_chk_hwnd, cds)
lRet = SetWindowPos(hHwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)