当前位置:首页 > 软件开发 > dev
firefox

在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。

 ↓相关文章:
© 2006-2008 All Rights Reserved