0
this 대답으로 제시된대로 키보드 후크를 구현했습니다. 한 가지 경우를 제외하고는 모두 잘 작동합니다. 나는 몇 시간 동안 누르면 키를 길게하려면, 따라서 기술적으로 내가 전화 한 방법에서 remaning,이 일이 일어날 :키보드 후크 저장 키
- 내가 (선한)
- 응용 프로그램 기록 방법에 남아 그 키는 독립적 인 키 스트로크 (keystroke)로서 유지되고, 이는 후크에 의해 캡쳐된다.
후크 : 나는 플래그를 사용하는 것을 시도했다, 그러나이 중 하나가 작동하는 것 같지 않았어요
private void performCombo(int n)
{
string simpleAction;
Sleep(cmbDelay);
Key k = new Key();
switch (n)
{
case 1:
k = Key.D1;
break;
case 2:
k = Key.D2;
break;
case 3:
k = Key.D3;
break;
case 4:
k = Key.D4;
break;
case 5:
k = Key.D5;
break;
case 6:
k = Key.D6;
break;
}
if ((Keyboard.GetKeyStates(k) & KeyStates.Down) > 0)
Sleep(1000);
do
{
if (comboList[n - 1].Count > 0)
{
foreach (string action in comboList[n - 1])
{
simpleAction = action.Split('~')[0];
if (simpleAction.Length == 1)
{
dkeyinput(simpleAction, gamePid, 500);
Sleep(cmbDelay);
}
else
{
if (simpleAction == "LeftClick")
{
dmouseclick("left", 300);
Sleep(cmbDelay);
}
else if (simpleAction == "RightClick")
{
dmouseclick("right", 300);
Sleep(cmbDelay);
}
else if (simpleAction == "Space")
{
dkeyinput("\"{SPACE}\"", gamePid);
Sleep(cmbDelay);
}
else if (simpleAction.Contains("&"))
{
dkeyinput2(simpleAction, cmbDelay);
Sleep(cmbDelay);
}
}
}
}
}
while ((Keyboard.GetKeyStates(k) & KeyStates.Down) > 0);
}
private IntPtr HwndHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
const int WM_HOTKEY = 0x0312;
switch (msg)
{
case WM_HOTKEY:
if (battleBotStatus == 0)
{
switch (wParam.ToInt32())
{
case HOTKEY_ID:
OnHotKeyPressed();
handled = true;
break;
case HOTKEY_ID9:
enableBattleBotKeys();
battleBotStatus = 1;
//performCombo();
handled = true;
break;
}
}
else
{
switch (wParam.ToInt32())
{
case BattleKey1:
performCombo(1);
handled = true;
buttonIsPressed = false;
break;
}
}
break;
}
return IntPtr.Zero;
}
PerformCombo 코드입니다. 디버거 사용을 검사 할 때, 키를 놓은 후에도 항상 처리기로 이동하여 계속해서 BattleKey1
경우에 대한 작업을 수행합니다. 당신이 최대 콤보 시간을 알고있는 경우
나는 왜 당신이 잠을 자고 있는지 모르지만 ... 그렇습니다. 일반적으로 입력 이벤트 (다중 키/마우스 클릭)를 결합하려면 값과 시작 시간을 저장하고 현재 시간을 기준으로 새 이벤트를 확인하고 비교해야합니다. 이렇게하면 몇 가지 이벤트를 "이벤트 스트림"(콤보)에 결합하는 데 도움이됩니다. – Shakra
@Shakra 이런 종류의 문제에 이벤트 스트림을 적용하는 방법을 모르겠습니다. 잠은 행동 사이에 지연을 일으킬뿐입니다. 내가 데리고 나가면, 아주 많은 작업 만 처리됩니다. –