在Delphi中如何控制其它应用程序窗口

2016-01-29 14:15 195 1 收藏

在Delphi中如何控制其它应用程序窗口,在Delphi中如何控制其它应用程序窗口

【 tulaoshi.com - 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。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/) 

来源:http://www.tulaoshi.com/n/20160129/1492872.html

延伸阅读
标签: PHP
一、 XML简介 XML(可扩展的标注语言)是一种W3C标准,主要用于Web应用程序和服务器之间实现容易的交互、数据的存储与使用。 使用XML标准编码的数据具有能容易被人和计算机解释的意义和结构。XML数据是平台和应用程序独立的。不用多说,这本身就使XML成为适合于互联网的一个理想的数据交换格式(事实上,它正是因这一用途...
标签: Delphi
  随着Internet/intranet的发展,多层应用和分布式瘦客户数据库应用程序逐渐得到广泛应用。在多层应用的开发方式中,Delphi提供了Midas构件,第三方提供了Asta 、Midware等。经过使用,相比较而言,Asta所提供的构件易学易用方便灵巧,客户端程序无须任何数据库引擎或动态连结库即可方便的实现多层应用,且客户、服务器可实现实时信息...
标签: Java JAVA基础
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已...
Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处,但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中,研究科学家蒋清野讨论了两个项目,它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更轻易。 虽然这两个项目仍然处于萌芽状态,但是它们都显示了良好的前景,并已经成为一些...
标签: Delphi
  一、引言 近些年来,随着互联网的普及和推广,传统的单机模式和局域中的c/s模式的应用程序越来越不能满足信息共享的要求。因此,一种新的基于浏览器的b/s的应用程序的开发方式被提了出来。新的开发方案以其客户端的免维护、免配置、程序能根据服务器的信息能够自动更新升级;服务器端多层模式的应有提高处理的效率和安全性越...

经验教程

500

收藏

100
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部