C# 创建一个无路径的记事本 并在编辑区添加字符串

Anod 2012-06-20 04:37:47
C# 创建一个无路径的记事本 并在编辑区添加字符串 调试半天找不到问题所在

//引用
using System.Runtime.InteropServices;
using System.Diagnostics;
//在类中声明外部函数
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Winapi)]
internal static extern IntPtr GetFocus();
[DllImport("user32.dll", EntryPoint = "FindWindowEx")]
internal static extern IntPtr FindWindowEx(IntPtr hWndParent, IntPtr hWndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user32.dll",EntryPoint="SendMessageA")]
internal static extern int SendMessage(IntPtr hWnd, int msg, IntPtr wparam, string lparam);

// 声明消息标识
public const int WM_SETTEXT = 0x000C;
//在Button_click事件中添加以下代码
Process.Start("Notepad");
IntPtr myNotePad = IntPtr.Zero;
myNotePad = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "无标题 - 记事本", null);
IntPtr myNote = IntPtr.Zero;
myNote = FindWindowEx(myNotePad, IntPtr.Zero, "Edit", null);
//SendMessage(myNote, WM_SETTEXT, IntPtr.Zero, strData);
SendMessage(myNote, WM_SETTEXT, IntPtr.Zero, "display str");

// 现象是可以打开记事本,但不能添加字符串进去,调试时发现 myNotePad 始终=0,myNote 值是变化的六位数。
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dx_Happy 2013-10-10
  • 打赏
  • 举报
回复
这个始终是一行文字,写第二条就把第一条冲掉了
陈大欠 2013-03-25
  • 打赏
  • 举报
回复
引用 2 楼 Return_false 的回复:
click事件里内容修改如下C# code?123456789101112131415161718192021222324252627282930313233343536373839#region [ 启动记事本 ] System.Diagnostics.Process Proc; try ……
哈哈,谢谢这位哥们哈,帮了我大忙了.
Anod 2012-06-21
  • 打赏
  • 举报
回复
汗,修改的地方加红加不上。我没有用while,担心出错出不来。

不过有时候还是写入不进去,但没有任何 调试的时候可以写进去,猜测是Proc.Start()操作需要一定的时间开销,后面加上Sleep小时间后解决
Anod 2012-06-21
  • 打赏
  • 举报
回复
谢谢2L 不过还是不明白为什么FindwindowEx为什么找不到,之前试过使用MainWindowHandle异常时关闭记事本,就是没想到用来代替查找窗口,哎 钻牛角尖了,,,加点小修改
#region [ 启动记事本 ]

System.Diagnostics.Process Proc = new Process();

try
{
// 启动记事本
Proc = new System.Diagnostics.Process();
Proc.StartInfo.FileName = "notepad.exe";
Proc.StartInfo.UseShellExecute = false;
Proc.StartInfo.RedirectStandardInput = true;
Proc.StartInfo.RedirectStandardOutput = true;

Proc.Start();
}
catch
{
Proc.CloseMainWindow();
Proc = null;
}

#endregion

#region [ 传递数据给记事本 ]

if (Proc != null)
{
// 调用 API, 传递数据
while (Proc.MainWindowHandle == IntPtr.Zero)
{
Proc.Refresh();
}

IntPtr vHandle = FindWindowEx(Proc.MainWindowHandle, IntPtr.Zero, "Edit", null);

// 传递数据给记事本
SendMessage(vHandle, WM_SETTEXT, IntPtr.Zero, "display str");
}

#endregion
ParanoidKing 2012-06-20
  • 打赏
  • 举报
回复
换成FindWindow试试
myNotePad = FindWindow("无标题 - 记事本", null);
  • 打赏
  • 举报
回复
click事件里内容修改如下
#region [ 启动记事本 ]

System.Diagnostics.Process Proc;

try
{
// 启动记事本
Proc = new System.Diagnostics.Process();
Proc.StartInfo.FileName = "notepad.exe";
Proc.StartInfo.UseShellExecute = false;
Proc.StartInfo.RedirectStandardInput = true;
Proc.StartInfo.RedirectStandardOutput = true;

Proc.Start();
}
catch
{
Proc = null;
}

#endregion

#region [ 传递数据给记事本 ]

if (Proc != null)
{
// 调用 API, 传递数据
while (Proc.MainWindowHandle == IntPtr.Zero)
{
Proc.Refresh();
}

IntPtr vHandle = FindWindowEx(Proc.MainWindowHandle, IntPtr.Zero, "Edit", null);

// 传递数据给记事本
SendMessage(vHandle, WM_SETTEXT, IntPtr.Zero, "display str");
}

#endregion
Anod 2012-06-20
  • 打赏
  • 举报
回复
木有大神在啊?求解答啊
企业人事管理系统使用说明书 配置源程序 附加数据库SQL Server 2005 (1)将TM\07\PWMS\PWMS\DataBase文件夹中的db_PWMS.mdf和db_PWMS_log.ldf文件拷贝到SQL Server 2005安装路径下的MSSQL.1\MSSQL\Data目录下。 (2)选择开始/程序/Microsoft SQL Server 2005/SQL Server Management Studio项,进入到“连接到服务器”页面,如图1.1所示。 图1.1 连接到服务器 (3)在“服务器名称”下拉列表中选择SQL Server 2005服务器名称,然后单击【连接】按钮。 (4)在“对象资源管理器”中右键单击“数据库”节点,在弹出的菜单中选择“附加”项,弹出“附加数据库”对话框,如图1.2所示。 图1.2 附加数据库 (5)单击【添加】按钮,在弹出的“定位数据库文件”对话框中选择数据库文件路径,如图1.3所示。 图1.3 定位数据库文件 (6)依次单击【确定】按钮,完成数据库附加操作。 更改连接SQL Server 2005数据库服务器的名称 (1)打开源程序路径下TM\07\PWMS\PWMS.sln,进入到Visual Studio 2005开发环境中。 (2)在解决方案资源管理器中打开DataClass文件夹中的MyMeans.cs类文件,将“建立数据库连接”方法中的连接字符串的Data Source属性设置为本机SQL Server 2005服务器名称,然后单击【保存】按钮,保存所做的更改。 (3)重新生成后,即可运行使用本程序。 使用说明 系统介绍 根据企业对人事管理的要求,本系统可以实现以下目标:  操作简单方便、界面简洁美观。  在查看员工信息时,可以对当前员工的家庭情况、培训情况进行添加、修改、删除的操作。  方便快捷的全方位数据查询。  按照指定的条件对员工进行统计。  可以将员工信息以表格的形式插入到Word文档中。  实现数据库的备份、还原及清空的操作。  由于该系统的使用对象较多,要有较好的权限管理。  能够在当前运行的系统中重新进行登录。  系统运行稳定、安全可靠。 操作注意事项 (1)本系统用户名为:Tsoft,密码为:111。 (2)实例执行文件位置:TM\07\PWMS\PWMS\bin\Debug\ PWMS.exe (3)程序可执行文件目录中,必须存在bar文件夹。否则,以默认路径对数据库进行备份时,将无法找到备份路径。 操作流程 (1)用户输入用户名、密码后,进入企业人事管理界面如图1.4所示。 图1.4 企业人事管理 (2)单击“基础信息管理”菜单栏中的“数据基础”/“民族类别设置”命令,对民族类别信息进行添加、修改、删除及查看操作。 (3)单击“基础信息管理”菜单栏中的“数据基础”/“职工类别设置”命令,对职工类别信息进行添加、修改、删除及查看操作。 (4)单击“基础信息管理”菜单栏中的“数据基础”/“文化程度设置”命令,对文化水平信息进行添加、修改、删除及查看操作。 (5)单击“基础信息管理”菜单栏中的“数据基础”/“政治面貌设置”命令,对政治面貌信息进行添加、修改、删除及查看操作。 (6)单击“基础信息管理”菜单栏中的“数据基础”/“部门类别设置”命令,对部门类别信息进行添加、修改、删除及查看操作。 (7)单击“基础信息管理”菜单栏中的“数据基础”/“工资类别设置”命令,对工资类别信息进行添加、修改、删除及查看操作。 (8)单击“基础信息管理”菜单栏中的“数据基础”/“职称类别设置”命令,对职称类别信息进行添加、修改、删除及查看操作。 (9)单击“基础信息管理”菜单栏中的“数据基础”/“奖惩类别设置”命令,对奖惩类别信息进行添加、修改、删除及查看操作。 (10)单击“基础信息管理”菜单栏中的“数据基础”/“记事本类别设置”命令,对记事本类别信息进行添加、修改、删除及查看操作。 (11)单击“基础信息管理”菜单栏中的“员工提示信息”/“员工生日提示”命令,对员工生日提示时间进行设置。 (12)单击“基础信息管理”菜单栏中的“员工提示信息”/“员工合同提示”命令,对员工合同提示日期进行设置。 (13)单击“人事管理”菜单栏中的“人事档案浏览”命令,通过该窗体,可对职工基本信息、工作简历、家庭关系、培训记录、奖惩记录和个人简历等信息进行添加、修改、删除及查询操作。 (14)单击“人事管理”菜单栏中的“人事资料查询”命令,对人事资料信息进行查询操作。 (15)单击“人事管理”菜单栏中的“人事资料统计”命令,对人事资料信息进行统计操作。 (16)单击“备忘记录”菜单栏中的“日常记事”命令,对日常记事信息进行添加、修改、删除及

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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