@@ -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
0 commit comments