Skip to content

Commit 30ef4a9

Browse files
committed
arrow logic was defined
1 parent b29ec2a commit 30ef4a9

File tree

2 files changed

+48
-13
lines changed

2 files changed

+48
-13
lines changed

MossbauerLab.Sm2201.ExtSaveUtility/src/saveManager/autoSaveManager.cpp

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ DWORD WINAPI TimerThreadFunc (LPVOID lpParam)
5555

5656
TCHAR outputDir[MAX_PATH];
5757
TCHAR fullOutputName [MAX_PATH];
58+
bool firstSave = true;
5859

5960
while(manager->isRunning())
6061
{
@@ -76,7 +77,8 @@ DWORD WINAPI TimerThreadFunc (LPVOID lpParam)
7677
if(numberOfWindows == 1)
7778
{
7879
// 1. Send Key Sequence
79-
manager->sendKeysSequence(selectedWindows[0].hWnd, 1, VXD_PORT_DRV);
80+
manager->sendKeysSequence(selectedWindows[0].hWnd, 1, VXD_PORT_DRV, firstSave);
81+
firstSave = false;
8082
// 2. Get last saved file from outputDir
8183
#if WINVER >= 0x0500
8284
_stprintf_s(outputDir, sizeof(outputDir)/sizeof(TCHAR), _T("%hs"), config->getOutputDir().c_str());
@@ -142,7 +144,8 @@ DWORD WINAPI TimerThreadFunc (LPVOID lpParam)
142144
if(numberOfWindows == 1)
143145
{
144146
// 1. Send Key Sequence
145-
manager->sendKeysSequence(selectedWindows[0].hWnd, 2, VXD_PORT_DRV);
147+
manager->sendKeysSequence(selectedWindows[0].hWnd, 2, VXD_PORT_DRV, firstSave);
148+
firstSave = false;
146149
// 2. Get last saved file from outputDir
147150
#if WINVER >= 0x0500
148151
_stprintf_s(outputDir, sizeof(outputDir)/sizeof(TCHAR), _T("%hs"),
@@ -217,6 +220,7 @@ DWORD WINAPI TimerThreadFunc (LPVOID lpParam)
217220
// state is Off
218221
else
219222
{
223+
firstSave = true;
220224
channellElapsedTime = 0;
221225
channel2ElapsedTime = 0;
222226
Sleep(CHECK_INTERVAL);
@@ -298,17 +302,41 @@ void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::activateWindow(HWND win
298302
SendMessage(window, WM_ACTIVATE, WA_CLICKACTIVE, 0);
299303
}
300304

301-
void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysSequence(HWND window, int channel, int technology)
305+
bool MossbauerLab::Sm2201::SaveManager::AutoSaveManager::shouldSendArrow(int channel, bool firstSave)
306+
{
307+
// we assume here that initially cursor was set to ch. 1
308+
if (_config->isChannelOneUsing() && _config->isChannelTwoUsing())
309+
{
310+
if (!firstSave)
311+
return true;
312+
if (channel == 1)
313+
return false;
314+
return true; // channel 2
315+
}
316+
317+
if (_config->isChannelOneUsing() && !_config->isChannelTwoUsing())
318+
return false;
319+
320+
if(!_config->isChannelOneUsing() && _config->isChannelTwoUsing())
321+
return firstSave;
322+
323+
return false;
324+
}
325+
326+
void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysSequence(HWND window, int channel, int technology, bool firstSave)
302327
{
303328
// 0. make window active
304329
activateWindow(window);
305330

306331
if (technology == WINDOWS_MSG || technology == SEND_INPUT) //sending via Windows MSG
307332
{
308333
std::vector<DWORD> charCodes;
309-
if (channel == 1)
310-
charCodes.push_back(VK_LEFT);
311-
else charCodes.push_back(VK_RIGHT);
334+
if (shouldSendArrow(channel, firstSave))
335+
{
336+
if (channel == 1)
337+
charCodes.push_back(VK_LEFT);
338+
else charCodes.push_back(VK_RIGHT);
339+
}
312340
charCodes.push_back(0x43); // continue
313341
charCodes.push_back(VK_RETURN); // scaling coeff
314342
charCodes.push_back(VK_RETURN); // stop update
@@ -325,9 +353,12 @@ void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysSequence(HWND w
325353
else if (technology == DIRECT_PORT_WRITE)
326354
{
327355
std::vector<BYTE> scanCodes;
328-
if (channel == 1)
329-
scanCodes.push_back(0x4B); // Left Arrow
330-
else scanCodes.push_back(0x4D); // Right Arrow
356+
if (shouldSendArrow(channel, firstSave))
357+
{
358+
if (channel == 1)
359+
scanCodes.push_back(0x4B); // Left Arrow
360+
else scanCodes.push_back(0x4D); // Right Arrow
361+
}
331362
scanCodes.push_back(0x2E); // C
332363
scanCodes.push_back(0x1C); // Enter
333364
scanCodes.push_back(0x1C); // Enter
@@ -340,9 +371,12 @@ void MossbauerLab::Sm2201::SaveManager::AutoSaveManager::sendKeysSequence(HWND w
340371
else if (technology == VXD_PORT_DRV)
341372
{
342373
std::vector<BYTE> scanCodes;
343-
if (channel == 1)
344-
scanCodes.push_back(0x4B); // Left Arrow
345-
else scanCodes.push_back(0x4D); // Right Arrow
374+
if (shouldSendArrow(channel, firstSave))
375+
{
376+
if (channel == 1)
377+
scanCodes.push_back(0x4B); // Left Arrow
378+
else scanCodes.push_back(0x4D); // Right Arrow
379+
}
346380
scanCodes.push_back(0x2E); // C
347381
scanCodes.push_back(0x1C); // Enter
348382
scanCodes.push_back(0x1C); // Enter

MossbauerLab.Sm2201.ExtSaveUtility/src/saveManager/autoSaveManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ namespace MossbauerLab
3030
inline bool isRunning() const {return _threadRunning;}
3131
inline MossbauerLab::Sm2201::Config::SchedulerConfig* getConfig() const {return _config;}
3232
void reloadConfig();
33-
void sendKeysSequence(HWND window, int channel, int technology = 0);
33+
void sendKeysSequence(HWND window, int channel, int technology = 0, bool firstSave = false);
3434
private:
3535
void restoreWindow(HWND window);
3636
void activateWindow(HWND window);
37+
bool shouldSendArrow(int channel, bool firstSave);
3738
void sendKeysViaWindowMsg(HWND window, const std::vector<DWORD>& keys, int keyPause = 500);
3839
// HERE we send scancodes from group 1
3940
void sendKeysViaKeyboardController(const std::vector<BYTE>& scanCodes, int keyPause = 500);

0 commit comments

Comments
 (0)