如何在VB中打开一个记事本窗口并获取窗口句柄,向其中发送富文本框中的内容(最好带格式)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在VB中打开一个记事本窗口并获取窗口句柄,向其中发送富文本框中的内容(最好带格式)相关的知识,希望对你有一定的参考价值。

1.新建三个命令按钮Command1命名“写字”,Command1命名“禁用”,Command1命名“关闭”;2.在窗体写下如下代码:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
'该程序在VB6.0下由shumu_qing测试通过
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE = &H10
Private Const WM_SETTEXT = &HC
Private Sub Command1_Click()
Dim WindowHandle As Long, ChildWindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")

If WindowHandle Then '如果获取句柄成功
ChildWindowHandle = FindWindowEx(WindowHandle, 0, "Edit", vbNullString)

If ChildWindowHandle Then '如果成功获取子句柄
SendMessage ChildWindowHandle, WM_SETTEXT, 0, ByVal CStr("hello") '发送hello消息
Else
MsgBox "无法获取子窗口", vbCritical, "提示"
End If
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End SubPrivate Sub Command2_Click()
Dim WindowHandle As Long, ChildWindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")

If WindowHandle Then '如果获取句柄成功
ChildWindowHandle = FindWindowEx(WindowHandle, 0, "Edit", vbNullString)

If ChildWindowHandle Then '如果成功获取子句柄
EnableWindow ChildWindowHandle, False '禁用子窗口
Else
MsgBox "无法获取子窗口", vbCritical, "提示"
End If
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End SubPrivate Sub Command3_Click()
Dim WindowHandle As Long
WindowHandle = FindWindow(vbNullString, "无标题 - 记事本")

If WindowHandle Then '如果获取句柄成功
SendMessage WindowHandle, WM_CLOSE, 0, 0 '关闭窗口
Else
MsgBox "无法获取窗口", vbCritical, "提示"
End If
End Sub
参考技术A 楼上代码非常麻烦首先打开记事本你可以直接用SHELL函数打开,并且返回句柄。这样就可以了,完全不用FINDWINDOW这个API函数,然后发送内容先用appactive激活窗口再用sendkeys函数发送就行了。具体代码不写了,很简单。学过VB的都会写。 另外说以下 API函数能不用尽量不用。VB调用API函数效率其实很低的。 参考技术B 楼上还是不要误导新手,与其用vb自身函数反复调用vb库不必要的垃圾代码,还不如直接用api效率高 参考技术C 直接用OPEN语句创建一个TXT文件,写入内容,然后在用SHELL语句打开新建的TXT就可以了。

可靠地找到 Notepad++ 窗口句柄

【中文标题】可靠地找到 Notepad++ 窗口句柄【英文标题】:Reliably find Notepad++ window handle 【发布时间】:2013-12-16 07:31:46 【问题描述】:

我想在打开的记事本窗口中使用一些 SCINTILLA SendMessage(),但我不确定如何可靠地获取 Notepad++ 打开的窗口句柄。

【问题讨论】:

FinWindow/EnumWindows 有什么不可靠的地方? 请帮助查找 Find/EnumWindows 的正确参数 你应该展示你到目前为止所尝试的内容 我尝试提高我的回答技巧。请告诉我为什么您批准但未投票。下次我会做得更好。 我不知道我必须这样做。源代码sn-p怎么样? 【参考方案1】:

使用间谍++

记事本++ 主窗口类名为“Notepad++”。 闪烁窗口类名是“Scintilla

【讨论】:

以上是关于如何在VB中打开一个记事本窗口并获取窗口句柄,向其中发送富文本框中的内容(最好带格式)的主要内容,如果未能解决你的问题,请参考以下文章

VB获取窗口句柄的详细教程

C#获取当前窗体句柄及该窗体里的信息

MFC中,如何获取一个已知窗口标题的窗口的句柄

VB 获得窗口句柄

vb2013 已获得主窗口句柄,怎么遍历所有子窗句柄到TreeView中?

vb 知道窗口句柄以及怎样获得窗口上文本框和按钮句柄并传递信息