[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『開いているメモ帳の内容に別の文字列を追加して元のメモ帳に反映』(カシスソーダ)
先日、↓で開いているメモ帳の内容を取得する方法をご教示いただきました。 ありがとうございました。
[[20111206231619]] 『開いているメモ帳の内容を取得する』(カシスソーダ)
今度は、開いているメモ帳の内容に別の文字列を追加して元のメモ帳に反映させ ようとしています。
↓で試したのですが、追加する文字列(変数txtstrで指定)が反映されません。
MsgBox newtxtstr
でも
lngRc = SendMessage(hWndEdit, WM_SETTEXT, 0, ByVal newtxtstr)
でも既存のmyText部分のままです。 どのように書き換えればいいのでしょうか? ご教示お願いいたします。
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _ ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, _ ByVal lParam As Any) As Long
Const WM_GETTEXT As Long = &HD Const WM_SETTEXT As Long = &HC
Sub test() Dim hWnd As Long, hWndEdit As Long Dim lngRet As Long Dim lngRc As Long Dim myText As String * 255 Dim txtstr As String * 255 Dim newtxtstr As String * 255
txtstr = "hogehoge" & vbCrLf & "hogahoga" & vbCrLf & "hugahuga"
hWnd = FindWindowEx(0, 0, "Notepad", vbNullString) Do While hWnd <> 0 hWndEdit = FindWindowEx(hWnd, 0, "Edit", "") '既存文字列の取得 lngRet = SendMessage(hWndEdit, WM_GETTEXT, Len(myText), ByVal myText) '既存文字列と新規文字列の結合 newtxtstr = myText & vbCrLf & txtstr MsgBox newtxtstr '結合文字列の反映 lngRc = SendMessage(hWndEdit, WM_SETTEXT, 0, ByVal newtxtstr) hWnd = FindWindowEx(0, hWnd, "Notepad", vbNullString) Loop End Sub
また、開いているメモ帳の編集を破棄して閉じる方法も探しています。 併せてご教示いただきましたら幸甚です。よろしくお願いいたします。
Windows:XP-SP3 Excel:2002
NullCharも含めた255文字長のまま処理してるから見えないんじゃないですか?
Sub test() Dim hWnd As Long, hWndEdit As Long Dim lngRet As Long Dim lngRc As Long Dim myText As String * 255 Dim txtstr As String Dim newtxtstr As String Dim tmp As String
txtstr = "hogehoge" & vbCrLf & "hogahoga" & vbCrLf & "hugahuga"
hWnd = FindWindowEx(0, 0, "Notepad", vbNullString) Do While hWnd <> 0 hWndEdit = FindWindowEx(hWnd, 0, "Edit", "") '既存文字列の取得 lngRet = SendMessage(hWndEdit, WM_GETTEXT, Len(myText), ByVal myText) 'Nullまでの文字を取得 tmp = Left$(myText, InStr(1, myText, vbNullChar) - 1) '既存文字列と新規文字列の結合 newtxtstr = tmp & vbCrLf & txtstr MsgBox newtxtstr '結合文字列の反映 lngRc = SendMessage(hWndEdit, WM_SETTEXT, 0, newtxtstr) hWnd = FindWindowEx(0, hWnd, "Notepad", vbNullString) Loop End Sub
メモ帳を閉じるのは
Const WM_CLOSE As Long = &H10
Sub test2() 'メモ帳を閉じる Dim hWnd As Long Dim Ans As Long hWnd = FindWindowEx(0, 0, "Notepad", vbNullString) Ans = SendMessage(hWnd, WM_CLOSE, 0&, 0&) End Sub
とか (momo)
momoさん、ご回答ありがとうございます。
開いているメモ帳に結合した文字列を送り込むことが出来ました。 ありがとうございました。
併せてご教示いただきましたメモ帳を閉じるほうのコードですが、編集していない メモ帳は閉じてくれたのですが、編修してあるメモ帳(保存してあるメモ帳を開いた後 上書きしていないもの)は 「変更を保存しますか?」 というウィンドウが表示されてしまいます。 編修を破棄して 「変更を保存しますか?」のウィンドウを表示することなしに 閉じるようにするにはどのように書き換えればいいでしょうか。 お手数おかけしますが再度ご教示いただきましたら幸甚です。 よろしくお願いいたします。
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _ ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal MSG As Long, ByVal wParam As Long, _ ByVal lParam As Any) As Long
Const WM_CLOSE As Long = &H10
Sub test() Dim hWnd As Long Dim Ans As Long
hWnd = FindWindowEx(0, 0, "Notepad", vbNullString) Do While hWnd <> 0 Ans = SendMessage(hWnd, WM_CLOSE, 0&, 0&) hWnd = FindWindowEx(0, 0, "Notepad", vbNullString) Loop End Sub
(カシスソーダ)
返事が遅くなりました。 WM_CLOSEで閉じないのならDESTROYを送ってやるとどうでしょう?
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" _ (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, _ ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _ (ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, _ ByVal lParam As Any) As Long
'Const WM_CLOSE As Long = &H10 Const WM_DESTROY As Long = &H2
Sub test() Dim hwnd As Long Dim Ans As Long
hwnd = FindWindowEx(0, 0, "Notepad", vbNullString) Do While hwnd <> 0 Ans = SendMessage(hwnd, WM_DESTROY, 0&, 0&) hwnd = FindWindowEx(0, hwnd, "Notepad", vbNullString) Loop End Sub
(momo)
momoさん、再度のご教示ありがとうございます。
>WM_CLOSEで閉じないのならDESTROYを送ってやるとどうでしょう?
ご教示いただきましたコードでうまくいきました。 APIは難しくて敬遠していたのですが、もっと勉強してみます。 ありがとうございました。
(カシスソーダ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.