Другое С/С++ Вопрос - Ответ

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,763
Все работает, но мне глобальные нажатия на... не нужны. А локальные(для нашего процесса) не получается осуществить.

C++:
HHOOK keyboardHook;
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if (wParam == WM_KEYDOWN && nCode == HC_ACTION)
   {
      PKBDLLHOOKSTRUCT key = (PKBDLLHOOKSTRUCT)lParam;
      printf("key: %i\n", key->vkCode);
   }
   return CallNextHookEx(keyboardHook, nCode, wParam, lParam);
}
int main()
{
   keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, NULL);
   return 0;
}

Можно с проверкой if(GAME->IsInForeground()), но что то меня такой вариант не привлекает.

У сфа есть свой хук, его и используй
 

Sonik Mells

Известный
12
2
Я уже нашел и сделал все) почти все)
C++:
if (uMsg == WM_KEYDOWN)
{
    SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(80, 0xEA, 100), "out: %i", wParam);
}

SF->getGame()->registerWndProcCallback(SFGame::WndProcCallbackPriority::HIGH_CB_PRIORITY, WndProc);
Теперь вопрос, а как LMENU(LAlt) отловить? не выводит его.
И какой HIGH_CB_... правильней использовать?

Пока, только так придумал
C++:
bool CALLBACK SendPacket(stRakNetHookParams *params)
{
    if (params->packetId == ID_PLAYER_SYNC)
    {
        stOnFootData data;
        params->bitStream->ResetReadPointer();
        params->bitStream->IgnoreBits(8);
        params->bitStream->Read((PCHAR)&data, sizeof(data));
        if (data.sKeys == 1024)
        {
            return true;
        }
    }
    return true;
}
 
Последнее редактирование:

ishi

Известный
493
110
C++:
  for (int i = dstart; i < dend; i++)
     {
       ReadProcessMemory(procHandle, &i, &snzh, 14, NULL);
       if (!strcmp(snzh,SL))
       fout << "meow";
     }
делая шаг по байту, проходит память модуля, и должно записывать данные в массив, но почему-то записываются лишь первые 4 и последние 2
по логике, должно проходить по одному байту, и записывать данные, смещая их с начала в конец (или наоборот, не важно), т.к. записывает одно и тоже,с разностью в один конечный/начальный байт, но пишет не в каждый, и это меня убивает - не могу исправить, вот и всё. Знает кто, в чём ошибка? ._.

upd вместо 14 байт, я пробовал ставить sizeof(snzh) (т.к. это адрес массива), но результат не менялся
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,473
Хз чё ты делаешь, но strcmp для сравнивания строк, а не байт. Если всё таки нужно сравнивать строки, то в каждую записывай \0 в конец.
 

ishi

Известный
493
110
Хз чё ты делаешь, но strcmp для сравнивания строк, а не байт. Если всё таки нужно сравнивать строки, то в каждую записывай \0 в конец.
Вообще у меня проблема не в сравнении, а в том что записывает не во весь массив, но в первые 4 и последние 2 байта

(кстати насчёт нуля, в массиве в конце ноль есть, просто лапы из попы и я обрезал скрин так, что один байт потерялся)
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,473
Ты получаешь ссылку на переменную i, а не адрес, хранимый в ней.
Преобразовывай к LPCVOID.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,473
(LPCVOID)i или (const void*)i, желательно.
 
  • Нравится
Реакции: ishi