- PR -

取得したハンドルでウィンドウを閉じたいのですが。。

1
投稿者投稿内容
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-07-05 15:08
いつもお世話になります〜
ウィンドウハンドルのことで質問させてください。

ネットワーク上の共有フォルダをエクスプローラで開いて、
開くことができたらそのウィンドウのタイトルからハンドルを
取得して、そのハンドル値を使ってクローズメッセージを
送ってウィンドウを閉じようとしております。

ウィンドウハンドルは取得できるのですが、クローズメッセージ
を送ってもウィンドウを閉じることができなくて困っています。。

どなたかヒントだけでも教えて頂けないでしょうか?
よろしくお願いします〜m(__)m

環境はVB6,Windows2000です。接続先もWindows2000です。
--------------------------------------------------------
(Form1)
Private Sub Command1_Click()
Dim strUnc As String
' コマンドボタンを無効に設定
Command1.Enabled = False

'接続先フォルダを取得
'Text1: フォルダ名 Text2: IPアドレス
strUnc = "\\" & Text2.Text & "\" & Text1.Text

' エクスプローラを起動
Call Shell("explorer.exe " & strUnc, vbNormalFocus)

End Sub

Private Sub Command2_Click()

Dim strWindowTitle As String
Dim lngWindowHandle As Long

' ウィンドウタイトルでウィンドウハンドルを取得
strWindowTitle = Text1.Text & " - " & Text2.Text
lngWindowHandle = _
FindWindow(vbNullString, _
strWindowTitle)
' ウィンドウハンドルを取得できたときは
If lngWindowHandle <> 0 Then
' ウィンドウハンドル値を表示
Label3.Caption = _
lngWindowHandle
' ウィンドウタイトルを表示 "フォルダ名 - IPアドレス"の形
Label4.Caption = Text1.Text & " - " & Text2.Text

'ウインドウを閉じる
Call SendMessage(lngWindowHandle, WM_CLOSE, 0, 0)

End If
End Sub

(Module1)

' クラス名とウィンドウ名が指定された文字列と一致する
' ウィンドウのハンドルを取得する関数の宣言
Declare Function FindWindow Lib "user32.dll" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

' ウィンドウのタイトルバーのテキストを
' バッファにコピーする関数の宣言
Declare Function GetWindowText Lib "user32.dll" _
Alias "GetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String, _
ByVal nMaxCount As Long) As Long

'クローズメッセージを選択されたウィンドウに送る
Public Const WM_CLOSE = &H10
Declare Function SendMessage Lib "user32.dll" _
Alias "SendMessageA" _
(ByVal hwnd&, _
ByVal wMsg&, _
ByVal wParam&, _
ByVal lParam&) As Long

Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-07-05 15:46
こんにちは。

エクスプローラを起動しているところを、メモ帳(notepad.exe)の起動にして、
試してみるとどうなりますか?
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-07-05 16:03
ご返答ありがとうございます!

メモ帳にしたところ、正常に閉じられますね。。
エクスプローラの場合はハンドルで閉じたりできない
ということなんでしょうか・・・
Qoo
大ベテラン
会議室デビュー日: 2003/04/08
投稿数: 121
投稿日時: 2004-07-05 17:10
こんにちは。

Call SendMessage(lngWindowHandle, WM_CLOSE, 0, 0)
のところを

Call SendMessage(lngWindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0);
としてみてはどうでしょう。(ネットで調べて得た情報ですが。。。)

定数の値は、次の通りです。
Public Const SC_CLOSE = &HF060
Public Const WM_SYSCOMMAND = &H112
得正カレー
会議室デビュー日: 2004/06/08
投稿数: 15
投稿日時: 2004-07-05 17:38
Qooさん、ありがとうございます!!

教えていただいた引数でクローズできました!

もう少しつっこんで調べるべきでしたね。。
お恥ずかしいです^^;

本当に助かりました。どうもありがとうございました〜m(__)m
1

スキルアップ/キャリアアップ(JOB@IT)