太田さん,初めまして.
> HAMLOGにから自作アプリケーションにデータを渡すことも出来ます。
> Hamlogからコールサインを受け取りEntity解析をしてHamlogに、そのEntityのCodeを送る...や
> WKD/CFM状況を表示するなどの自作ソフトで利用させていただいていました。
なるほど,逆も出来るのですね.Hamlogから取得して,何らかに変換して,Hamlogに戻すことが出来るのですね.
> こちらではサンプルの記述で上手く動作しています。
> 下記に一部を抜粋します。
>
> Module1 の中に記述
> 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
正しくは,ByRef lParam As COPYDATASTRUCT ですか.
私の場合は,Iparam As Any で動作しちゃいました.
> 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)
ここまでは,THW_FOCUSを除いて,うまくいったのですが...
> lRet = SetWindowPos(hHwnd2, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
なるほど,こういう手もあるのですね.
それと,ウィンドウのハンドルですが,使用する関数の直近の値を使わないとダメなんですね?
私の場合,SendMessageの後,SetForegroundWindow でやろうとしましたが,対象のウィンドウのハンドルを,最初に取得した,Hwnd1 = FindWindow("TThwin", 0)の値を使っていました.しかし,今やってみたところ,ハンドルを戻り値にしてやっても,うまくいきませんでした(SetForegroundWindow の戻り値が0).
それで,
Call AppActivate("Turbo HAMLOG", 0)
にしてみたら,うまくいったわけです.
うまくいったと思ったら,対象ウィンドウが最小化されている状態ではエラーになることがわかりました.最小化を含め,ハムログが起動されていなければ一連の操作には続かない(最初のハンドルの取得で無ければお終い)わけで,AppActivateで使うのなら,エラー割り込みで,エラーコードと合せて,”最小化されているHamlogを開いて下さい”等のメッセージを出すか,太田さんの方法に変えるか...
サジェッションありがとうございました.