程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi中如何控制其它應用程序窗口

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

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved