From 28efdcb52140bb0e9924f4d38976e43f9d4cbfa3 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Tue, 27 Jul 2010 15:52:05 +0200 Subject: [PATCH] wscript.exe: Added engine lookup implementation. --- programs/wscript/Makefile.in | 2 +- programs/wscript/main.c | 58 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/programs/wscript/Makefile.in b/programs/wscript/Makefile.in index 8d208ba390..36d25f7140 100644 --- a/programs/wscript/Makefile.in +++ b/programs/wscript/Makefile.in @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = wscript.exe APPMODE = -mwindows -municode -IMPORTS = +IMPORTS = ole32 advapi32 EXTRADEFS = -DWINE_NO_UNICODE_MACROS C_SRCS = \ diff --git a/programs/wscript/main.c b/programs/wscript/main.c index 33e14e99b1..5169b749e1 100644 --- a/programs/wscript/main.c +++ b/programs/wscript/main.c @@ -20,13 +20,71 @@ #include #include +#include +#include #include +#include WINE_DEFAULT_DEBUG_CHANNEL(wscript); +static BOOL get_engine_clsid(const WCHAR *ext, CLSID *clsid) +{ + WCHAR fileid[64], progid[64]; + DWORD res; + LONG size; + HKEY hkey; + HRESULT hres; + + static const WCHAR script_engineW[] = + {'\\','S','c','r','i','p','t','E','n','g','i','n','e',0}; + + res = RegOpenKeyW(HKEY_CLASSES_ROOT, ext, &hkey); + if(res != ERROR_SUCCESS) + return FALSE; + + size = sizeof(fileid)/sizeof(WCHAR); + res = RegQueryValueW(hkey, NULL, fileid, &size); + RegCloseKey(hkey); + if(res != ERROR_SUCCESS) + return FALSE; + + WINE_TRACE("fileid is %s\n", wine_dbgstr_w(fileid)); + + strcatW(fileid, script_engineW); + res = RegOpenKeyW(HKEY_CLASSES_ROOT, fileid, &hkey); + if(res != ERROR_SUCCESS) + return FALSE; + + size = sizeof(progid)/sizeof(WCHAR); + res = RegQueryValueW(hkey, NULL, progid, &size); + RegCloseKey(hkey); + if(res != ERROR_SUCCESS) + return FALSE; + + WINE_TRACE("ProgID is %s\n", wine_dbgstr_w(progid)); + + hres = CLSIDFromProgID(progid, clsid); + return SUCCEEDED(hres); +} + int WINAPI wWinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPWSTR cmdline, int cmdshow) { + const WCHAR *ext; + CLSID clsid; + WINE_FIXME("(%p %p %s %x)\n", hInst, hPrevInst, wine_dbgstr_w(cmdline), cmdshow); + + if(!*cmdline) + return 1; + + ext = strchrW(cmdline, '.'); + if(!ext) + ext = cmdline; + if(!get_engine_clsid(ext, &clsid)) { + WINE_FIXME("Could not fine engine for %s\n", wine_dbgstr_w(ext)); + return 1; + } + return 0; }