diff --git a/sys/winnt/Install.nt b/sys/winnt/Install.nt
index c6e5643b7..12484b05b 100644
--- a/sys/winnt/Install.nt
+++ b/sys/winnt/Install.nt
@@ -68,6 +68,10 @@ From within the IDE:
2. from build menu, select build solution.
3. type F5 to start debugging.
+You can build all the projects for all platforms and configurations
+using a Visual Studio MSBuild command prompt. Open the MSBuild command
+prompt, change directory to win\win32\vs2015 and run "build.bat".
+
/-----------------------------------\
| FIRST STEP - MOVING THINGS AROUND |
\-----------------------------------/
diff --git a/win/win32/.gitignore b/win/win32/.gitignore
index 670e92b59..e4eff42d6 100644
--- a/win/win32/.gitignore
+++ b/win/win32/.gitignore
@@ -5,4 +5,4 @@
record
*.user
*.opendb
-
+*.log
diff --git a/win/win32/vs2015/NetHack.sln b/win/win32/vs2015/NetHack.sln
index c2cf16ff5..63617e5f0 100755
--- a/win/win32/vs2015/NetHack.sln
+++ b/win/win32/vs2015/NetHack.sln
@@ -68,6 +68,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nhdefkey", "nhdefkey.vcxpro
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nh340key", "nh340key.vcxproj", "{BE04E242-A1E9-4593-B95B-057F37330B76}"
+ ProjectSection(ProjectDependencies) = postProject
+ {BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nhraykey", "nhraykey.vcxproj", "{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}"
+ ProjectSection(ProjectDependencies) = postProject
+ {BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
+ EndProjectSection
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -162,6 +172,22 @@ Global
{6813477F-64B6-4B97-B230-438D0D233385}.Release|Win32.Build.0 = Release|Win32
{6813477F-64B6-4B97-B230-438D0D233385}.Release|x64.ActiveCfg = Release|x64
{6813477F-64B6-4B97-B230-438D0D233385}.Release|x64.Build.0 = Release|x64
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|Win32.ActiveCfg = Debug|Win32
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|Win32.Build.0 = Debug|Win32
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|x64.ActiveCfg = Debug|x64
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|x64.Build.0 = Debug|x64
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Release|Win32.ActiveCfg = Release|Win32
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Release|Win32.Build.0 = Release|Win32
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Release|x64.ActiveCfg = Release|x64
+ {BE04E242-A1E9-4593-B95B-057F37330B76}.Release|x64.Build.0 = Release|x64
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|Win32.ActiveCfg = Debug|Win32
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|Win32.Build.0 = Debug|Win32
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|x64.ActiveCfg = Debug|x64
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|x64.Build.0 = Debug|x64
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|Win32.ActiveCfg = Release|Win32
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|Win32.Build.0 = Release|Win32
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|x64.ActiveCfg = Release|x64
+ {2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/win/win32/vs2015/build.bat b/win/win32/vs2015/build.bat
new file mode 100644
index 000000000..512b4f22d
--- /dev/null
+++ b/win/win32/vs2015/build.bat
@@ -0,0 +1,4 @@
+msbuild NetHack.sln /t:Build /p:Configuration=Debug;Platform=Win32
+msbuild NetHack.sln /t:Build /p:Configuration=Debug;Platform=x64
+msbuild NetHack.sln /t:Build /p:Configuration=Release;Platform=Win32
+msbuild NetHack.sln /t:Build /p:Configuration=Release;Platform=x64
diff --git a/win/win32/vs2015/nh340key.def b/win/win32/vs2015/nh340key.def
new file mode 100644
index 000000000..f484a536f
--- /dev/null
+++ b/win/win32/vs2015/nh340key.def
@@ -0,0 +1,8 @@
+LIBRARY nh340key
+EXPORTS
+ProcessKeystroke
+NHkbhit
+CheckInput
+SourceWhere
+SourceAuthor
+KeyHandlerName
diff --git a/win/win32/vs2015/nh340key.vcxproj b/win/win32/vs2015/nh340key.vcxproj
new file mode 100644
index 000000000..7b5c06a4f
--- /dev/null
+++ b/win/win32/vs2015/nh340key.vcxproj
@@ -0,0 +1,40 @@
+
+
+
+
+ {be04e242-a1e9-4593-b95b-057f37330b76}
+ Win32Proj
+ nh340key
+
+
+
+
+
+
+
+
+
+ $(BinDir)
+
+
+
+ $(IncDir);$(SysWinntDir);%(AdditionalIncludeDirectories)
+
+
+
+ $(ToolsDir)$(TargetName).lib
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/win/win32/vs2015/nhdefkey.vcxproj b/win/win32/vs2015/nhdefkey.vcxproj
index f77c26ad3..3b0c0f675 100755
--- a/win/win32/vs2015/nhdefkey.vcxproj
+++ b/win/win32/vs2015/nhdefkey.vcxproj
@@ -21,10 +21,17 @@
$(IncDir);$(SysWinntDir);%(AdditionalIncludeDirectories)
+
$(ToolsDir)$(TargetName).lib
+
+
+ nhdefkey.def
+
+
diff --git a/win/win32/vs2015/nhraykey.def b/win/win32/vs2015/nhraykey.def
new file mode 100644
index 000000000..5432a1af3
--- /dev/null
+++ b/win/win32/vs2015/nhraykey.def
@@ -0,0 +1,8 @@
+LIBRARY nhraykey
+EXPORTS
+ProcessKeystroke
+NHkbhit
+CheckInput
+SourceWhere
+SourceAuthor
+KeyHandlerName
diff --git a/win/win32/vs2015/nhraykey.vcxproj b/win/win32/vs2015/nhraykey.vcxproj
new file mode 100644
index 000000000..f2e7890b6
--- /dev/null
+++ b/win/win32/vs2015/nhraykey.vcxproj
@@ -0,0 +1,40 @@
+
+
+
+
+ {2e1f4bb3-3bd7-43ad-8e64-d3b8a2f5d7b2}
+ Win32Proj
+ nhraykey
+
+
+
+
+
+
+
+
+
+ $(BinDir)
+
+
+
+ $(IncDir);$(SysWinntDir);%(AdditionalIncludeDirectories)
+
+
+
+ $(ToolsDir)$(TargetName).lib
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/win/win32/vs2015/notes.txt b/win/win32/vs2015/notes.txt
index cdcba3334..5a7d93371 100644
--- a/win/win32/vs2015/notes.txt
+++ b/win/win32/vs2015/notes.txt
@@ -1,12 +1,6 @@
Changes made to vs2015 build
To Do
-1. Build other key handler DLLs.
-2. Ensure Release build does not have unexpected files after clean build.
-
-Changes
-1. Removed the use of /FS.
-2. Allow multi-processor compilation.
Questions