如何用Vb.net查找到另外一个应用程序中的文本框控件,并实现赋值

meganqin 2007-10-25 04:28:31
我希望用自己写的应用程序,实现对另外一个应用程序的登陆框中的用户名和密码自动赋值,
考虑如下实现,
1.在自己的应用程序中(A)启动另外一个应用程序(B)
2.模拟B的菜单点击弹出登陆窗口
3.往B的登陆界面中的两个文本框赋值,然后模拟点击窗口上的确定按钮.

程序(A)代码如下

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Private Const WM_COMMAND As Integer = &H111
Private Const BM_CLICK = &HF5
Private Const WM_SETTEXT = &HC
Dim g3eHWnd As Integer = 0
Dim newProcess As Process = New Process()

newProcess.StartInfo.FileName = "c:\B.exe"
newProcess.Start()
newProcess.WaitForInputIdle()
'newPrecoess.WaitForExit(2000)
g3eHWnd = newProcess.MainWindowHandle '得到B的主窗口界面句柄
SendMessage(g3eHWnd, WM_COMMAND, 40117, 0&) '模拟B菜单操作,然后会弹出登陆窗口
'下面就不会写了
'我理解是这么来实现
'得到B的登陆窗口的句柄,然后递归查找上面的控件,得到需要的文本框的句柄,然后仍然用
'SendMessage 赋值 ,我不知道怎样才能得到刚弹出登陆窗口的句柄,并在上面找到我需要的文本框,
'用spy++ 看了登陆窗口,无法得到文本框ID,也无法从caption等来区分。
'查过一些例子,一定要用到EnumChildWindows么,我看不太懂,希望贴出代码来!


再有个问题就是,如果我在newProcess.WaitForInputIdle() 后,如果马上执行newProcess.MainWindowHandle
得不到数值,好像是程序的主窗口界面还没有加载完成,所以我又执行了'newPrecoess.WaitForExit(2000) 来等待两秒钟,
这个办法我知道不好,但是为什么阿?还有别的办法么,本来想用循环来求newProcess.MainWindowHandle 是否等于0来判断,
也不行,newProcess.MainWindowHandle 在代码里只能执行一次,如果第一次求得是0,以后永远都是0,为什么呢?如果解决呢



...全文
329 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
robake 2010-01-20
  • 打赏
  • 举报
回复
试试用Process类
ohd 2010-01-20
  • 打赏
  • 举报
回复

machong8183
的方法写下去,看还会遇到什么样的问题
水猿兵团五哥 2010-01-19
  • 打赏
  • 举报
回复
建议你用spy
水猿兵团五哥 2010-01-19
  • 打赏
  • 举报
回复
用这样的代码就可以找到你要的控件,然后用sendmessage模拟按键好了

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

'以下是查找窗口 WindowsForms10.BUTTON.app.0.bf7d44 的代码:
Private Function MyFindWindow() As Long
'父窗口类名数组
Dim A_szClassName(2) As String
A_szClassName(0) = "WindowsForms10.Window.8.app.0.bf7d44"
A_szClassName(1) = "WindowsForms10.BUTTON.app.0.bf7d44"
'父窗口标题数组
Dim A_szWinName(2) As String
A_szWinName(0) = "HIR品質実績一覧"
A_szWinName(1) = "倉入日基準 Excel出力"
'首先求得顶级父窗口
Dim hLastWin As Long
hLastWin = FindWindow(A_szClassName(0), A_szWinName(0))
'逐次用FindWindowEx函数求出各级子窗口
For i = 1 To 1
hLastWin = FindWindowEx(hLastWin, 0,A_szClassName(i), A_szWinName(i))
Next i
MyFindWindow = hLastWin
End Function
'举例: Dim hLastWin as Long
' hLastWin = MyFindWindow()
足球中国 2010-01-16
  • 打赏
  • 举报
回复
如果你要发送的是.net的可能不可以。没试过。
Valyce 2010-01-15
  • 打赏
  • 举报
回复
//遍历进程
Process[] foundProcess = Process.GetProcessesByName(listBox1.SelectedItem.ToString());
foreach (Process p in foundProcess)
{
Win32.EnumChildWindows(p.MainWindowHandle.ToInt32(), Win32.childWindowProcess, 255);
}
//Win32中的函数
[DllImport("user32.dll")]
public static extern bool IsWindowVisible(int hwnd);

[DllImport("user32.dll")]
public static extern int GetWindowText(int hwnd,
StringBuilder buf, int nMaxCount);

[DllImport("user32.dll")]
public static extern int GetClassName(int hwnd,
[MarshalAs(UnmanagedType.LPStr)] StringBuilder buf,
int nMaxCount);

[DllImport("user32.dll")]
public static extern int GetWindowRect(int hwnd, ref RECT rc);

[DllImport("user32.dll")]
// 注意,运行时知道如何列集一个矩形
public static extern int GetWindowRect(int hwnd, ref Rectangle rc);

[DllImport("User32.Dll")]
public static extern void SetWindowText(int h, String s);

[DllImport("user32.dll")]
public static extern int EnumChildWindows(int hWndParent, EnumChildWndProc lpfn, int lParam);

[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);

[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam,
int lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int
wParam,ref SYSTEMTIME lParam);

/// <summary>
/// 回调函数代理
/// </summary>
public delegate bool EnumChildWndProc(int hwnd, int lParam);
/// <summary>
/// 子窗口回调函数代理
/// </summary>
public static EnumChildWndProc childWindowProcess = new EnumChildWndProc(ChildWindowProcess);

/// <summary>
/// 子窗口回调处理函数
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lParam"></param>
/// <returns></returns>
public static bool ChildWindowProcess(int hwnd, int lParam)
{
StringBuilder s = new StringBuilder(256);
Win32API.Win32.GetWindowText(hwnd, s, s.Capacity);

StringBuilder bb = new StringBuilder(255);
Win32.GetClassName(hwnd, bb, 255);

//StringBuilder dd = new StringBuilder(255);
//Win32.GetClassInfo(hwnd, dd, 255);

//为可输入控件赋值
const int WM_SETTEXT = 0x000C;
//SendMessage((IntPtr)hwnd, WM_SETTEXT, (IntPtr)0, "123");

//模拟单击
const int WM_CLICK = 0x00F5;
//SendMessage((IntPtr)hwnd, WM_CLICK, (IntPtr)0, "0");

//为下拉控件赋值
const int WM_CLICK2 = 0x014D;
//SendMessage((IntPtr)hwnd, WM_CLICK2, (IntPtr)0, "123");

//向下拉控件添加值
const int WM_CLICK3 = 0x0180;
//SendMessage((IntPtr)hwnd, WM_CLICK3, (IntPtr)0, "123");

//展开日期下拉
const int wm_syskeydown = 0x0104, vk_down = 0x28;
//SendMessage((IntPtr)hwnd, wm_syskeydown, vk_down, 0);


return true;
}
guodabao 2007-10-26
  • 打赏
  • 举报
回复
帮顶 ~
meganqin 2007-10-26
  • 打赏
  • 举报
回复
是的,我也知道可能需要用EnumChildWindows,不过不会写。还有就是如果找到,怎么才能判别每个文本框是我需要的?
meganqin 2007-10-26
  • 打赏
  • 举报
回复
有没有人知道啊?
IThurricane 2007-10-25
  • 打赏
  • 举报
回复
刚才发的文章不对,这次对了,
你看看这篇
http://www.chenjiliang.com/Article/View.aspx?ArticleID=2117&TypeID=84
IThurricane 2007-10-25
  • 打赏
  • 举报
回复
你可以看看这篇文章,也许有帮助
http://www.4oa.com/Article/html/6/34/493/2005/17922.html
IThurricane 2007-10-25
  • 打赏
  • 举报
回复
通过主窗口的句柄循环得到里面的控件然后发消息
SendMessage(hwnd,WM_SETTEXT,"改变文本")
fancystyle 2007-10-25
  • 打赏
  • 举报
回复
不会,帮你顶
文名: VB程序设计及应用 作者: 李淑华图书分类: 软件 资源格式: PDF 版本: 文字版 出版社: 高等教育出版社书号: 7-04-014767-X发行时间: 2004年04月 地区: 大陆 语言: 简体文 简介: 内容简介: 本书是新世纪高职高专教改项目成果教材,由教育部高职高专教育专业教学改革试点院校编写。全书共分 17 章。主要介绍了 VisualBasic6.0 系统的基础知识,程序设计的常用函数、程序设计语句、数组,简单介绍了面向对象程序设计的基本概念,详细介绍了基本控件、对话框、图形、菜单等设计方法,多文档界面、工具栏、状态栏的程序设计方法,数据库、对象的链接和嵌入、多媒体控件以及常用的 ActiveX 控件的应用,最后介绍了打字练习、画板、学生成绩管理系统等应用程序实例。本书配有大量的实例和测试题,并配有 CAI课件、电子教案。本书由浅入深、通俗易懂,适用于高等职业学校、高等专科学校、成人高校、示范性软件职业技术学院、本科院校使用,还适用于本科院校举办的二级职业技术学院、教育学院以及民办高校使用,也可供参加全国高等学校计算机考试二级 VisualBasic语言程序设计的考生学习参考,同时也适应各类工作人员学习参考。 内容截图: 目录: 第1章 VisualBasic概述 1.1 VisualBasic6.0 1.1.1 VB的发展 1.1.2 VB6.0版本简介 1.1.3 VB的特点 1.2 VB的集成开发环境 1.2.1 启动 VB集成开发环境 1.2.2 用户界面 1.3 各种窗口简介 1.3.1 窗体窗口 1.3.2 工程资源管理器窗口 1.3.3 工具箱窗口 1.3.4 属性窗口 1.3.5 代码窗口 1.3.6 调色板窗口 1.3.7 窗体布局窗口 1.3.8 立即窗口 1.3.9 对象浏览器窗口 习题9 第2章 VB基本概念与操作 2.1 可视化编程基础 2.2 VB应用程序的开发步骤 2.2.1 创建或打开新工程 2.2.2 建立用户界面 2.2.3 设计用户界面 2.2.4 添加程序代码 2.2.5 运行调试程序 2.2.6 保存文件 2.2.7 生成可执行文件 2.3 修改和定制窗体 2.3.1 选择控件 2.3.2 控件的操作 2.4 工程的管理 2.4.1 工程的组成 2.4.2 习题 第 3章 VB程序设计的基础 3.1 命名规则和语法规则 3.1.1 命名规则 3.1.2 语句及语法规则 3.2 数据类型 3.2.1 基本数据类型 3.2.2 用户自定义类型 3.3 常量与变量 3.3.1 常量 3.3.2 变量 3.3.3 变量的作用域 3.3.4 变量作用域的关系 3.4 常用函数 3.4.1 内部函数 3.4.2 字符串函数 3.5 运算符和表达式 3.5.1 算术运算符与算术表达式 3.5.2 关系运算符与关系表达式 3.5.3 逻辑运算符与逻辑表达式 习题 第 4章 数据的输出与输入 4.1 数据的输出 4.1.1 Print方法 4.1.2 与 Print有关的函数 4.1.3 Cls方法 4.2 数据输入函数 InputBox 4.3 MsgBox函数和 MsgBox语句 4.3.1 MsgBox函数 4.3.2 MsgBox语句 实训 习题 第 5章 VB程序设计语句 5.1 赋值语句 5.2 条件语句 5.2.1 分支结构 5.2.2 情况语句 5.3 循环语句 5.3.1 For循环 5.3.2 Do循环 5.3.3 多重循环 5.3.4 GoTo语句 5.3.5 End语句 5.3.6 应用举例 习题一 5.4 数组 5.4.1 数组的概念 5.4.2 静态数组的定义 5.4.3 数组下标界的测试函数 5.4.4 动态数组的定义 5.4.5 数组的清除和重新定义 5.4.6 数组的基本操作 5.4.7 数组应用举例 5.5 控件数组 5.5.1 控件数组的概念 5.5.2 控件数组的建立 习题二 5.6 过程 5.6.1 过程的定义 5.6.2 过程的调用 5.6.3 退出过程 5.6.4 SubMain过程 5.7 函数 5.7.1 函数的定义 5.7.2 函数的调用 5.7.3 退出函数语句 实训 习题三 第6章 窗体 6.1 对象的基本属性 6.1.1 属性的分类 6.1.2 对象的基本属性 6.2 窗体的属性、事件和方法 6.2.1 窗体的常用属性 6.2.2 窗体的常用事件 6.2.3 窗体的常用方法 6.2.4 控件的常用事件 6.2.5 LoadPicture函数 6.3 多窗体 6.3.1 加载窗体 6.3.2 显示窗体 6.3.3 隐藏窗体 6.3.4 卸载窗体 6.3.5 建立多窗体 6.4 鼠标事件与键盘事件 6.4.1 鼠标事件 6.4.2 键盘事件 实训 习题 第 7章 常用控件的使用 7.1 标签框与文本框 7.1.1 标签框 7.1.2 文本框 7.2 命令按钮与计时器 7.2.1 命令按钮 7.2.2 计时器 7.3 单选按钮与复选框 7.3.1 单选按钮 7.3.2 复选框 7.4 框架与滚动条 7.4.1 框架 7.4.2 滚动条 7.5 列表框与组合框 7.5.1 列表框 7.5.2 组合框 7.6 图片框与图像框 7.6.1 图片框 7.6.2 图像框 7.7 设计简单的动画 实训 习题 第 8章 对话框程序设计 8.1 概述 8.1.1 对话框的分类 8.1.2 对话框的特点 8.2 通用对话框 8.2.1 通用对话框控件 8.2.2 通用对话框的属性与方 8.3 通用对话框的使用 8.3.1 打开(Open)对话框 8.3.2 另存为(SaveAs)对话框 8.3.3 颜色(Color)对话框 8.3.4 字体(Font)对话框 8.3.5 打印(Printer)对话框 8.3.6 帮助(Help)对话框 8.4 自定义对话框 8.4.1 自定义对话框的外观 8.4.2 自定义对话框的规则 实训 习题 第9章 图形操作 9.1 图形操作基础 9.1.1 标准坐标系统 9.1.2 自行定义坐标系 9.2 绘图属性 9.2.1 当前坐标 9.2.2 线宽 9.2.3 线型样式 9.2.4 填充 9.2.5 颜色函数 9.3 图形控件1 9.3.1 直线控件 9.3.2 形状控件 9.4 图形方法 9.4.1 PSet方法 9.4.2 Line方法 9.4.3 Circle方法 9.5 画图应用 实训 第10章 菜单程序设计 10.1 概述 10.1.1 下拉菜单 10.1.2 弹出式菜单 10.1.3 设计菜单的步骤 0.1.4 菜单编辑器 10.2 下拉菜单的设计 10.3 菜单项的控制 10.3.1 有效性控制 10.3.2 菜单项标记 10.3.3 菜单项的增减 10.4 弹出式菜单 实训 习题 第 11章 文件 11.1 文件系统控件 11.1.1 驱动器列表框 11.1.2 目录列表框 11.1.3 文件列表框 11.2 文件基本操作 11.3 文件概述 11.3.1 文件结构 11.3.2 文件分类 11.3.3 文件的打开与关闭 11.3.4 文件操作语句和函数 11.4 顺序文件 11.4.1 顺序文件的写操作 11.4.2 顺序文件的读操作 11.5 随机文件 11.5.1 随机文件的打开与关闭 11.5.2 随机文件的写操作 11.5.3 随机文件的读操作 实训 习题 第 12章 界面设计 12.1 多文档界面 12.1.1 多文档界面的特性 12.1.2 创建和设计 MDI窗体 12.1.3 创建和设计 MDI子窗体 12.1.4 MDI窗体与子窗体的交互 12.1.5 MDI应用程序的菜单 12.1.6 应用 MDI窗体注意事项 12.2 图像列表框、工具栏和状态栏 12.2.1 图像列表框 12.2.2 工具栏 12.2.3 状态栏 12.3 高级文本框控件 12.4 应用程序向导 12.4.1 生成多文档编辑器 12.4.2 生成WWW浏览器 12.4.3 生成资源管理器 实训 第13章 VisualBasic与数据库 13.1 数据库概念 13.2 数据库管理器 13.3 数据控件 13.3.1 数据控件属性 13.3.2 数据网格控件 13.3.3 数据控件的事件 13.3.4 数据控件的常用方法 13.3.5 记录集的属性与方法 13.3.6 数据库记录的增删改操作 13.4 结构化查询语言(SQL) 13.4.1 SQL的常用命令 13.4.2 Select语句格式与功能 13.4.3 使用SQL 13.5 ADO数据控件 13.5.1 ADO对象模型 13.5.2 ADO控件的常用属性 13.5.3 ADO控件连接数据库 13.5.4 ADO控件上新增绑定控件 13.5.5 数据窗体向导 实训 第14章 对象的链接与嵌入 14.1 OLE控件概述 14.1.1 使用OLE控件 14.1.2 对象链接与嵌入的区别 14.2 OLE控件常用属性与方法 14.2.1 OLE控件的属性 14.2.2 编辑OLE对象 实训 第15章 多媒体 15.1 多媒体控件 15.1.1 多媒体控件的常用属性 15.1.2 多媒体控件的常用事件 15.2 多媒体控件的使用 15.2.1 利用多媒体控件播放CD 15.2.2 利用多媒体控件播放VCD 15.2.3 利用多媒体控件播放有声的 AVI文件 实训 第 16章 常用 ActiveX控件应用 16.1 滑块控件 16.2 日历控件 16.2.1 日历控件的常用属性 16.2.2 日历控件的常用方法 16.3 动画控件 16.3.1 动画控件的常用属性 16.3.2 动画控件的常用方法 16.4 进程条控件 16.4.1 进程条控件的常用属性 16.4.2 进程条控件的常用事件 16.5 浏览器控件 16.5.1 浏览器控件的常用属性 16.5.2 浏览器控件的常用方法 16.6 多选项卡控件 16.6.1 多选项卡控件的常用属性 16.6.2 多选项卡控件的常用事件 16.7 综合应用 16.7.1 状态栏控件和形状控件 16.7.2 多媒体控件和滑块控件 实训 第 17章 综合应用 17.1 打字系统的设计 17.1.1 打字系统的主要功能 17.1.2 打字系统的程序设计 17.2 画板系统的设计 17.2.1 画板系统的主要功能 17.2.2 画板系统的程序设计 17.3 学生档案管理系统的设计 17.3.1 系统结构图 17.3.2 数据库的建立 17.3.3 主窗体的设计 实训 参考文献
《VB程序设计》实验单元一 实验报告 专业班级: 姓名 学号 2 指导教师: 王云侠 完成时间: 3月22日 实验 一VB环境和可视化编程基础 1. 实验目的 1 了解Visual Basic的安装 2 掌握启动与退出Visual Basic 3 掌握建立、编辑和运行一个简单应用程序的全过程 4 掌握基本控件的使用 二、实验环境 VB6.0 三、实验内容 1、编写一程序,在文本框统计在该窗口上鼠标单击的次数。 提示:对窗口编写两个事件:Form_Load事件对文本框初值设为空;Form_Click事件对文 本框计数。 对文本框计数:Text1=Val(text1)+1 。 2、命令按钮、字号、内容和格式的复制练习。 按钮1:使得Text1的文本按要求改变。 按钮2:将Text1选定的文本复制到Text2. "控件名 "属性 " "Form1 "Caption="实验2" " "Label1 "复制文本 " "Label2 "输入文本 " "Text1 "Text="VB功能强大,但要下功夫学习" " "才能学好。" " " "(每个同学文本框内容可以不同)" "Text2 "Text="" " "Command1 "Caption="隶书25磅" " "Command2 "Caption="复制=>" " 四、实验步骤 1、编写一程序,在文本框统计在该窗口上鼠标单击的次数。 从运用点击vb6.0经典版 打开标准 EXE 建立一个form 1 添加一个Label和TextBox,Label的caption改为"你单击窗体的次数",TextBox的te xt改为空,然后编写代码如图 点击运行即可。 2、命令按钮、字号、内容和格式的复制练习。 从运用点击vb6.0经典版 打开标准 EXE 建立一个form 1 添加两个Label两个TextBox两个CommandButton,Label的caption改为"输入内容"和 "复制效果",TextBox的text改为"任意文字"和"空",CommandButton的caption改为"隶 书25磅"和"复制=>"。并且左面的Label改为如图 代码如图 点击运行即可 五、实验结果 1. 2. 六、实验体会 VB很有意思 实验二 VB语言基础和顺序结构 一 、实验目的 1、掌握正确书写表达式、赋值语句的规则 2、掌握常用函数的使用 3、掌握MsgBox与InputBox的使用 4、掌握Print和Format的使用 二、 实验环境 VB6.0 三、 实验内容 1、输入半径的值,分别计算并输出圆的面积、圆的周长和球的体积。 2、随机产生一个3位正整数,然后逆序输出,产生的随机数与逆序数同时显示。例如 735,输出537. 提示:利用"Mod"和"\"将一个3位数分离出3个1位数,然后连接成一个逆序的3位数。 四、实验步骤 从运用点击vb6.0经典版 打开标准 EXE 建立一个form 1 添加两个CommandButton,CommandButton的caption改为"参数输入半径计算结果"和"随 机数及逆序"。然后输入代码如图 运行即可 五、实验结果 六、实验体会 666 实验三 选择结构 一、实验目的 1. 掌握逻辑表达式的正确书写形式。 2. 掌握单分支与双分支条件语句的使用。 3. 掌握多分支条件语句的使用。 4. 掌握情况语句的使用及其与多分支条件语句之间的区别。 二、实验环境 VB6.0 三、实验内容 1. 输入3个整数,输出最大的数。 2. 输入一个三位数,判断是否为水仙数。水仙数的特点:个位数、十位数和百位数的立 方和等于该数自身的数。 3. 输入一个1~12的月份数字,显示这个月份是第几季度。 实验步骤 1.输入3个整数,输出最大的数。 从运用点击vb6.0经典版 打开标准 EXE 建立一个form 1 添加4个TextBox的text都改为"空",添加一个Label的将Label的文字改成"输入三个整 数";添加一个CommandButton将CommandButton改成"输出最大值" 输入代码如图 运行即可 2. 输入一个三位数,判断是否为水仙数。水仙数的特点:个位数、十位数和百位数的立方 和等于该数自身的数 从运用点击vb6.0经典版 打开标准 EXE 建立一个form 1 添加一个Label;一个TextBox;一个commandButton;将Label的caption改成"输 入一个三位数判断是否为水仙花";将TextBox的text改为"文字清空"将commangButt on的caption改成"判断" 输入代码如图 运行即可 3.输入一个1~12的月份数字,显示这个月份是第几季度。 从运用点击vb6.0经典版 打开标准
Private Sub AxWindowsMediaPlayer1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Public Class Form1 Private Sub 文件ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) End Sub Private Sub MenuItem15_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditCopy.Click rtBook.Copy() End Sub Private Sub MenuItem16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditPaste.Click rtBook.Paste() '粘贴操作 End Sub Private Sub rtBook_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtBook.TextChanged fsave = False '控件的内容发生变化时,该标志为False End Sub Dim fsave As Boolean Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '为全局变量赋值 '对保存文件对话框赋初值 SaveFileDialog1.FileName = "" SaveFileDialog1.DefaultExt = "txt" SaveFileDialog1.Filter = "Text File(*.txt)|*.txt|All files(*.*)|*.*" SaveFileDialog1.Title = "保存" '对打开文件对话框赋初值 OpenFileDialog1.FileName = "" OpenFileDialog1.DefaultExt = "txt" OpenFileDialog1.Filter = "Text File(*.txt)|*.txt|All files(*.*)|*.*" OpenFileDialog1.Title = "打开" End Sub Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileNew.Click Dim num1 As Integer '如果文本已被保存,则清空rtBook内容,重置变量新建文本 If fsave Then rtBook.Clear() SaveFileDialog1.FileName = "" '文件如果还没有保存,则询问用户如何处理 Else num1 = MsgBox("文件的内容已被改变。想保存文件吗?", vbYesNoCancel + 48, "记事本") Select Case num1 '用户选择保存,而且该文件从未保存过,则执行保存文件的操作 Case 6 If SaveFileDialog1.FileName = "" Then If SaveFileDialog1.ShowDialog Then rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If '如果该文件已存在,则弹出对话框,要求用户回答后再保存 End If '清空RTbook的内容,重置变量新建文本 fsave = True rtBook.Clear() SaveFileDialog1.FileName = "" Case 7 '如果用户选择不保存,则立即清空RTbook的内容,新建文本 rtBook.Clear() SaveFileDialog1.FileName = "" fsave = True Case Else '用户选择取消操作,则什么也不做,取消这次的新建操作 End Select End If End Sub Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileOpen.Click Dim num1 As Integer '如果文件内容还未保存,则弹出对话框,询问用户如何处理 If Not fsave Then num1 = MsgBox("文件的内容已被改变。想要保存文件吗?", vbYesNoCancel + 48, "记事本") Select Case num1 Case 6 '用户选择保存操作,而且该文件从未保存过,则输入文件名后进行保存 If SaveFileDialog1.FileName = "" Then If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If Else '若该文件已存在,则弹出对话框,用户选择保存后,直接保存 rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If '弹出【打开】对话框,执行打开文件的操作 fsave = True If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If Case 7 '用户选择不保存文件,则直接打开文本文件 If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) fsave = True End If Case Else '用户选择了取消操作 End Select Else '文本已被保存,直接打开文件进行操作 If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.LoadFile(OpenFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If fsave = True End If End Sub Private Sub MenuItem8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileSave.Click If SaveFileDialog1.FileName = "" Then '如果文件从未保存过,则弹出对话框,输入文件名后,直接保存 If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If Else '若该文件以保存过,则弹出对话框后,用户选择保存后,直接保存到原文件 rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) End If fsave = True End Sub Private Sub MenuItem9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileSaveAs.Click '现将保存对话框的标题改为“另存为” SaveFileDialog1.Title = "另存为" If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.PlainText) fsave = True End If '文件保存完成后,对话框标题再改为“另存” SaveFileDialog1.Title = "保存" End Sub Private Sub MenuItem11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExit.Click Close() End Sub Private Sub MenuItem12_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditUndo.Click rtBook.Undo() '用户撤消操作 End Sub Private Sub MenuItem14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditCut.Click rtBook.Cut() '剪切操作 End Sub Private Sub MenuItem19_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditSelectAll.Click rtBook.SelectAll() '全选操作 End Sub Private Sub MenuItem17_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuEditDelete.Click rtBook.Cut() End Sub Private Sub MenuItem20_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFont.Click If FontDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.Font = FontDialog1.Font '用户选择字体 End If End Sub Private Sub MenuItem21_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuBackcolor.Click If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.ForeColor = ColorDialog1.Color '选择文本的颜色 End If End Sub Private Sub MenuItem22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuForeColor.Click If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then rtBook.BackColor = ColorDialog1.Color '选择文本框的背景颜色 End If End Sub Private Sub MenuItem23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuHelpAbout.Click Dim 关于记事本 As Integer 关于记事本 = MsgBox("我的记事本 版本:1.0 版权所有(李振,吕红飞) 2004 http://www.hbsi.com.cn") End Sub

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧