zoukankan      html  css  js  c++  java
  • 在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。

  • 相关阅读:
    Codeforces Round #325D (Div. 2) (DP)
    Codeforces Round #382 (Div. 2) (模拟|数学)
    HDU5950-Recursive sequence(矩阵快速幂)
    9. javacript高级程序设计-客户端检测
    8. javacript高级程序设计-BOM
    7. javacript高级程序设计- 函数表达式
    6. javacript高级程序设计-面向对象设计
    Js注释
    5. javacript高级程序设计-引用类型
    4. javacript高级程序设计-变量、作用域和内存问题
  • 原文地址:https://www.cnblogs.com/China3S/p/3265986.html
Copyright © 2011-2022 走看看