>From ec9ca5867b176879fd4e1e66b22b374fa7df2d07 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov@codeweavers.com>
Date: Fri, 30 Dec 2011 13:40:13 +0300
Subject: [PATCH 1/2] Fix IWshShell3 definition

---
 dlls/wshom.ocx/shell.c   |   72 +++++++++++++++++-
 dlls/wshom.ocx/wshom.idl |  184 +++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 241 insertions(+), 15 deletions(-)

diff --git a/dlls/wshom.ocx/shell.c b/dlls/wshom.ocx/shell.c
index 68f14b8..857a48d 100644
--- a/dlls/wshom.ocx/shell.c
+++ b/dlls/wshom.ocx/shell.c
@@ -61,7 +61,6 @@ static ULONG WINAPI WshShell3_Release(IWshShell3 *iface)
 static HRESULT WINAPI WshShell3_GetTypeInfoCount(IWshShell3 *iface, UINT *pctinfo)
 {
     TRACE("(%p)\n", pctinfo);
-
     *pctinfo = 1;
     return S_OK;
 }
@@ -112,19 +111,73 @@ static HRESULT WINAPI WshShell3_Invoke(IWshShell3 *iface, DISPID dispIdMember, R
 
 static HRESULT WINAPI WshShell3_get_SpecialFolders(IWshShell3 *iface, IWshCollection **out_Folders)
 {
-    FIXME("(%p)\n", out_Folders);
+    FIXME("(%p): stub\n", out_Folders);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI WshShell3_get_Environment(IWshShell3 *iface, VARIANT *Type, IWshEnvironment **out_Env)
 {
-    FIXME("(%p %p)\n", Type, out_Env);
+    FIXME("(%p %p): stub\n", Type, out_Env);
     return E_NOTIMPL;
 }
 
 static HRESULT WINAPI WshShell3_Run(IWshShell3 *iface, BSTR Command, VARIANT *WindowStyle, VARIANT *WaitOnReturn, int *out_ExitCode)
 {
-    FIXME("(%p %p %p)\n", WindowStyle, WaitOnReturn, out_ExitCode);
+    FIXME("(%p %p %p): stub\n", WindowStyle, WaitOnReturn, out_ExitCode);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_Popup(IWshShell3 *iface, BSTR Text, VARIANT* SecondsToWait, VARIANT *Title, VARIANT *Type, int *button)
+{
+    FIXME("(%s %p %p %p %p): stub\n", debugstr_w(Text), SecondsToWait, Title, Type, button);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_CreateShortcut(IWshShell3 *iface, BSTR PathLink, IDispatch** out_Shortcut)
+{
+    FIXME("(%s %p): stub\n", debugstr_w(PathLink), out_Shortcut);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_ExpandEnvironmentStrings(IWshShell3 *iface, BSTR Src, BSTR* out_Dst)
+{
+    FIXME("(%s %p): stub\n", debugstr_w(Src), out_Dst);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_RegRead(IWshShell3 *iface, BSTR Name, VARIANT* out_Value)
+{
+    FIXME("(%s %p): stub\n", debugstr_w(Name), out_Value);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_RegWrite(IWshShell3 *iface, BSTR Name, VARIANT *Value, VARIANT *Type)
+{
+    FIXME("(%s %p %p): stub\n", debugstr_w(Name), Value, Type);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_RegDelete(IWshShell3 *iface, BSTR Name)
+{
+    FIXME("(%s): stub\n", debugstr_w(Name));
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_LogEvent(IWshShell3 *iface, VARIANT *Type, BSTR Message, BSTR Target, VARIANT_BOOL *out_Success)
+{
+    FIXME("(%p %s %s %p): stub\n", Type, debugstr_w(Message), debugstr_w(Target), out_Success);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_AppActivate(IWshShell3 *iface, VARIANT *App, VARIANT *Wait, VARIANT_BOOL *out_Success)
+{
+    FIXME("(%p %p %p): stub\n", App, Wait, out_Success);
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI WshShell3_SendKeys(IWshShell3 *iface, BSTR Keys, VARIANT *Wait)
+{
+    FIXME("(%s %p): stub\n", debugstr_w(Keys), Wait);
     return E_NOTIMPL;
 }
 
@@ -138,7 +191,16 @@ static const IWshShell3Vtbl WshShell3Vtbl = {
     WshShell3_Invoke,
     WshShell3_get_SpecialFolders,
     WshShell3_get_Environment,
-    WshShell3_Run
+    WshShell3_Run,
+    WshShell3_Popup,
+    WshShell3_CreateShortcut,
+    WshShell3_ExpandEnvironmentStrings,
+    WshShell3_RegRead,
+    WshShell3_RegWrite,
+    WshShell3_RegDelete,
+    WshShell3_LogEvent,
+    WshShell3_AppActivate,
+    WshShell3_SendKeys
 };
 
 static IWshShell3 WshShell3 = { &WshShell3Vtbl };
diff --git a/dlls/wshom.ocx/wshom.idl b/dlls/wshom.ocx/wshom.idl
index a7dcb3a..8d0b8e1 100644
--- a/dlls/wshom.ocx/wshom.idl
+++ b/dlls/wshom.ocx/wshom.idl
@@ -17,6 +17,7 @@
  */
 
 import "oaidl.idl";
+cpp_quote("#undef ExpandEnvironmentStrings")
 
 [
     helpstring("Windows Script Host Object Model"),
@@ -27,6 +28,61 @@ library IWshRuntimeLibrary
 {
     importlib("stdole2.tlb");
 
+    typedef enum {
+        WshRunning  = 0,
+        WshFinished,
+        WshFailed
+    } WshExecStatus;
+
+    [
+        uuid(53bad8c1-e718-11cf-893d-00a0c9054228),
+        odl,
+        hidden,
+        dual,
+        nonextensible,
+        oleautomation
+    ]
+    interface ITextStream : IDispatch {
+        [id(0x2710), propget]
+        HRESULT Line([out, retval] long* Line);
+
+        [id(0xfffffdef), propget]
+        HRESULT Column([out, retval] long* Column);
+
+        [id(0x2712), propget]
+        HRESULT AtEndOfStream([out, retval] VARIANT_BOOL* EOS);
+
+        [id(0x2713), propget]
+        HRESULT AtEndOfLine([out, retval] VARIANT_BOOL* EOL);
+
+        [id(0x2714)]
+        HRESULT Read([in] long Characters, [out, retval] BSTR* Text);
+
+        [id(0x2715)]
+        HRESULT ReadLine([out, retval] BSTR* Text);
+
+        [id(0x2716)]
+        HRESULT ReadAll([out, retval] BSTR* Text);
+
+        [id(0x2717)]
+        HRESULT Write([in] BSTR Text);
+
+        [id(0x2718)]
+        HRESULT WriteLine([in, optional, defaultvalue("")] BSTR Text);
+
+        [id(0x2719)]
+        HRESULT WriteBlankLines([in] long Lines);
+
+        [id(0x271a)]
+        HRESULT Skip([in] long Characters);
+
+        [id(0x271b)]
+        HRESULT SkipLine();
+
+        [id(0x271c)]
+        HRESULT Close();
+    };
+
     [
         uuid(f935dc27-1cf0-11d0-adb9-00c04fd58a0b),
         odl,
@@ -80,27 +136,135 @@ library IWshRuntimeLibrary
     }
 
     [
-        uuid(41904400-be18-11d3-a28b-00104bd35090),
+        uuid(08fed190-be19-11d3-a28b-00104bd35090),
         odl,
         dual,
         oleautomation
     ]
-    interface IWshShell3 : IDispatch {
+    interface IWshExec : IDispatch {
+        [id(0x0001), propget]
+        HRESULT Status([out, retval] WshExecStatus* Status);
+
+        [id(0x0003), propget]
+        HRESULT StdIn([out, retval] ITextStream** stream);
+
+        [id(0x0004), propget]
+        HRESULT StdOut([out, retval] ITextStream** stream);
+
+        [id(0x0005), propget]
+        HRESULT StdErr([out, retval] ITextStream** stream);
+
+        [id(0x0006), propget]
+        HRESULT ProcessID([out, retval] long* pid);
+
+        [id(0x0007), propget]
+        HRESULT ExitCode([out, retval] long* ExitCode);
+
+        [id(0x0008)]
+        HRESULT Terminate();
+    };
+
+    [
+        uuid(f935dc21-1cf0-11d0-adb9-00c04fd58a0b),
+        odl,
+        dual,
+        oleautomation,
+        hidden
+    ]
+    interface IWshShell : IDispatch {
         [id(0x0064), propget]
-        HRESULT SpecialFolders([out, retval] IWshCollection **out_Folders);
+        HRESULT SpecialFolders([out, retval] IWshCollection** out_Folders);
 
         [id(0x00c8), propget]
         HRESULT Environment(
-                [in, optional] VARIANT *Type,
-                [out, retval] IWshEnvironment **out_Env);
+            [in, optional] VARIANT* Type,
+            [out, retval] IWshEnvironment** out_Env);
 
         [id(0x03e8)]
         HRESULT Run(
-                [in] BSTR Command,
-                [in, optional] VARIANT *WindowStyle,
-                [in, optional] VARIANT *WaitOnReturn,
-                [out, retval] int *out_ExitCode);
-    }
+            [in] BSTR Command,
+            [in, optional] VARIANT* WindowStyle,
+            [in, optional] VARIANT* WaitOnReturn,
+            [out, retval] int* out_ExitCode);
+
+        [id(0x03e9)]
+        HRESULT Popup(
+            [in] BSTR Text,
+            [in, optional] VARIANT* SecondsToWait,
+            [in, optional] VARIANT* Title,
+            [in, optional] VARIANT* Type,
+            [out, retval] int* out_Button);
+
+        [id(0x03ea)]
+        HRESULT CreateShortcut(
+            [in] BSTR PathLink,
+            [out, retval] IDispatch** out_Shortcut);
+
+        [id(0x03ee)]
+        HRESULT ExpandEnvironmentStrings(
+            [in] BSTR Src,
+            [out, retval] BSTR* out_Dst);
+
+        [id(0x07d0)]
+        HRESULT RegRead(
+            [in] BSTR Name,
+            [out, retval] VARIANT* out_Value);
+
+        [id(0x07d1)]
+        HRESULT RegWrite(
+            [in] BSTR Name,
+            [in] VARIANT* Value,
+            [in, optional] VARIANT* Type);
+
+        [id(0x07d2)]
+        HRESULT RegDelete([in] BSTR Name);
+    };
+
+    [
+      uuid(24be5a30-edfe-11d2-b933-00104b365c9f),
+      odl,
+      dual,
+      oleautomation,
+      hidden
+    ]
+    interface IWshShell2 : IWshShell {
+        [id(0x0bb8)]
+        HRESULT LogEvent(
+            [in] VARIANT* Type,
+            [in] BSTR Message,
+            [in, optional, defaultvalue("")] BSTR Target,
+            [out, retval] VARIANT_BOOL* out_Success);
+
+        [id(0x0bc2)]
+        HRESULT AppActivate(
+            [in] VARIANT* App,
+            [in, optional] VARIANT* Wait,
+            [out, retval] VARIANT_BOOL* out_Success);
+
+        [id(0x0bc3)]
+        HRESULT SendKeys(
+            [in] BSTR Keys,
+            [in, optional] VARIANT* Wait);
+    };
+
+    [
+        uuid(41904400-be18-11d3-a28b-00104bd35090),
+        odl,
+        dual,
+        oleautomation
+    ]
+    interface IWshShell3 : IWshShell2 {
+        [id(0x0bc4)]
+        HRESULT Exec(
+            [in] BSTR Command,
+            [out, retval] IWshExec** out_Exec);
+
+        [id(0x0bc5), propget]
+        HRESULT CurrentDirectory([out, retval] BSTR* out_Directory);
+
+        [id(0x0bc5), propput]
+        HRESULT CurrentDirectory([in] BSTR out_Directory);
+    };
 
     [
         uuid(24be5a31-edfe-11d2-b933-00104b365c9f),
-- 
1.5.6.5


