- 208
- 147
Вроде как https://blast.hk/threads/32712/#post-323606Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?
Вроде как https://blast.hk/threads/32712/#post-323606Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?
does someone have address for chat input toggle on ?
#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;
};
Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?Подскажите, как использовать курсор с имгуи? Не могу разобраться.
Подскажите, как использовать курсор с имгуи? Не могу разобраться.
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;
Видимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?
Спасибо. Но хотелось бы реализацию с системным курсором из Windows.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;
Нету отдельного курсора в имгуи, есть один курсорВидимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.
Спасибо. Но хотелось бы реализацию с системным курсором из Windows.
Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 разКакая будет нагрузка на процессор, если в потоке будет Sleep(0)?
#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;
}
Нулевое значение аргумента в Sleep заставляет поток отказаться от оставшейся части его временного интервала в пользу любого другого потока, который готов к запуску. Если других потоков, готовых к выполнению нет, функция немедленно возвращается, и поток продолжает выполнение.*Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?
Нагрузка на процессор и время исполнения кода, не одно и тоже. К тому же мы не знаем какие оптимизации произвел компилятор в твоем случае.Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз
Посмотреть вложение 36525C++:#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; }
зачем это всё если есть отладчик?Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз
Посмотреть вложение 36525C++:#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; }
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;
}