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

原创 2001年02月14日 08:18:00

 

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


在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:/windows/calc.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中如何控制其它应用程序窗口

2001年02月14日 08:18:00 在Delphi中如何控制其它应用程序窗口 在Delphi中如何控制其它应用程序窗口 广东省农业管理干部学院 陈建兵 在编写Delphi的应用程序中,...
  • softart
  • softart
  • 2007年10月27日 07:50
  • 298

Delphi 控制外部程序

最近做一个项目,需要从外部控制挰序,好比做一个外挂,要获取游戏里各个控件的句柄,然后对它进行操作。在网上查了查,这方面的例子无一例外都是C++的,找不到Delphi的,在几个网站上问了,回答的人都说不...
  • QDseashore
  • QDseashore
  • 2012年07月30日 21:20
  • 1045

Delphi调用一个外部程序时,如何把外部程序的窗体放在主程序窗体的Panel上?

uses shellapi; ... procedure TForm1.Button2Click(Sender: TObject); var vh: HWND; begin ShellEx...
  • xieyunc
  • xieyunc
  • 2013年12月16日 21:35
  • 2223

如何控制其他程序窗体上的窗口控件(下)

实在不好意思,写了上,中后,由于一直忙于项目,就没有完成最关键的工作。导致很多网友给我发邮件询问答案。同时对某些人发表的评论感觉到很伤心,本来就申明了文章写的很浅薄无知,很罗里八嗦的,并且将自己的心得...
  • VBEND
  • VBEND
  • 2005年01月11日 10:23
  • 1642

控制Delphi的窗口显示位置

在使用Delphi进行工作时,也许需要将多个独立的窗口放在一个主窗口中,但有不打算使用多文档界面(MDI),那么下面介绍的方法可能对你会有所启发。直接控制窗口的产生过程,并指定它的容器对象即Paren...
  • jackalfly
  • jackalfly
  • 2012年04月09日 12:01
  • 1395

在Delphi的窗口单元中,如何调用其它窗口的单元。

http://www.cnblogs.com/champion8/p/5569930.html 在Delphi的窗口单元中,如何调用其它窗口的单元。(转载)  .  在Delphi中简单...
  • y13156556538
  • y13156556538
  • 2016年10月21日 09:59
  • 2046

DELPHI在一个窗体中打开另外一个窗体的问题

  今天在一个MDICHILD窗体中通过一个按钮弹出另外一个窗体的时候,发现了一个问题,提示"Cannot make a visible window modal",查了半天的错,最后终于发现只需要将...
  • Rubi
  • Rubi
  • 2006年03月23日 21:25
  • 3349

DELPHI中窗体的一些属性的作用

Align属性:控制窗体显示时的对齐方式(注:是相对于父窗体的对齐方式。如果该窗体是主窗体则没有父窗体)默认值为alNone.其他值有:alBottom(让该窗体显示在父窗体的底部),alClient...
  • xiao_jun_0820
  • xiao_jun_0820
  • 2008年03月08日 14:42
  • 3006

Delphi 利用钩子实现QQ聊天窗口的修改(4)

//钩子类型 idHook 选项: WH_MSGFILTER      = -1; {线程级; 截获用户与控件交互的消息} WH_JOURNALRECORD  = 0;  {系统级; 记录所...
  • lailai186
  • lailai186
  • 2013年04月10日 14:44
  • 2071

Delphi 程序窗口动画及正常排列平铺的实现

注:此文已有更好的方法,稍后发布2004年9月16日   Delphi的确是功能非常强的RAD工具,所以我下面要说的不算是“缺陷”的一个小问题丝毫不会影响它在程序员心目中的地位,相反,大家会发现,它的...
  • CathyEagle
  • CathyEagle
  • 2004年09月16日 10:25
  • 2315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Delphi中如何控制其它应用程序窗口
举报原因:
原因补充:

(最多只允许输入30个字)