倍率 API が初期化され、「MagSetFullscreenColorEffect」メソッドが呼び出されると、呼び出した配列に一致するように画面の色が自動的に変更されます。これには、比較的少ないコードが必要です。
InitializeComponent();
if (!NativeMethods.MagInitialize())
{
NativeMethods.MagInitialize();
}
NativeMethods.MagSetFullscreenColorEffect(Negative);
これにより、画面がすぐにネガティブになり、Magnification API が既にフルスクリーンのクリックスルー ウィンドウを作成していることを意味します。このウィンドウのハンドルを取得する方法を知りたいです。それを参照して、色を新しい配列 (IE、「NotNegative」) に変更します。
以下のコードは、「GetForeGroundWindow」コマンドを使用して倍率 API HWND をキャプチャし、「MagSetColorEffect」メソッドを使用してそのウィンドウの色を変更しようとする場所を示しています。これはうまくいきませんでした。質問:
- Magnification API が使用しているハンドルを見つけるにはどうすればよいですか?
- Windows API はいつこのハンドル/ウィンドウを作成しますか? 初期化中、またはmagsetfullscreenメソッドで?
- 以下のコードでウィンドウの色が変更されないのはなぜですか?
注: MagnificationSetFullscreen を使用して色を変更できることはわかっています。また、拡大 API の概要で説明されているように、独自の拡大ウィンドウを作成できることも知っています。しかし、私は怠惰で、API が既に作成しているように見えるウィンドウを使用したいと考えています。
public MainWindow()
{
InitializeComponent();
if (!NativeMethods.MagInitialize())
{
NativeMethods.MagInitialize();
}
Negative = new float[] {
-1.0f, 0.0f, 0.0f, 0.0f, 0.0f ,
0.0f, -1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, -1.0f, 0.0f, 0.0f ,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f ,
1.0f, 1.0f, 1.0f, 0.0f, 1.0f};
NotNegative = new float[] {
0.0f, 0.0f, 0.3f, 0.0f, 0.0f ,
0.0f, 0.0f, 0.6f, 0.0f, 0.0f,
0.0f, 0.0f, 0.1f, 0.0f, 0.0f ,
0.0f, 0.0f, 0.0f, 1.0f, 0.0f ,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
//NativeMethods.MagSetFullscreenColorEffect(Negative);
hwndMag = NativeMethods.GetForegroundWindow();
NativeMethods.MagSetColorEffect(hwndMag, NotNegative);
NativeMethods.ShowWindow(hwndMag, 3);
}