2

Winforms アプリ。.Net 3.5。

C# アプリケーションからユーザーのデスクトップにフォーカスを設定する必要があります (デスクトップでのマウス クリックをシミュレートするのとほぼ同じです)。

誰かがC#でこれを行う方法を教えてもらえますか? デスクトップにフォーカスを設定したいだけなので、アプリケーションにフォーカスがなくなりますが、アプリケーション内からこれを実行したいと考えています。

編集:以下の回答は、フォーカスをデスクトップに設定することで機能しますが、ユーザーのデスクトップで開いているすべてのウィンドウを最小化します。

代わりに、デスクトップで次に開いているウィンドウにフォーカスを設定する方法はありますか? アプリケーションからフォーカスを外したいだけです (アプリケーションを最小化したり非表示にしたりせずに)。フォーカスを別の場所に移動したいだけです。ユーザーが開いているすべてのウィンドウ/アプリケーションを最小化する場合、デスクトップは最適な選択ではなかった可能性があります。

4

2 に答える 2

1

これでうまくいくはずです。

using System; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication1 { 
class Program { 
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 
    [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)] 
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); 

    const int WM_COMMAND = 0x111; 
    const int MIN_ALL = 419; 
    const int MIN_ALL_UNDO = 416; 

    static void Main(string[] args) { 
        IntPtr lHwnd = FindWindow("Shell_TrayWnd", null); 
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);  
        System.Threading.Thread.Sleep(2000); 
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero); 
    } 
} 
} 

次のウィンドウを取得

これら 2 つのコード例はまだ準備できていませんが、両方へのリンクを提供します。あなたがする必要がある最初の考えは、呼び出すことGetWindowです。SwitchToThisWindowそれを行った後、 から受け取ったポインターを渡して呼び出したいと思うでしょうGetWindow

于 2012-09-21T17:22:23.983 に答える
0

この COM オブジェクトをプロジェクトに追加できます。

Microsoft Shell コントロールとオートメーション

そして、次のように呼び出します。

Shell32.ShellClass shell = new Shell32.ShellClass();
shell.MinimizeAll();

これにより、すべてのウィンドウが最小化され、デスクトップがフォーカスされます。それ以外の場合、ウィンドウがフルスクリーンでない場合は、次を使用してマウスクリックをシミュレートできます。

//This is a replacement for Cursor.Position in WinForms
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;

//This simulates a left mouse click
public static void LeftMouseClick(int xpos, int ypos)
{
    SetCursorPos(xpos, ypos);
    mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}

ウィンドウの起動位置と高さ/幅を調べて座標を計算し、利用可能なスペース (実際にはデスクトップになります) を選択できます。

于 2012-09-21T17:24:27.460 に答える