HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 08.07.2018, 15:19
-raymond-
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами: 4423953

Репутация: 68
По умолчанию

как сымитировать нажатие клавишы на клавиатуре?
 
Ответить с цитированием

  #2  
Старый 08.07.2018, 15:53
CleanLegend
Постоянный
Регистрация: 28.03.2013
Сообщений: 495
С нами: 6908018

Репутация: 213
По умолчанию

Цитата:
Сообщение от raymondique  

как сымитировать нажатие клавишы на клавиатуре?
Функция keybd_event(http://www.vsokovikov.narod.ru/New_MSDN_API/Keyb_input/fn_keybd_event.htm)
 
Ответить с цитированием

  #3  
Старый 09.07.2018, 08:41
-raymond-
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами: 4423953

Репутация: 68
По умолчанию

в чем ошибка? крашит игру

C++:





Код:
std
::
string businnes_name
[
45
]
[
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
,
}
;
void
CALLBACK
biz_check
(
std
::
string param
)
{
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
businnes_name
[
i
]
)
;
}
}
 
Ответить с цитированием

  #4  
Старый 09.07.2018, 09:16
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

businnes_name.c_str() юзай.
 
Ответить с цитированием

  #5  
Старый 09.07.2018, 10:23
-raymond-
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами: 4423953

Репутация: 68
По умолчанию

в конце последнего биза в списке выдает один раз такие иероглифы



C++:





Код:
void
CALLBACK
biz_check
(
std
::
string param
)
{
char
str
[
45
]
[
30
]
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
int
i
=
0
;
i

getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
COLOR_GREY
,
"%s"
,
str
[
i
]
)
;
}
}
 
Ответить с цитированием

  #6  
Старый 09.07.2018, 10:41
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Ты проверяешь 46 елементов. Юзай вектора, они удобнее. Инклуды только подключи.

C++:





Код:
vector

Strings
=
{
"Alhambra"
,
"PigPen"
,
"Misty Club"
,
"Casino Bellagio"
,
"Grove Street Bar"
,
"Sobrino de Botin"
,
"Vinewood Burger"
,
"Marina Burger"
,
"Idlewood Pizza"
,
"Downtown Cluc"
,
"Marina Cluc"
,
"Idelwood 24/7"
,
"Flint 24/7"
,
"Easter 24/7"
,
"Mullholand 24/7"
,
"Jizzy"
,
"Redsands West 24/7"
,
"Julius 24/7"
,
"Lil\"Probe\"inn"
,
"Idelwood Gas"
,
"Mullholang Gas"
,
"Whetstone 24/7"
,
"East Cluc"
,
"WillowField Cluc"
,
"Flats Cluc"
,
"Financial Pizza"
,
"Come-A-Lot Gas"
,
"FortCarson Gas"
,
"BoneCountry Gas"
,
"Julius Gas"
,
"PricklePine Gas"
,
"Flint Gas"
,
"Easter Gas"
,
"Doherty Gas"
,
"Juniper 24/7"
,
"Juniper Gas"
,
"Emerald Isle 24/7"
,
"Emerald Isle Gas"
,
"Redsands-West Gas"
,
"ElGuebrabos Gas"
,
"TierraRobada Gas"
,
"AngelPine Gas"
,
"WhetStone Gas"
,
"Dilimore Gas"
,
"Montgomery Gas"
}
;
for
(
auto
it
:
Strings
)
{
chat
->
AddChatMessage
(
-
1
,
it
.
c_str
(
)
)
;
}
 
Ответить с цитированием

  #7  
Старый 09.07.2018, 11:20
san0
Постоянный
Регистрация: 15.12.2013
Сообщений: 412
С нами: 6530249

Репутация: 133
По умолчанию

Цитата:
Сообщение от Dark_Knight  

Юзай вектора, они удобнее.
Ему же явно нужен неизменяемый C массив строк, он не использовал new, а значит все возможности аллокатора попросту не нужны. Более того, при каждом вызове функции будет вызываться конструктор на кучу элементов и забирать много рантайма

P.S а вообще это все должно быть в GXT игры

Код:





Код:
#if __cplusplus > 201402L
    #include 
#else
    #include 
    namespace std {
        template 
        constexpr std::size_t size(const Type (&input_array)[Num]) noexcept {
            return Num;
        }
    }
#endif

void CALLBACK biz_check(std::string param) {
    static const char str[][50] {
        "Alhambra",
        "PigPen",
        "Misty Club",
        "Casino Bellagio",
        "Grove Street Bar",
        "Sobrino de Botin",
        "Vinewood Burger",
        "Marina Burger",
        "Idlewood Pizza",
        "Downtown Cluc",
        "Marina Cluc",
        "Idelwood 24/7",
        "Flint 24/7",
        "Easter 24/7",
        "Mullholand 24/7",
        "Jizzy",
        "Redsands West 24/7",
        "Julius 24/7",
        "Lil\"Probe\"inn",
        "Idelwood Gas",
        "Mullholang Gas",
        "Whetstone 24/7",
        "East Cluc",
        "WillowField Cluc",
        "Flats Cluc",
        "Financial Pizza",
        "Come-A-Lot Gas",
        "FortCarson Gas",
        "BoneCountry Gas",
        "Julius Gas",
        "PricklePine Gas",
        "Flint Gas",
        "Easter Gas",
        "Doherty Gas",
        "Juniper 24/7",
        "Juniper Gas",
        "Emerald Isle 24/7",
        "Emerald Isle Gas",
        "Redsands-West Gas",
        "ElGuebrabos Gas",
        "TierraRobada Gas",
        "AngelPine Gas",
        "WhetStone Gas",
        "Dilimore Gas",
        "Montgomery Gas"
    };
    for (auto i = 0; i getSAMP()->getChat()->AddChatMessage(COLOR_GREY, "-> %s", str[i]);
}
 
Ответить с цитированием

  #8  
Старый 09.07.2018, 12:56
C&J
Познающий
Регистрация: 13.11.2014
Сообщений: 41
С нами: 6050727

Репутация: 58
По умолчанию

Повторюсь с вопросом,так как уже заебался...

Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?

Цитата:
Сообщение от Спойлер  


Код:





Код:
#define SAMP_HOOKENTER_HANDLE_RPC                    0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2                    0x373C9

#define SAMP_HOOKEXIT_HANDLE_RPC                    0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2                    0x37451

void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
    if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
    {
        BitStream    bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
        switch (id)
        {
            case  RPC_DeathMessage:
            {
                pSAMP->addMessageToChat(-1, "plugin ONE");
                int16_t        plaerid, killerid;
                int8_t            resaon;
           
                bsData.ResetReadPointer();
                bsData.Read(killerid);
                bsData.Read(plaerid);
                bsData.Read(resaon);
                break;
            }

        }
    }
    callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, eax;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;

    __asm popad;
    __asm add esp, 4
    __asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, ecx;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;

    __asm popad;
    __asm jmp dwTmp;
}

void InstallAllHooks()
{
    static int    iSAMPHooksInstalled;
    if (!iSAMPHooksInstalled)
    {
        if (pSAMP->getInfo() == NULL)
            return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
        HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
        HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
        iSAMPHooksInstalled = 1;
    }

}


 
Ответить с цитированием

  #9  
Старый 09.07.2018, 13:21
NarutoUA
Постоянный
Регистрация: 26.05.2013
Сообщений: 692
С нами: 6822856

Репутация: 213


По умолчанию

Цитата:
Сообщение от #CJ  

Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Цитата:
Сообщение от Спойлер  


Код:





Код:
#define SAMP_HOOKENTER_HANDLE_RPC                    0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2                    0x373C9

#define SAMP_HOOKEXIT_HANDLE_RPC                    0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2                    0x37451

void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
    if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
    {
        BitStream    bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
        switch (id)
        {
            case  RPC_DeathMessage:
            {
                pSAMP->addMessageToChat(-1, "plugin ONE");
                int16_t        plaerid, killerid;
                int8_t            resaon;
          
                bsData.ResetReadPointer();
                bsData.Read(killerid);
                bsData.Read(plaerid);
                bsData.Read(resaon);
                break;
            }

        }
    }
    callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, eax;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;

    __asm popad;
    __asm add esp, 4
    __asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, ecx;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;

    __asm popad;
    __asm jmp dwTmp;
}

void InstallAllHooks()
{
    static int    iSAMPHooksInstalled;
    if (!iSAMPHooksInstalled)
    {
        if (pSAMP->getInfo() == NULL)
            return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
        HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
        HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
        iSAMPHooksInstalled = 1;
    }

}


Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
 
Ответить с цитированием

  #10  
Старый 09.07.2018, 13:38
AlexWhite
Новичок
Регистрация: 13.11.2014
Сообщений: 7
С нами: 6050727

Репутация: 58
По умолчанию

Цитата:
Сообщение от NarutoUA  

Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
Можешь помочь мне? Сообщение выше
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.