Delphi で他のアプリケーション ウィンドウを制御する方法
Delphi で他のアプリケーション ウィンドウを制御する方法
Chen Jianbing、広東省農業管理幹部大学
Delphi アプリケーションの作成には、他の Windows アプリケーションでの操作が含まれることがよくあります。たとえば、データベース管理システムでは、財務担当者が電卓を使用する必要がある場合、Windows に含まれる電卓機能を使用するたびに、「スタート/プログラム/アクセサリ/電卓」から電卓を開く必要があります。もちろん、これは非常に面倒ですが、デスクトップに「電卓」へのショートカットを作成し、電卓を使用する必要がある場合は、このホットキーを押して「電卓」を開くことを検討できます。ただし、「電卓」は「非モーダル」ウィンドウ プログラムであるため、電卓を実行するたびに「電卓」ウィンドウが開きます。その結果、デスクトップ上に数十個の「電卓」が表示されます。システムメモリのオーバーヘッドが増加し、ユーザーの操作が不便になります。 Delphi で簡単に制御でき、効果は完璧です。以下に 2 つの主な問題に対する実装方法を提案します。
1.デザインをどうやってコントロールするのか?
新しいフォームを作成し、フォーム内に「開く」(つまり「電卓」を開始する)と「閉じる」(終了と終了)のキャプションを持つ2つのボタンを配置し、それぞれにClickイベント処理を追加します。詳細については、フォーム Form1 およびユニット ファイル Unit1 を参照してください。
その中で、最も重要な記述は次のとおりです。
fwnd:=FindWindow('SciCalc','電卓');
関数のプロトタイプは次のとおりです (詳細については、Delphi ヘルプを参照してください)。
HWND FindWindow(
LPCTSTR lpClassName, // クラス名へのポインタ
LPCTSTR lpWindowName // ウィンドウ名へのポインタ
);
ここで、「SciCalc」は電卓のクラス名、「Calculator」は電卓のウィンドウ タイトルです。}
setWindowPos(fwnd,HWND_NOTOPMOST,0,0,0,0,SWP_SHOWWINDOW または SWP_NOSIZE または SWP_NOMOVE);
関数のプロトタイプは次のとおりです。
BOOL SetWindowPos(
HWND hWnd, // ウィンドウのハンドル
HWND hWndInsertAfter, // 配置順序ハンドル
int X, // 水平位置
int Y, // 垂直位置
int cx, // 幅
int cy, // 高さ
UINT uFlags // ウィンドウ配置フラグ
);
ShowWindow(fwnd,SW_RESTORE); // 開いている「電卓」を表示します。
関数のプロトタイプは次のとおりです。
BOOL ショーウィンドウ(
HWND hWnd, // ウィンドウのハンドル
int nCmdShow // ウィンドウの状態を表示
);
Ret:=WinExec('c:windowscalc.exe',SW_SHOWNORMAL); //電卓を起動します。
関数のプロトタイプは次のとおりです。
UINT WinExec(
LPCSTR lpCmdLine, // コマンドラインのアドレス
UINT uCmdShow // 新しいアプリケーションのウィンドウ スタイル
);
電卓プログラムを実行し、戻り値を確認します (これにより、戻り値を使用して考えられるエラーを判断します)。
2.アプリケーションの「クラス名」を明確にするにはどうすればよいですか?
アプリケーションを制御するには、まずアプリケーションの「クラス名」を明確にする必要があります。 「クラス」の概念は、Delphi プログラムではすでに非常に明確です。たとえば、新しいフォーム Form1 を作成し、そのフォームの「クラス名」は TForm1 です。では、他の Windows プログラムの「クラス名」を決定するにはどうすればよいでしょうか?
幸いなことに、Delphi は Winsight と呼ばれる実用的なツールを提供しています。これは、モンスターがどこにいてもその「クラス名」を明らかにする鏡のようなものです。
Winsight の使用方法は次のとおりです。
⑴ Winsight を実行します (プログラム名は ws32.exe、メイン ファイル delphi32.exe と同じディレクトリにあります) (図①を参照)。
⑵ 図②に示すように、Winsight メニューから「Spy」の「Follow Focus」を選択します。
⑶「計算機」プログラムを実行します。
⑷図③のようにWinsightにターゲットが表示されます。
ソフトウェア環境:中国語Win98/中国語Delphi5.0。