1

VB6MDIアプリケーションがあります。非推奨のSwitchToThisWindow関数には応答しますが、ShowWindow関数とSetActiveWindow関数には応答しません。ShowWindowとSetActiveWindowは他のアプリケーションで使用できるため、正しく宣言されていることはわかっています。

編集:私の目標はこれらの機能を使用することではなく、フォーカスを私のアプリケーションからVB6アプリケーションに切り替えるのは簡単です。ですから、他の方法があれば、私はすべての耳です。

4

4 に答える 4

1

を使用してウィンドウが最小化されているかどうかを検出しIsIconic(hWnd)、 を送信ShowWindow(hWnd, SW_RESTORE)して最小化されたウィンドウを復元できます。最後に を使用SetForegroundWindow(hWnd)してウィンドウを前面に移動します。

Karl Peterson による優れた VB6をいくつか紹介します。

于 2010-02-24T09:51:57.263 に答える
1

SetActiveWindow現在のスレッドに接続されているウィンドウでのみ機能するため、別のアプリケーションをアクティブにするために使用することはできません。

を使用して、別のアプリケーションからウィンドウを最前面に移動できますSetForegroundWindow。これは、アプリケーションが現在フォアグラウンドにある場合にのみ機能しますが、あなたの質問からは、これが当てはまるようです。

于 2010-02-23T18:48:02.037 に答える
1

親ウィンドウをアクティブにした後、WM_MDIACTIVATE メッセージを送信して、特定の MDI 子ウィンドウをアクティブにする必要があります。MDI 子ウィンドウ ハンドルを手に入れるのは難しいはずです。

于 2010-02-23T18:51:30.713 に答える
0

ここで私の回答のコードの一部を使用できます: Correct way (in .NET) to switch the focus to another application、 set active window 宣言を set foreground window function に変更するだけです。 ShowWindow 関数。

Visual Basic 6 の定義

 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long 

Visual Basic .NET 定義

 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer 

C# 定義

[DllImport("user32.dll")] public static extern int SetForegroundWindow(int hwnd)  

あなたの目標がuser32.dllインポートを使用することではない場合、あなたのアプリケーションはターゲットアプリケーションにアクセスできないため、ウィンドウを使用する必要があるため、かなり面倒です。

または、ある種のプロセス間通信システム (キーワード: .net リモーティング) を使用して、フォーカス スニペットをターゲット アプリケーションにコーディングし、アプリケーションからフォーカス メッセージを 2 番目のアプリに送信するだけです

于 2010-02-25T21:20:51.323 に答える