Explorar o código

Reduce the send keys delay to 10 ms, added advanced option to change this

sabrogden %!s(int64=6) %!d(string=hai) anos
pai
achega
09d738cf0e
Modificáronse 4 ficheiros con 28 adicións e 3 borrados
  1. 9 0
      AdvGeneral.cpp
  2. 6 3
      ExternalWindowTracker.cpp
  3. 10 0
      Options.cpp
  4. 3 0
      Options.h

+ 9 - 0
AdvGeneral.cpp

@@ -119,6 +119,7 @@ END_MESSAGE_MAP()
 
 #define SETTING_ACTIVATE_WINDOW_DELAY 71
 #define SETTING_DOUBLE_KEYSTROKE_TIMEOUT 72
+#define SETTING_SEND_KEYS_DELAY 73
 
 BOOL CAdvGeneral::OnInitDialog()
 {
@@ -195,6 +196,8 @@ BOOL CAdvGeneral::OnInitDialog()
 
 	pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Selected Index"), (long)(CGetSetOptions::SelectedIndex()+1), _T(""), SETTING_SELECTED_INDEX));
 
+	pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Send Keys Delay (ms)"), (long)CGetSetOptions::RealSendKeysDelay(), _T(""), SETTING_SEND_KEYS_DELAY));
+
 	AddTrueFalse(pGroupTest, _T("Show Clips That are in Groups in Main List"), CGetSetOptions::GetShowAllClipsInMainList(), SETTING_SHOW_GROUP_CLIPS_IN_LIST);
 	AddTrueFalse(pGroupTest, _T("Show leading whitespace"), CGetSetOptions::GetDescShowLeadingWhiteSpace(), SETTING_SHOW_LEADING_WHITESPACE);
 	AddTrueFalse(pGroupTest, _T("Show In Taskbar"), CGetSetOptions::GetShowInTaskBar(), SETTTING_SHOW_IN_TASKBAR);
@@ -716,6 +719,12 @@ void CAdvGeneral::OnBnClickedOk()
 					CGetSetOptions::SetSendKeysDelay(pNewValue->lVal);
 				}
 				break;
+			case SETTING_SEND_KEYS_DELAY:
+				if (pNewValue->lVal != pOrigValue->lVal)
+				{
+					CGetSetOptions::SetRealSendKeysDelay(pNewValue->lVal);
+				}
+				break;
 			case SETTING_DOUBLE_KEYSTROKE_TIMEOUT:
 				if (pNewValue->lVal != pOrigValue->lVal)
 				{

+ 6 - 3
ExternalWindowTracker.cpp

@@ -235,6 +235,7 @@ void ExternalWindowTracker::SendPaste(bool activateTarget)
 	CString csPasteToApp = GetProcessName(activeWnd);
 	CString csPasteString = g_Opt.GetPasteString(csPasteToApp);
 	DWORD delay = g_Opt.SendKeysDelay();
+	DWORD sendKeysDelay = g_Opt.RealSendKeysDelay();
 
 	DWORD startTick = GetTickCount();
 
@@ -277,7 +278,7 @@ void ExternalWindowTracker::SendPaste(bool activateTarget)
 		{
 			Sleep(delay);
 		}
-		send.SetKeyDownDelay(max(50, delay));
+		send.SetKeyDownDelay(sendKeysDelay);
 		send.SendKeys(csPasteString, true);
 	}
 
@@ -294,6 +295,7 @@ void ExternalWindowTracker::SendCopy(CopyReasonEnum::CopyReason copyReason)
 	CString csToApp = GetProcessName(activeWnd);
 	CString csString = g_Opt.GetCopyString(csToApp);
 	DWORD delay = g_Opt.SendKeysDelay();
+	DWORD SendKeysDelay = g_Opt.RealSendKeysDelay();
 
 	Sleep(delay);
 
@@ -324,7 +326,7 @@ void ExternalWindowTracker::SendCopy(CopyReasonEnum::CopyReason copyReason)
 	{
 		//give the app some time to take focus before sending paste
 		Sleep(delay);
-		send.SetKeyDownDelay(max(50, delay));
+		send.SetKeyDownDelay(SendKeysDelay);
 
 		theApp.SetCopyReason(copyReason);
 
@@ -343,6 +345,7 @@ void ExternalWindowTracker::SendCut()
 	CString csToApp = GetProcessName(m_activeWnd);
 	CString csString = g_Opt.GetCutString(csToApp);
 	DWORD delay = g_Opt.SendKeysDelay();
+	DWORD sendKeysDelay = g_Opt.RealSendKeysDelay();
 
 	Sleep(delay);
 
@@ -374,7 +377,7 @@ void ExternalWindowTracker::SendCut()
 	{
 		//give the app some time to take focus before sending paste
 		Sleep(delay);
-		send.SetKeyDownDelay(max(50, delay));
+		send.SetKeyDownDelay(sendKeysDelay);
 
 		send.SendKeys(csString, true);
 	}		

+ 10 - 0
Options.cpp

@@ -2008,6 +2008,16 @@ void CGetSetOptions::SetSendKeysDelay(DWORD val)
 	SetProfileLong(_T("SendKeysDelay"), val);
 }
 
+DWORD CGetSetOptions::RealSendKeysDelay()
+{
+	return (DWORD)GetProfileLong(_T("RealSendKeysDelay"), 10);
+}
+
+void CGetSetOptions::SetRealSendKeysDelay(DWORD val)
+{
+	SetProfileLong(_T("RealSendKeysDelay"), val);
+}
+
 DWORD CGetSetOptions::WaitForActiveWndTimeout()
 {
 	return (DWORD)GetProfileLong(_T("WaitForActiveWndTimeout"), 500);

+ 3 - 0
Options.h

@@ -396,6 +396,9 @@ public:
 	static DWORD	SendKeysDelay();
 	static void		SetSendKeysDelay(DWORD val);
 
+	static DWORD	RealSendKeysDelay();
+	static void		SetRealSendKeysDelay(DWORD val);
+
 	static DWORD	WaitForActiveWndTimeout();
 	static DWORD	FocusChangedDelay();
 	static DWORD	FocusWndTimerTimeout();