Index: branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp	(revision 790)
+++ branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp	(revision 791)
@@ -1,4 +1,11 @@
 #include "stdafx.h"
+#include <vector>
+#include <utility>
+#include <boost/range.hpp>
+#include <boost/range/adaptor/transformed.hpp>
+#include <boost/numeric/conversion/cast.hpp>
 #include <Resource/Load.h>
+
+using boost::numeric_cast;
 
 namespace ActiveBasic { namespace Resource {
@@ -22,15 +29,43 @@
 }
 
+void* GetResource(HINSTANCE hinst, USHORT id, LPCTSTR type)
+{
+	if (auto hrsrc = ::FindResource(hinst, MAKEINTRESOURCE(id), type))
+	{
+		if (auto hSrc = ::LoadResource(hinst, hrsrc))
+		{
+			return ::LockResource(hSrc);
+		}
+	}
+	return nullptr;
+}
+
+std::pair<void*, DWORD> GetResourceWithSize(HINSTANCE hinst, USHORT id, LPCTSTR type)
+{
+	typedef std::pair<void*, DWORD> result_type;
+	if (auto hrsrc = ::FindResource(hinst, MAKEINTRESOURCE(id), type))
+	{
+		if (auto hSrc = ::LoadResource(hinst, hrsrc))
+		{
+			auto p = ::LockResource(hSrc);
+			auto size = ::SizeofResource(hinst, hrsrc);
+			if (p != nullptr && size > 0)
+			{
+				return result_type(p, size);
+			}
+		}
+	}
+	return result_type(nullptr, 0);
+}
+
 HICON LoadIconCursorImpl(HINSTANCE hinst, USHORT id, int cxDesired, int cyDesired, UINT load, bool isIcon)
 {
-	auto hrsrc = FindResource(hinst, MAKEINTRESOURCE(id), isIcon ? RT_GROUP_ICON : RT_GROUP_CURSOR);
-	auto pResource = LockResource(LoadResource(hinst, hrsrc));
+	auto pResource = GetResource(hinst, id, isIcon ? RT_GROUP_ICON : RT_GROUP_CURSOR);
 
 	auto idIcon = LookupIconIdFromDirectoryEx(reinterpret_cast<PBYTE>(pResource), isIcon, cxDesired, cyDesired, load);
-	auto hrsrcIcon = FindResource(hinst, MAKEINTRESOURCE(idIcon), isIcon ? RT_ICON : RT_CURSOR);
-	auto pResourceIcon = LockResource(LoadResource(hinst, hrsrcIcon));
+	auto icon = GetResourceWithSize(hinst, numeric_cast<USHORT>(idIcon), isIcon ? RT_ICON : RT_CURSOR);
 
-	return CreateIconFromResourceEx(reinterpret_cast<PBYTE>(pResourceIcon),
-		SizeofResource(hinst, hrsrcIcon), isIcon, 0x00030000, cxDesired, cyDesired, load);
+	return CreateIconFromResourceEx(reinterpret_cast<PBYTE>(icon.first),
+		icon.second, isIcon, 0x00030000, cxDesired, cyDesired, load);
 }
 
@@ -88,4 +123,42 @@
 }
 
+// http://msdn.microsoft.com/en-us/library/ms648010.aspx
+struct ACCELTABLEENTRY
+{
+	WORD fFlags;
+	WORD wAnsi;
+	WORD wId;
+	WORD padding;
+};
+
+ACCEL AccelFromEntry(ACCELTABLEENTRY const& e)
+{
+	ACCEL t = {e.fFlags & 0x7f, e.wAnsi, e.wId};
+	return t;
+}
+
+HACCEL LoadAccelerators(HINSTANCE hinst, USHORT id)
+{
+	using namespace boost::adaptors;
+
+	auto accel = GetResourceWithSize(hinst, id, RT_ACCELERATOR);
+	if (accel.first == nullptr)
+	{
+		return nullptr;
+	}
+
+	auto pate = static_cast<ACCELTABLEENTRY const*>(accel.first);
+
+	auto a = boost::copy_range<std::vector<ACCEL>>(
+		boost::make_iterator_range(pate, pate + accel.second / sizeof (ACCELTABLEENTRY))
+		| transformed(AccelFromEntry));
+
+	if (a.size() > INT_MAX)
+	{
+		a.resize(INT_MAX);
+	}
+	return CreateAcceleratorTable(&a[0], static_cast<int>(a.size()));
+}
+
 }}
 
Index: branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h
===================================================================
--- branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h	(revision 790)
+++ branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h	(revision 791)
@@ -14,4 +14,6 @@
 boost::optional<std::wstring> LoadString(HINSTANCE hinst, USHORT id);
 
+HACCEL LoadAccelerators(HINSTANCE hinst, USHORT id);
+
 struct IconDeleter
 {
Index: branches/egtra/ab5.0/abdev/abdev/abdev.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/abdev.cpp	(revision 790)
+++ branches/egtra/ab5.0/abdev/abdev/abdev.cpp	(revision 791)
@@ -1552,6 +1552,5 @@
 	//return 0;
 
-
-	hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
+	hAccel = ActiveBasic::Resource::LoadAccelerators(hResInst, IDR_ACCELERATOR1);
 
 	//メインウィンドウ
