皆さんこんにちは
只今DllForm(Delphi)をVB6.0アプリから表示させていますが、あるタイミングでDllFormをVBアプリから終了(閉じる)しようとしています。
色々参考にさせて頂いて・・・
’-------------------------------------------------モジュール
Public dllFormHnd As Long 'DllFormのWindハンドル
’DllFormを表示させる:戻り値は表示したWindowのハンドル
Public Declare Function DllTestOpenFrm Lib "DllForm.dll" (ByVal intCode As Long) As Long
'IsWindowの関数呼び出し
Public Declare Function IsWindow Lib "user32" (ByVal hwnd As Long) As Long
'SendMessage関数の呼び出し
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Long) As Long
' システムコマンドを指定するメッセージ
Public Const WM_SYSCOMMAND = &H112
' ウィンドウをクローズするメッセージ
Public Const SC_CLOSE = &HF060
’-------------------------Formで実際の処理
’{DllFormの表示}
Private Sub Command2_Click()
If IsWindow(dllFormHnd) = 0 Then ’二重呼び出し防止
dllFormHnd = DllTestOpenFrm(9)
End If
End Sub
’{DllFormを閉じる}
Private Sub Command3_Click()
Dim Ret As Long
If IsWindow(dllFormHnd) <> 0 Then’DllFormは存在するか?
MsgBox ("DllFormは表示してる")’Test(確認のため)
Ret = SendMessage(dllFormHnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)
Else
MsgBox ("DllFormは表示してない")
End If
End Sub
としましたが、DllFormは認識してるようですが何故か閉じません。
ちなみに、他を参考に
Private Sub Command4_Click()
Dim Ret As Long
' 自ウィンドウにウィンドウクローズのメッセージを送信
Ret = SendMessage(Me.hwnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)
End Sub
は、有効でした。
Dllを作成した言語で作成した別のアプリから同様の処理でSendMessageを発行すると閉じます。
DllFormを扱う上で、VB特有で何かあるのでしょうか?
記述自体は間違ってないと思うのですが・・・何か違うのかな?
よろしくお願いします。
自己レス
何がなんだか、ようわからんです。
VB側で終了させるのはあきらめました。
取りあえず、取得したWindowHandleをDllに返してDll側で終了さるように
しました。
ツイート | ![]() |