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

Stiopko

Известный
Проверенный
307
218
does someone have address for chat input toggle on ?
C++:
#define SAMP_CHAT_INPUT_INFO_OFFSET                    0x21A0E8  // pointer to pointer to structure stInputInfo

struct stInputBox
{
    void    *pUnknown;
    uint8_t    bIsChatboxOpen; // <------------------------------ maybe this?
    uint8_t    bIsMouseInChatbox;
    uint8_t    bMouseClick_related;
    uint8_t    unk;
    DWORD    dwPosChatInput[2];
    uint8_t    unk2[263];
    int        iCursorPosition;
    uint8_t    unk3;
    int        iMarkedText_startPos; // Highlighted text between this and iCursorPosition
    uint8_t    unk4[20];
    int        iMouseLeftButton;
};

typedef void(__cdecl *CMDPROC) (PCHAR);
struct stInputInfo
{
    void                *pD3DDevice;
    void                *pDXUTDialog;
    stInputBox            *pDXUTEditBox;
    CMDPROC                pCMDs[SAMP_MAX_CLIENTCMDS];
    char                szCMDNames[SAMP_MAX_CLIENTCMDS][33];
    int                    iCMDCount;
    int                    iInputEnabled;
    char                szInputBuffer[129];
    char                szRecallBufffer[10][129];
    char                szCurrentBuffer[129];
    int                    iCurrentRecall;
    int                    iTotalRecalls;
    CMDPROC                pszDefaultCMD;
};

6 line?
 
Последнее редактирование:

Stiopko

Известный
Проверенный
307
218
Есть ли у кого-то адрес функции DialogResponse как в sf но том уже готовый хук а мне только адрес функи?
 

CatKnight

Известный
148
55
Подскажите, как использовать курсор с имгуи? Не могу разобраться.
 

Stiopko

Известный
Проверенный
307
218
Подскажите, как использовать курсор с имгуи? Не могу разобраться.
Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?
 

_=Gigant=_

Известный
144
221
Подскажите, как использовать курсор с имгуи? Не могу разобраться.

C++:
bool bShowImGui_Menu;
static int mouse_imgui_menu = 2;

    if (bShowImGui_Menu) //if menu is ON -> ImGui::Begin("##ImGuiMenu", &bShowImGui_Menu....
    {
        mouse_imgui_menu = 0;   
        toggleSAMPCursor(1);        <- //mouse toggle for menu
    }
    else
    {
        if (mouse_imgui_menu == 0)
        {
            toggleSAMPCursor(0);
            mouse_imgui_menu++;
        }
    }

//WND Procedure

extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND wnd, UINT umsg, WPARAM wparam, LPARAM lparam); //imgui win proc
static LRESULT CALLBACK wnd_proc(HWND wnd, UINT umsg, WPARAM wparam, LPARAM lparam) //our win proc (sobeit -> keyhook.cpp)

   if (ImGui_ImplWin32_WndProcHandler(wnd, umsg, wparam, lparam))
         return true;
 

CatKnight

Известный
148
55
Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?
Видимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.

C++:
bool bShowImGui_Menu;
static int mouse_imgui_menu = 2;

    if (bShowImGui_Menu) //if menu is ON -> ImGui::Begin("##ImGuiMenu", &bShowImGui_Menu....
    {
        mouse_imgui_menu = 0;  
        toggleSAMPCursor(1);        <- //mouse toggle for menu
    }
    else
    {
        if (mouse_imgui_menu == 0)
        {
            toggleSAMPCursor(0);
            mouse_imgui_menu++;
        }
    }

//WND Procedure

extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND wnd, UINT umsg, WPARAM wparam, LPARAM lparam); //imgui win proc
static LRESULT CALLBACK wnd_proc(HWND wnd, UINT umsg, WPARAM wparam, LPARAM lparam) //our win proc (sobeit -> keyhook.cpp)

   if (ImGui_ImplWin32_WndProcHandler(wnd, umsg, wparam, lparam))
         return true;
Спасибо. Но хотелось бы реализацию с системным курсором из Windows.
 

Stiopko

Известный
Проверенный
307
218
Видимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.


Спасибо. Но хотелось бы реализацию с системным курсором из Windows.
Нету отдельного курсора в имгуи, есть один курсор
 

Musaigen

abobusnik
Проверенный
1,605
1,361
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?
 

Stiopko

Известный
Проверенный
307
218
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?
Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз
C++:
#include <windows.h>
#include <ctime>
#include <chrono>
#include <iostream>

int main()
{
    size_t count = 10000000;
    auto start = std::chrono::system_clock::now();

    for (size_t i = 0; i < count; i++)
        Sleep(0);
    auto end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Sleep(0): " << elapsed_seconds.count() << " S << " << count << " " << std::endl;

    start = std::chrono::system_clock::now();
    for (size_t i = 0; i < count; i++)
    {
    }
    end = std::chrono::system_clock::now();

    elapsed_seconds = end - start;
    std::cout << "NULL: " << elapsed_seconds.count() << " S << " << count << " " << std::endl;
    system("pause");
    return 0;
}
36525
 

#Rin

Известный
Всефорумный модератор
1,214
1,043
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?
Нулевое значение аргумента в Sleep заставляет поток отказаться от оставшейся части его временного интервала в пользу любого другого потока, который готов к запуску. Если других потоков, готовых к выполнению нет, функция немедленно возвращается, и поток продолжает выполнение.*

* На некоторых версиях Windows поведение может немного отличаться.
** Подробнее, можешь еще википедию почитать.


Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз
C++:
#include <windows.h>
#include <ctime>
#include <chrono>
#include <iostream>

int main()
{
    size_t count = 10000000;
    auto start = std::chrono::system_clock::now();

    for (size_t i = 0; i < count; i++)
        Sleep(0);
    auto end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Sleep(0): " << elapsed_seconds.count() << " S << " << count << " " << std::endl;

    start = std::chrono::system_clock::now();
    for (size_t i = 0; i < count; i++)
    {
    }
    end = std::chrono::system_clock::now();

    elapsed_seconds = end - start;
    std::cout << "NULL: " << elapsed_seconds.count() << " S << " << count << " " << std::endl;
    system("pause");
    return 0;
}
Посмотреть вложение 36525
Нагрузка на процессор и время исполнения кода, не одно и тоже. К тому же мы не знаем какие оптимизации произвел компилятор в твоем случае.
 
  • Нравится
Реакции: Stiopko

ALF

Известный
Проверенный
320
538
Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз
C++:
#include <windows.h>
#include <ctime>
#include <chrono>
#include <iostream>

int main()
{
    size_t count = 10000000;
    auto start = std::chrono::system_clock::now();

    for (size_t i = 0; i < count; i++)
        Sleep(0);
    auto end = std::chrono::system_clock::now();

    std::chrono::duration<double> elapsed_seconds = end - start;
    std::cout << "Sleep(0): " << elapsed_seconds.count() << " S << " << count << " " << std::endl;

    start = std::chrono::system_clock::now();
    for (size_t i = 0; i < count; i++)
    {
    }
    end = std::chrono::system_clock::now();

    elapsed_seconds = end - start;
    std::cout << "NULL: " << elapsed_seconds.count() << " S << " << count << " " << std::endl;
    system("pause");
    return 0;
}
Посмотреть вложение 36525
зачем это всё если есть отладчик?
 

CatKnight

Известный
148
55
Объясните, пожалуйста, как в wndproc заблокировать сообщение для окна, но оставить его для плагина своего? Сейчас использую хук wndprochandler, который изначально идёт в проекте sf plugin. Подходит он для этого же?
 

Adder

Известный
22
0
Пытаюсь пропустить диалог с помощью кода ниже. Диалог пропускается, но перестают работать серверные команды. Сообщения в чат отправляются, но серверные команды не срабатывают ( Данную проблему заметил только на Evolve, на СРП он пропускает диалог и серверные команды работают ) Также пробовал закрывать диалог через SF->getSAMP()->getDialog()->Close(1); ( Проблема та же, диалог закрывается, команды серверные не работают)
Код:
   if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog) {
        WORD DialogID;
        BYTE style, caplen, button1_len, button2_len;
        char caption[255], button1[25], button2[25], info[0x1000];

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(DialogID);
        params->bitStream->Read(style);
        params->bitStream->Read(caplen);
        params->bitStream->Read(caption, caplen);
        caption[caplen] = '\0';
        params->bitStream->Read(button1_len);
        params->bitStream->Read(button1, button1_len);
        button1[button1_len] = '\0';
        params->bitStream->Read(button2_len);
        params->bitStream->Read(button2, button2_len);
        button2[button2_len] = '\0';
        SF->getRakNet()->DecodeString(info, 0x1000, params->bitStream);

        if (DialogID == 0) return false;
    }