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

  #4001  
Старый 23.09.2019, 20:33
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

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

Lua:





[CODE]
function
main
(
)
for
i
=
48
,
57
do
if
isKeyJustPressed
(
i
)
then
if
state



как перенести данное произведение на C++, isKeyPressed не работает в диалоге, GetAsyncState флудит
 
Ответить с цитированием

  #4002  
Старый 24.09.2019, 18:09
-raymond-
Участник форума
Регистрация: 17.12.2017
Сообщений: 110
С нами: 4423953

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

[QUOTE="twixjr12s"]

Lua:





[CODE]
function
main
(
)
for
i
=
48
,
57
do
if
isKeyJustPressed
(
i
)
then
if
state

C++:





[CODE]
void
checkKey
(
)
{
static
DWORD tick
=
GetTickCount
(
)
;
if
(
tick
-
GetTickCount
(
)

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

  #4003  
Старый 24.09.2019, 20:37
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

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

[QUOTE="raymondique"]

я же ответил, хукни wndprochandler или юзай функцию в потоке

C++:





[CODE]
void
checkKey
(
)
{
static
DWORD tick
=
GetTickCount
(
)
;
if
(
tick
-
GetTickCount
(
)
 
Ответить с цитированием

  #4004  
Старый 25.09.2019, 00:05
_Vine_
Участник форума
Регистрация: 06.01.2016
Сообщений: 154
С нами: 5447649

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

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

вообще не работает)
C++:





Код:
// 1 способ
bool
CheckPress
(
)
{
static
bool
was_pressed
=
false
;
bool
pressed
=
GetAsyncKeyState
(
key
)
&
0x8000
;
if
(
was_pressed
!=
pressed
)
{
was_pressed
=
pressed
;
if
(
pressed
)
return
true
;
}
return
false
;
}
void
CALLBACK
mainloop
(
)
{
if
(
CheckPress
(
)
)
{
// code
}
// ...
}


C++:





Код:
// 2 способ
void
CheckPressThread
(
)
{
bool
was_pressed
=
false
;
while
(
true
)
{
bool
pressed
=
GetAsyncKeyState
(
key
)
&
0x8000
;
if
(
was_pressed
!=
pressed
)
{
was_pressed
=
pressed
;
if
(
pressed
)
{
// code
}
}
Sleep
(
50
)
;
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
.
.
.
)
return
;
CreateThread
(
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
&
CheckPressThread
,
0
,
0
,
0
)
;
init
=
true
;
}
}


C++:





Код:
// 3 способ
#define GTA_HWND **(HWND**)0xC97C1C
static
WNDPROC g_OriginalWndProc
=
nullptr
;
LRESULT __stdcall
WndProc
(
HWND hWnd
,
UINT msg
,
LPARAM lParam
,
WPARAM wParam
)
{
switch
(
msg
)
{
case
WM_KEYDOWN
:
case
WM_SYSKEYDOWN
:
{
if
(
wParam
==
key
)
{
// code
}
}
break
;
}
return
CallWindowProc
(
g_OriginalWndProc
,
hWnd
,
msg
,
lParam
,
wParam
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
.
.
.
)
return
;
g_OriginalWndProc
=
SetWindowLongPtrA
(
GTA_HWND
,
GWLP_WNDPROC
,
(
LONG_PTR
)
&
WndProc
)
;
init
=
true
;
}
}
 
Ответить с цитированием

  #4005  
Старый 25.09.2019, 18:44
twixjr12s
Новичок
Регистрация: 20.09.2019
Сообщений: 17
С нами: 3499389

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

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

mainloop
Цитата:
Сообщение от _Vine_  

C++:





Код:
// 1 способ
bool
CheckPress
(
)
{
static
bool
was_pressed
=
false
;
bool
pressed
=
GetAsyncKeyState
(
key
)
&
0x8000
;
if
(
was_pressed
!=
pressed
)
{
was_pressed
=
pressed
;
if
(
pressed
)
return
true
;
}
return
false
;
}
void
CALLBACK
mainloop
(
)
{
if
(
CheckPress
(
)
)
{
// code
}
// ...
}


C++:





Код:
// 2 способ
void
CheckPressThread
(
)
{
bool
was_pressed
=
false
;
while
(
true
)
{
bool
pressed
=
GetAsyncKeyState
(
key
)
&
0x8000
;
if
(
was_pressed
!=
pressed
)
{
was_pressed
=
pressed
;
if
(
pressed
)
{
// code
}
}
Sleep
(
50
)
;
}
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
.
.
.
)
return
;
CreateThread
(
0
,
0
,
(
LPTHREAD_START_ROUTINE
)
&
CheckPressThread
,
0
,
0
,
0
)
;
init
=
true
;
}
}


C++:





Код:
// 3 способ
#define GTA_HWND **(HWND**)0xC97C1C
static
WNDPROC g_OriginalWndProc
=
nullptr
;
LRESULT __stdcall
WndProc
(
HWND hWnd
,
UINT msg
,
LPARAM lParam
,
WPARAM wParam
)
{
switch
(
msg
)
{
case
WM_KEYDOWN
:
case
WM_SYSKEYDOWN
:
{
if
(
wParam
==
key
)
{
// code
}
}
break
;
}
return
CallWindowProc
(
g_OriginalWndProc
,
hWnd
,
msg
,
lParam
,
wParam
)
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
.
.
.
)
return
;
g_OriginalWndProc
=
SetWindowLongPtrA
(
GTA_HWND
,
GWLP_WNDPROC
,
(
LONG_PTR
)
&
WndProc
)
;
init
=
true
;
}
}

C++:





Код:
wchar_t
*
text
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
GetInputText
(
)
;
if
(
CheckPress
(
49
)
)
{
switch
(
strlen
(
(
char
*
)
SF
->
getSAMP
(
)
->
getDialog
(
)
->
GetInputText
(
)
)
)
{
case
0
:
sprintf
(
result
,
"с"
)
;
break
;
case
1
:
sprintf
(
result
,
"са"
)
;
break
;
case
2
:
sprintf
(
result
,
"сас"
)
;
break
;
case
3
:
sprintf
(
result
,
"саса"
)
;
break
;
case
3
:
sprintf
(
result
,
"сасат"
)
;
break
;
default
:
sprintf
(
result
,
"сасать"
)
;
break
;
}
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
result
)
;
}
else
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
(
char
*
)
text
)
;


Застревает на первой букве, я понимаю что это из-за этой строчки SF->getSAMP()->getDialog()->SetInputText((char*)text), но не знаю чем заменить
 
Ответить с цитированием

  #4006  
Старый 25.09.2019, 22:42
_Vine_
Участник форума
Регистрация: 06.01.2016
Сообщений: 154
С нами: 5447649

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

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

C++:





Код:
wchar_t
*
text
=
SF
->
getSAMP
(
)
->
getDialog
(
)
->
GetInputText
(
)
;
if
(
CheckPress
(
49
)
)
{
switch
(
strlen
(
(
char
*
)
SF
->
getSAMP
(
)
->
getDialog
(
)
->
GetInputText
(
)
)
)
{
case
0
:
sprintf
(
result
,
"с"
)
;
break
;
case
1
:
sprintf
(
result
,
"са"
)
;
break
;
case
2
:
sprintf
(
result
,
"сас"
)
;
break
;
case
3
:
sprintf
(
result
,
"саса"
)
;
break
;
case
3
:
sprintf
(
result
,
"сасат"
)
;
break
;
default
:
sprintf
(
result
,
"сасать"
)
;
break
;
}
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
result
)
;
}
else
SF
->
getSAMP
(
)
->
getDialog
(
)
->
SetInputText
(
(
char
*
)
text
)
;


Застревает на первой букве, я понимаю что это из-за этой строчки SF->getSAMP()->getDialog()->SetInputText((char*)text), но не знаю чем заменить
Попробуй использовать getDialog()->pText вместо Get/SetInputText
 
Ответить с цитированием

  #4007  
Старый 26.09.2019, 11:35
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

Ошибка пикрелейтед, sf-plugin. Возникает от случая к случаю. Обычно после 10-20 минут работы цикла в отдельном потоке. Раскрыть код, увы, не могу. Могу лишь подчеркнуть, что это обычный бесконечный цикл, в котором вызываются некоторые функции. Есть ли какие-нибудь решения этого недоразумения, за исключением переноса цикла в мэйнлуп?

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

  #4008  
Старый 26.09.2019, 13:00
rraggerr
Познавший АНТИЧАТ
Регистрация: 16.03.2017
Сообщений: 1,626
С нами: 4821087

Репутация: 133


По умолчанию

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

Ошибка пикрелейтед, sf-plugin. Возникает от случая к случаю. Обычно после 10-20 минут работы цикла в отдельном потоке. Раскрыть код, увы, не могу. Могу лишь подчеркнуть, что это обычный бесконечный цикл, в котором вызываются некоторые функции. Есть ли какие-нибудь решения этого недоразумения, за исключением переноса цикла в мэйнлуп?


Через сампфункс нельзя создавать потоки вообще, колхозь с таймерами
 
Ответить с цитированием

  #4009  
Старый 26.09.2019, 14:29
ALF
Постоянный
Регистрация: 14.11.2017
Сообщений: 319
С нами: 4472205

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

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

Ошибка пикрелейтед, sf-plugin. Возникает от случая к случаю. Обычно после 10-20 минут работы цикла в отдельном потоке. Раскрыть код, увы, не могу. Могу лишь подчеркнуть, что это обычный бесконечный цикл, в котором вызываются некоторые функции. Есть ли какие-нибудь решения этого недоразумения, за исключением переноса цикла в мэйнлуп?


Ты создаёшь поток в mainloop? Если да, то это не лучший вариант, создавай его в DLL_PROCESS_ATTACH
 
Ответить с цитированием

  #4010  
Старый 26.09.2019, 14:32
astap_
Постоянный
Регистрация: 05.03.2014
Сообщений: 626
С нами: 6415078

Репутация: 163


По умолчанию

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

Ты создаёшь поток в mainloop? Если да, то это не лучший вариант, создавай его в DLL_PROCESS_ATTACH
в теле команды. спасибо, буду пробовать.
 
Ответить с цитированием
Ответ





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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

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

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

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

×

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

Сумма USDT:

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

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