在編寫Delphi的應(yīng)用程序中,常常涉及對(duì)其它Windows應(yīng)用程序的操作。例如,在數(shù)據(jù)庫的管理系統(tǒng)中,財(cái)務(wù)人員需要使用計(jì)算器,即可調(diào)用Windows內(nèi)含的計(jì)算器功能,若每次使用,均通過“開始/程序/附件/計(jì)算器”來打開計(jì)算器,顯然是非常繁瑣的,當(dāng)然可以考慮在桌面上建立一“計(jì)算器”的快捷方式,且定義一熱鍵,需要使用計(jì)算器時(shí),就按下這個(gè)熱鍵來打開“計(jì)算器”。但由于“計(jì)算器”是一個(gè)“非模式”窗口程序,即每運(yùn)行一次計(jì)算器,就會(huì)打開一個(gè)“計(jì)算器”窗口,這樣的結(jié)果是桌面上出現(xiàn)了幾十個(gè)“計(jì)算器”,不僅大量增加了系統(tǒng)內(nèi)存的開銷,而且也不方便用戶的操作。在Delphi中可較輕易地控制,效果非常完美。下面就兩個(gè)主要問題提出實(shí)現(xiàn)方法。 1.如何控制設(shè)計(jì)? 新建一表單,在表單中放入兩個(gè)按鈕,其Caption分別為“打開”(即啟動(dòng)“計(jì)算器”)和“關(guān)閉”(退出結(jié)束),且為它們分別添加Click事件處理。詳見表單Form1及單元文件Unit1。 其中,最主要的幾條語句有: fwnd:=FindWindow('SciCalc','計(jì)算器'); 函數(shù)原型為(詳見Delphi的幫助): HWND FindWindow( LPCTSTR lpClassName, // pointer to class name LPCTSTR lpWindowName // pointer to window name ); 此處,'SciCalc' 為計(jì)算器的類名,'計(jì)算器'為計(jì)算器的窗口標(biāo)題} setWindowPos(fwnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW or SWP_NOSIZE or SWP_NOMOVE); 函數(shù)原型為: 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); //顯示已打開的「計(jì)算器」 函數(shù)原型為: BOOL ShowWindow( HWND hWnd, // handle of window int nCmdShow // show state of window ); Ret:=WinExec('c:windowscalc.exe',SW_SHOWNORMAL); //啟動(dòng)計(jì)算器 函數(shù)原型為: UINT WinExec( LPCSTR lpCmdLine, // address of command line UINT uCmdShow // window style for new application ); 運(yùn)行“計(jì)算器”程序并檢測(cè)返回值(從而利用返回值來判斷可能發(fā)生的錯(cuò)誤)