Доступ к памяти других процессов.
Адрес сенсы ищется с помощью программы ArtMoney, у неё есть подробное описание на русском языке.
Управление сенсой в CS 1.6:
При нажатии левой клавиши мыши скрипт посылает нажатие, запоминает текущее значение сенсы и меняет его на 0 (на деле скорость не становится равна 0, но весьма значительно замедляется).
При отпускании левой клавиши мыши скрипт возвращает предыдущее значение сенсы.
#noenv
#singleinstance force
#ifwinactive ahk_class Valve001
*$~lbutton::
WinGet, ID, PID, A
WriteAddress = 0x0392364C
ReadAddress = 0x0392364C
Size = 4
Data = 0
PreviousSence := GetVar(ReadAddress,ID,Size) ;запоминаем текущую сенсу
WriteVar(WriteAddress,ID,Size,Data)
return
*$~lbutton up::
WinGet, ID, PID, A
WriteAddress = 0x0392364C
Size = 4
Data := PreviousSence ;возвращаем записанную ранее сенсу
WriteVar(WriteAddress,ID,Size,Data)
return
;***************функции*************************
WriteVar(WriteAddress,ID,Size,Data)
{
Address := WriteAddress ; Адрес, куда писать.
Data := Data ; Что писать.
Size := Size ; Сколько байт писать.
VarSetCapacity(Buf, Size, 0) ; Буфер, для записываемых данных.
NumPut(Data, Buf, 0, "UInt") ; Данные - в буфер.
PROCESS_VM_WRITE = 0x20 ; Права на процесс.
PROCESS_VM_OPERATION = 0x8
PID := ID
hProcess := DllCall("OpenProcess", "UInt", PROCESS_VM_WRITE | PROCESS_VM_OPERATION
, "Int", False
, "UInt", PID)
If(!hProcess) {
MsgBox, Не удалось открыть процесс.
ExitApp
}
Ret := DllCall("WriteProcessMemory", "UInt", hProcess
, "UInt", Address
, "UInt", &Buf
, "UInt", Size
, "UInt", 0)
DllCall("CloseHandle", "UInt", hProcess) ; Освобождение хэндла процесса.
If(!Ret) {
MsgBox, Не удалось записать.
ExitApp
}
}
GetVar(ReadAddress,ID,Size)
{
PID := DllCall("GetCurrentProcessId")
ReadAddress := ReadAddress ; Адрес, откуда читать.
ReadSize := Size ; Сколько байт читать.
VarSetCapacity(Buf, ReadSize, 0) ; Буфер, куда считывать.
PROCESS_VM_READ = 0x10 ; Права на процесс.
PID := ID
hProcess := DllCall("OpenProcess", UInt, PROCESS_VM_READ
, Int, False
, UInt, PID)
If(!hProcess) {
MsgBox, Не удалось открыть процесс.
ExitApp
}
Ret := DllCall("ReadProcessMemory", UInt, hProcess
, UInt, ReadAddress
, UInt, &Buf
, UInt, ReadSize
, UInt, 0)
DllCall("CloseHandle", UInt, hProcess) ; Освобождение хэндла процесса.
If(!Ret) {
MsgBox, Не удалось прочитать.
ExitApp
}
return NumGet(Buf, 0, "UInt") ; Считывание из буфера в переменную.
}
P.S. Классная идея, надо сделать замедление курсора на Shift
*для справки в CS есть консоль, вызываемая буквой Ё, все настройки можно задавать через неё, так, чтобы задать сенсу, надо написать sensitivity X, где X - значение сенсы*