// magpiecmdrunner.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include #include typedef BOOL (*Initialize)( UINT logLevel, const char* logFileName, int logArchiveAboveSize, int logMaxArchiveFiles ); typedef const char* (* Run)( HWND hwndSrc, const char* effectsJson, UINT flags, UINT captureMode, float cursorZoomFactor, // 负数和 0:和源窗口相同,正数:缩放比例 UINT cursorInterpolationMode, // 0:最近邻,1:双线性 int adapterIdx, UINT multiMonitorUsage, // 0:最近 1:相交 2:所有 UINT cropLeft, UINT cropTop, UINT cropRight, UINT cropBottom ); int magpiewmain(int argc, wchar_t* wargv[]) { UINT codepage = GetACP(); char** argv = new char* [argc]; for (int i = 0; i < argc; i++) { int length = WideCharToMultiByte(codepage, 0, wargv[i], -1, NULL, 0, NULL, NULL); argv[i] = new char[length]; WideCharToMultiByte(codepage, 0, wargv[i], -1, argv[i], length, NULL, NULL); } FILE* fp; fopen_s(&fp, argv[1], "r"); if (fp == 0)return 0; char cache[4096] = { 0 }; char magpiepath[4096] = { 0 }; HWND m_hWnd; char effect[4096] = { 0 }; int flags, captureMode, CursorInterpolationMode, AdapterIdx, MultiMonitorUsage; float CursorZoomFactor; fgets(magpiepath, 4096, fp); magpiepath[strlen(magpiepath) - 1] = 0; fgets(cache, 4096, fp); sscanf_s(cache, "%lld\n", &m_hWnd); fgets(effect, 4096, fp); effect[strlen(effect) - 1] = 0; fgets(cache, 4096, fp); sscanf_s(cache, "%d,%d,%f,%d,%d,%d", &flags, &captureMode, &CursorZoomFactor, &CursorInterpolationMode, &AdapterIdx, &MultiMonitorUsage); fclose(fp); /*printf("%s\n%s\n", magpiepath, effect); printf("%d,%d,%d,%d,%d,%d,%d", m_hWnd, flags, captureMode, CursorInterpolationMode, AdapterIdx, MultiMonitorUsage, CursorZoomFactor);*/ SetForegroundWindow(m_hWnd); SetCurrentDirectoryA(magpiepath); SetDllDirectoryA(magpiepath); HMODULE h = LoadLibrary(L".\\MagpieRT.dll"); //printf("%d\n", h); if (h == 0) return 0; Initialize Initialize_f = (Initialize)GetProcAddress(h, "Initialize"); Run Run_f = (Run)GetProcAddress(h, "Run"); SetProcessDPIAware(); auto _1=Initialize_f(6, "./Runtime.log", 100000, 1); auto _2=Run_f(m_hWnd, effect, flags, captureMode, CursorZoomFactor, CursorInterpolationMode, AdapterIdx, MultiMonitorUsage, 0, 0, 0, 0); //printf("%d %s\n", _1, _2); }