開発環境を Visual Studio 2015 に変更
AlterDnDの有効/無効を切り替えるメニューを追加
@@ -193,7 +193,10 @@ | ||
193 | 193 | mii.fState = (targets & DNDTARGET_DESKTOP) ? MFS_CHECKED : MFS_UNCHECKED; |
194 | 194 | SetMenuItemInfo(hPopupMenu, IDM_DND_DESKTOP, FALSE, &mii); |
195 | 195 | |
196 | - | |
196 | + | |
197 | + mii.fState = IsAlterDnDEnabled() ? MFS_CHECKED : MFS_UNCHECKED; | |
198 | + SetMenuItemInfo(hPopupMenu, IDM_ENABLE_ALTERDND, FALSE, &mii); | |
199 | + | |
197 | 200 | return 0; |
198 | 201 | } |
199 | 202 | break; |
@@ -230,6 +233,10 @@ | ||
230 | 233 | SaveDnDMode(); |
231 | 234 | return 0; |
232 | 235 | |
236 | + case IDM_ENABLE_ALTERDND: | |
237 | + EnableAlterDnD(!IsAlterDnDEnabled()); | |
238 | + return 0; | |
239 | + | |
233 | 240 | case IDM_ABOUT: |
234 | 241 | DialogBoxLocale(MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); |
235 | 242 | return 0; |
@@ -165,6 +165,11 @@ | ||
165 | 165 | if ((grfKeyState & MK_LBUTTON) == 0) { |
166 | 166 | return m_pTarget->DragEnter(pDataObj, grfKeyState, pt, pdwEffect); |
167 | 167 | } |
168 | + // AlterDnDが無効になっている場合は、通常通りの処理を行う。 | |
169 | + DP(_T("IsAlterDnDEnabled=%d"), IsAlterDnDEnabled()); | |
170 | + if (!IsAlterDnDEnabled()) { | |
171 | + return m_pTarget->DragEnter(pDataObj, grfKeyState, pt, pdwEffect); | |
172 | + } | |
168 | 173 | |
169 | 174 | // ドラッグ&ドロップ中に設定が変更されるとまずいので、開始時に記憶 |
170 | 175 | GetDnDMode(&m_DnDMode, &m_DnDTargets); |
@@ -29,6 +29,7 @@ | ||
29 | 29 | #define ALTERDND_CF_APP_NAME _T("Alter Drag & Drop") |
30 | 30 | #define ALTERDND_CF_MODE _T("Mode") |
31 | 31 | #define ALTERDND_CF_TARGETS _T("Targets") |
32 | +#define ALTERDND_CF_ENABLED _T("Enabled") | |
32 | 33 | |
33 | 34 | #define ALTERDND_REG_APP_KEY (_T("Software\\") ALTERDND_CF_PROJECT_NAME _T("\\") ALTERDND_CF_APP_NAME) |
34 | 35 |
@@ -41,6 +42,7 @@ | ||
41 | 42 | #pragma data_seg(".AlterDnD_shared") |
42 | 43 | HHOOK wndProcHook = NULL; |
43 | 44 | DWORD gDnDMode = MAKELONG(DNDMODE_NORMAL, DNDTARGET_NONE); |
45 | +BOOL gEnabled = TRUE; | |
44 | 46 | #pragma data_seg() |
45 | 47 | |
46 | 48 | HINSTANCE hInst; |
@@ -85,7 +87,6 @@ | ||
85 | 87 | |
86 | 88 | IMPORT void UninstallHook() |
87 | 89 | { |
88 | - SetDnDMode(DNDMODE_NORMAL, DNDTARGET_NONE); | |
89 | 90 | if (wndProcHook != NULL) { |
90 | 91 | UnhookWindowsHookEx(wndProcHook); |
91 | 92 | wndProcHook = NULL; |
@@ -121,10 +122,12 @@ | ||
121 | 122 | if (RegOpenKeyEx(HKEY_CURRENT_USER, ALTERDND_REG_APP_KEY, 0, KEY_READ, &appKey) != ERROR_SUCCESS) { |
122 | 123 | appKey = NULL; |
123 | 124 | } |
125 | + BOOL enabled = ReadBool(appKey, ALTERDND_CF_ENABLED, TRUE); | |
124 | 126 | WORD mode = (WORD)ReadDWord(appKey, ALTERDND_CF_MODE, DNDMODE_ANY_KEYDOWN); |
125 | 127 | WORD targets = (WORD)ReadDWord(appKey, ALTERDND_CF_TARGETS, DNDTARGET_EXPLORER); |
126 | 128 | |
127 | 129 | SetDnDMode(mode, targets); |
130 | + EnableAlterDnD(enabled); | |
128 | 131 | |
129 | 132 | if (appKey) { |
130 | 133 | RegCloseKey(appKey); |
@@ -139,10 +142,12 @@ | ||
139 | 142 | BOOL error = FALSE; |
140 | 143 | DWORD disp; |
141 | 144 | |
145 | + BOOL enabled = IsAlterDnDEnabled(); | |
142 | 146 | WORD mode, targets; |
143 | 147 | GetDnDMode(&mode, &targets); |
144 | 148 | |
145 | 149 | if (RegCreateKeyEx(HKEY_CURRENT_USER, ALTERDND_REG_APP_KEY, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &appKey, &disp) == ERROR_SUCCESS) { |
150 | + error |= !WriteBool(appKey, ALTERDND_CF_ENABLED, enabled); | |
146 | 151 | error |= !WriteDWord(appKey, ALTERDND_CF_MODE, mode); |
147 | 152 | error |= !WriteDWord(appKey, ALTERDND_CF_TARGETS, targets); |
148 | 153 |
@@ -165,9 +170,29 @@ | ||
165 | 170 | IMPORT void SetDnDMode(WORD mode, WORD targets) |
166 | 171 | { |
167 | 172 | gDnDMode = MAKELONG(mode, targets); |
168 | - DP(_T("SetDnDMode=%08x"), mode); | |
173 | + DP(_T("SetDnDMode=%08x"), gDnDMode); | |
169 | 174 | } |
170 | 175 | |
176 | +IMPORT void EnableAlterDnD(BOOL enabled) | |
177 | +{ | |
178 | + if (enabled) { | |
179 | + if (!gEnabled) { | |
180 | + gEnabled = TRUE; | |
181 | + InstallHook(); | |
182 | + } | |
183 | + } else { | |
184 | + if (gEnabled) { | |
185 | + gEnabled = FALSE; | |
186 | + UninstallHook(); | |
187 | + } | |
188 | + } | |
189 | +} | |
190 | + | |
191 | +IMPORT BOOL IsAlterDnDEnabled() | |
192 | +{ | |
193 | + return gEnabled; | |
194 | +} | |
195 | + | |
171 | 196 | IDropTarget* HookDropTarget(HWND hwnd, WORD targetType) |
172 | 197 | { |
173 | 198 | //TCHAR buff[32] = { _T('\0') }; |
@@ -43,3 +43,5 @@ | ||
43 | 43 | IMPORT BOOL SaveDnDMode(); |
44 | 44 | IMPORT void GetDnDMode(WORD *mode, WORD *targets); |
45 | 45 | IMPORT void SetDnDMode(WORD mode, WORD targets); |
46 | +IMPORT void EnableAlterDnD(BOOL enabled); | |
47 | +IMPORT BOOL IsAlterDnDEnabled(); |