Thursday, July 30, 2020

modify GDIGRAB (FFMPEG) to select windows by HWND id

if (!strncmp(filename, "title=", 6)) {
        name = filename + 6;
        hwnd = FindWindow(NULL, name);
        if (!hwnd) {
            av_log(s1, AV_LOG_ERROR,
                "Can't find window '%s', aborting.\n", name);
            ret = AVERROR(EIO);
            goto error;
        }
        if (gdigrab->show_region) {
            av_log(s1, AV_LOG_WARNING,
                "Can't show region when grabbing a window.\n");
            gdigrab->show_region = 0;
        }
    } else if (!strncmp(filename, "hwnd=", 5)) {
        name = filename + 5;
        hwnd = strtol(name, NULL, 16);
        //hwnd = 0x21230;

        if (!hwnd) {
            av_log(s1, AV_LOG_ERROR,
                "Can't find HWND window '%s', aborting.\n", name);
            ret = AVERROR(EIO);
            goto error;
        }
        if (gdigrab->show_region) {
            av_log(s1, AV_LOG_WARNING,
                "Can't show region when grabbing a window.\n");
            gdigrab->show_region = 0;
        }
    } else if (!strcmp(filename, "desktop")) {
        hwnd = NULL;
    } else {
        av_log(s1, AV_LOG_ERROR,
               "Please use \"desktop\" or \"title=\" to specify your target.\n");
        ret = AVERROR(EIO);
        goto error;
    }