在Delphi中如何控制其它应用程序窗口
在编写delphi的应用程序中,常常涉及对其它windows应用程序的操作。例如,在数据库的管理系统中,财务人员需要使用计算器,即可调用windows内含的计算器功能,若每次使用,均通过“开始/程序/附件/计算器”来打开计算器,显然是非常繁琐的,当然可以考虑在桌面上建立一“计算器”的快捷方式,且定义一热键,需要使用计算器时,就按下这个热键来打开“计算器”。但由于“计算器”是一个“非模式”窗口程序,即每运行一次计算器,就会打开一个“计算器”窗口,这样的结果是桌面上出现了几十个“计算器”,不仅大量增加了系统内存的开销,而且也不方便用户的操作。在delphi中可较轻易地控制,效果非常完美。下面就两个主要问题提出实现方法。1.如何控制设计?
新建一表单,在表单中放入两个按钮,其caption分别为“打开”(即启动“计算器”)和“关闭”(退出结束),且为它们分别添加click事件处理。详见表单form1及单元文件unit1。
其中,最主要的几条语句有:
fwnd:=findwindow(scicalc,计算器);
函数原型为(详见delphi的帮助):
hwnd findwindow(
lpctstr lpclassname, // pointer to class name
lpctstr lpwindowname // pointer to window name
);
此处,scicalc 为计算器的类名,计算器为计算器的窗口标题}
setwindowpos(fwnd,hwnd_notopmost,0,0,0,0,swp_showwindow or swp_nosize or swp_nomove);
函数原型为:
bool setwindowpos(
hwnd hwnd, // handle of window
hwnd hwndinsertafter, // placement-order handle
int x, // horizontal position
int y, // vertical position
int cx, // width
int cy, // height
uint uflags // window-positioning flags
);
showwindow(fwnd,sw_restore); //显示已打开的「计算器」
函数原型为:
bool showwindow(
hwnd hwnd, // handle of window
int ncmdshow // show state of window
);
ret:=winexec(c:windowscalc.exe,sw_shownormal); //启动计算器
函数原型为:
uint winexec(
lpcstr lpcmdline, // address of command line
uint ucmdshow // window style for new application
);
运行“计算器”程序并检测返回值(从而利用返回值来判断可能发生的错误)
2.如何明确应用程序的“类名”?
要控制应用程序,首先必须明确应用程序的“类名”。“类”的概念,delphi的程序已经非常清楚,如:新建一表单form1,该表单的“类名”为tform1。那么其它windows程序的“类名”如何确定呢?
值得一喜的是,delphi提供了一实用工具winsight,它正如一面照妖镜,不论何方妖怪,均会显露出它们的“类名”。
使用winsight的方法如下:
⑴运行winsight(程序名为ws32.exe,与主文件delphi32.exe同一目录),见图①;
⑵从winsight的菜单中选择“间谍”中的“跟随焦点”,见图②;
⑶运行“计算器”程序;
⑷在winsight中显示出了目标,如图③所示。
软件环境:中文win98/中文delphi5.0。
下一篇:装扮工具提示条
↓相关文章:
- · 装扮工具提示条
- · 如何在状态栏中加入图标(或图片),还有动态的时间
- · 利用Delphi编写Windows外壳扩展
- · 利用未公开函数实现Shell操作监视
- · 利用Delphi消息处理建立类似Windows开始菜单
- · Delphi中的图形显示技巧
- · Form产生时的事件次序;
- · Delphi中布尔类型辨析
- · AccesS密码的打击
- · Delphi嵌入式汇编一例
- · 在Delphi中实现任意形状的窗体
- · sql server 2005中的DDL触发器
- · asp.net 2.0下嵌套masterpage页的可视化编辑
- · PHP程序加速探索之缓存输出
- · 用C#代码编写的SN快速输入工具
- · (PHP)模板引擎Smarty介绍
- · 用PHP操纵Oracle的LOB类型的数据
- · C# 2.0中泛型编程初级入门教程
- · asp.net 2.0中加密web.config
- · ADO.NET操纵数据库
- · 关于asp.net c#中对cookie的操作
- · asp.net 2.0里当readonly遇上enableviewstate=false
- · C# 2.0与泛型
- · 让3721也无奈的弹出窗口(代码)
- · 玩透9种网页弹出窗口(精)
- · 网站左右两边浮动广告JS代码
- · 一个IP只提示一次设为首页的代码
- · 常用ASP脚本程序集锦*精(适合初学者)
- · 鼠标自动移动/点击
- · PHP程序加速探索之加速工具软件
- · SQLServer2000数据访问基类
- · 图解MySQL数据库的安装和操作
- · 一些ASP初学者常用的代码
- · ASP经典问答收藏之一
- · 一段防注入的通用脚本
- · 简单的防盗链(代码)
- · PHP窜红:革命尚未成功 Java仍需努力
- · 使用PHP编写基于Web的文件管理系统
- · 理解PHP中的MVC编程之控制器
- · 理解PHP中的MVC编程之MVC框架简介
- · SQL Server Express 数据库自动部署问题及解决
- · 用PHP文件上传的具体思路及实现
- · 回顾与展望PHP 5.0的变化与PHP 6.0展望
- · 一个产生中文累计数的代码片断
- · 在SQL Server 2005中解决死锁
- · 30分钟正则表达式指导
- · 不算不知道 44% 数据库开发者使用MySQL
- · 立即释放.net下的com组件
- · XHTML的目标,规则和细节
- · SQL Server 2005 提供的分页查询支持
- · ASP.NET程序中常用的三十三种代码
- · Sql server存储过程和C#分页类简化你的代码
- · SQL Server 2005新功能-TSQL
- · 在SQL Server 2005中编辑SQL Server 2000 DTS
- · .NET 连接到 Oracle的oci.dll加载错误解决方案
- · 如何在调用线程的时候传递参数
- · 专家预言:PHP将比Java更好更受欢迎
- · 在IIS6.0下ASP .NET 的版本冲突问题
- · 解决SqlTransaction用尽的问题(SQL处理超时)
- · 以前编写Like谓词被忽略的使用方法

