2

サイズを変更する機能が必要な外部実行プログラムがあります。私にとってキッカーは、タイトルの一部がそのインスタンスに関連するバージョンとその他の特定の情報であることです. バージョン間で一貫している必要がある部分文字列を知っています。Findwindow() 関数を試してみました。これは、タイトルの正確な文言がある場合はうまく機能しますが、一部しかない場合は機能しません。EnumWindows も試してみましたが、同じ制限があると思います (うまくいきませんでした)。私ができる最も簡単なことは(可能であれば)、サイズ変更を行うために画像名からウィンドウハンドルを取得することだと思います。アイデア?

4

2 に答える 2

4

これは、MSVS 2010 でテストしたばかりのコードで、完全に機能します。

#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include <windows.h>


BOOL CALLBACK FindWindowBySubstr(HWND hwnd, LPARAM substring)
{
    const DWORD TITLE_SIZE = 1024;
    TCHAR windowTitle[TITLE_SIZE];

    if (GetWindowText(hwnd, windowTitle, TITLE_SIZE))
    {
        //_tprintf(TEXT("%s\n"), windowTitle);
        // Uncomment to print all windows being enumerated
        if (_tcsstr(windowTitle, LPCTSTR(substring)) != NULL)
        {
            // We found the window! Stop enumerating.
            return false;
        }
    }
    return true; // Need to continue enumerating windows
}

int main() 
{
    const TCHAR substring[] = TEXT("Substring");
    EnumWindows(FindWindowBySubstr, (LPARAM)substring);
}
于 2012-09-13T15:19:35.940 に答える
1

EnumWindows は、このために特別に意図されていました。EnumWindows に渡す独自のコールバック関数を作成すると、列挙するウィンドウごとにコールバック関数が呼び出され、ウィンドウの hwnd に渡されます。コールバック関数内で GetWindowText を呼び出して、ウィンドウ タイトルを取得し、そのテキストを他のテキストと同様に検索できます。そのコードでどのような問題がありましたか? 投稿してみませんか?

于 2012-09-13T15:09:56.867 に答える