Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Hito on March 01, 2019, 09:03:42 PM
-
:o
-
wmic process get name >file.txt
-
wmic process get name >file.txt
Это что такое...?
-
wmic process get name >file.txt
Это что такое...?
Создаёшь батник и получаешь через текстовик имена процессов
https://ab57.ru/cmdlist/wmic.html
-
wmic process get name >file.txt
Это что такое...?
Командная строка. Сохраняет в файл.
EXECUTE("cmd.exe", "/C wmic process get name >D:\Processes.txt")
-
А я вспомнил что в автоите чтото подобное видел :)
Глянул в справку - ProcessList()
Пока вы тут уже все проще придумали, я проверил:
Example()
Func Example()
$aProcessList = ProcessList()
ConsoleWrite("количество процессов - " & ($aProcessList[0][0]-1) / 2 & @CRLF)
For $i = 1 To $aProcessList[0][0] Step 2
ConsoleWrite($aProcessList[$i][0] & " - " & $aProcessList[$i][1] & @CRLF)
Next
EndFunc
Exit
Тоже работает... Вроде правильно. Но это так... конечно же проще через командную строку :D
-
Каждую секунду запускать CMD... Это попа...
-
А можно как-то проверить наличие ОДНОГО процесса? Скажем - process.exe
-
Так а WNDFIND (title, [begin]) не подойдет? Если нету такого заголовок, он возвратит 0 . Или у этого процесса нет заголовка и окна?
-
Или у этого процесса нет заголовка и окна?
Окно есть, но заголовка у окна нет. Окно даже диспетчер окон кликера не видит...
-
(http://imglink.ru/pictures/01-03-19/24ab24460f09f6c7492be22bb955a071.jpg)
Это окно нужно как-то ловить...
-
НУ, у меня идей больше нет.
Могу состряпать ехе-шку на автоите, если дашь имя этого процесса. Будет в ини передавать параметр присутствия его. Делов на 2 минуты... Отрабатывать будет за ~милисекунду.
-
Могу состряпать ехе-шку
Ексешку и я могу, но... http://crapware.aidf.org/forum/index.php?topic=4477.msg30713#msg30713 (http://crapware.aidf.org/forum/index.php?topic=4477.msg30713#msg30713)
-
Попробуй передавать данные напрямую кликеру. SENDMESSAGE-ам передавай, GETMESSAGE-ам принимай. Быстроо, без посторонних файлов и касяков с ними.
Незнаю как это в делфи будет выглядеть, но автоитом я отсылал так параметры, вроде не сложно, зато четко и быстро.
-
Попробуй передавать данные напрямую кликеру. SENDMESSAGE-ам передавай, GETMESSAGE-ам принимай. Быстроо, без посторонних файлов и касяков с ними.
Это все конечно хорошо, но у меня уже столько костылей к проекту, что плюсовать к ним не особо хочется...
У меня в 17-ти виртуалках контролируется куча окон, их запуск, ошибки, активность окон - обо всем писать замучаюсь. Костылей уже куча понаделана...
-
Самый лучший вариант, это - ДЛЛ :D. Состряпай на делфи.
Или если с длл не знаком, дай код делфи, который будет определять наличие этого процесса, а я покажу как это будет выглядеть для длл.
-
Самый лучший вариант, это - ДЛЛ :D. Состряпай на делфи.
Или если с длл не знаком, дай код делфи, который будет определять наличие этого процесса, а я покажу как это будет выглядеть для длл.
Имя процесса нельзя просто впаивать в длл-ку, так как имя может изменяться и перемену кликер знает. Это не только длл-кликер общение нужно делать, но и кликер-длл. Чтобы кликер длл сообщал имя процесса, а длл кликеру его статус.
-
@echo off
Set Process=Clickermann
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
ECHO process=1 > file.ini
Exit
:ELSE
ECHO process=0 > file.ini
Exit
-
Ага... имя может меняться... А как кликерман узнает перемену?
Вообще, в длл можно и текст передать, если сильно захотеть. В v4.14 такая возможность есть, хотя такой вариант смахивает на костыль ;D . Там есть CODE(символ). Создаем массив каждого символа имени процесса, и передаем в длл. А там снова собираем в строку.
Я так пока не пробовал, но должно получиться :D
-
Можно как-то намутить длл-ку, которую кликер запускал бы и передавал бы ей имя процесса, а длл-ка проверяла бы статус процесса, передавала бы его кликеру назад и закрывалась бы? У меня уже башка не варит...
-
Можно как-то намутить длл-ку, которую кликер запускал бы и передавал бы ей имя процесса, а длл-ка проверяла бы статус процесса, передавала бы его кликеру назад и закрывалась бы? У меня уже башка не варит...
Именно так. Все верно. Можно попробовать. :)
-
Можно в батнике перезаписывать строку с новым именем
-
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
-
Можно в батнике перезаписывать строку с новым именем
Но упор весь в передаче параметра кликерману, а это в тваем случае - ини . Выше мы говорили о возможных косяках с ними.
-
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
@echo off
Set Process=Clickermann
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
ECHO process=1 > file.ini
Exit
:ELSE
ECHO process=0 > file.ini
Exit
-
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
@echo off
Set Process=Clickermann
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
ECHO process=1 > file.ini
Exit
:ELSE
ECHO process=0 > file.ini
Exit
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
-
Космич, пойми уже наконец )) Если каждую секунду на экране будет мелькать окно командной строки, то это ну совсем не вариант...))
К тому же опять же передача инфы через ини или какой-то другой файл...
-
но ведь её можно скрыть :D
-
У меня, например, есть длл-ка, для проверки активности нужного окна и в кликере это выглядит так:
CALL("handle_active_window.dll")
IF($hwnd_okna_igri ! $_return1)
//============================================= Клиент игры не активен
else
//============================================= Клиент игры активен
END_IF
Все работает очень быстро и надежно...
-
вот так будет выглядеть передача строки в длл:
$name = "process.exe"
//создаем массив
FOR($a=0, $a < 15) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name))
$arr_code[$a-1] = code(STRCUT($name, $a, 1)))
END_CYC
CALL ("check_process.dll", STRLEN($name), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
//в длл берем столько параметров, сколько указанно в первом параметре (длина строки), и создаем там саму строку имени процесса.
halt
-
вот так будет выглядеть передача строки в длл:
$name = "process.exe"
//создаем массив
FOR($a=0, $a < 15) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name))
$arr_code[$a-1] = code(STRCUT($name, $a, 1)))
END_CYC
CALL ("check_process.dll", STRLEN($name), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
//в длл берем столько параметров, сколько указанно в первом параметре (длина строки), и создаем там саму строку имени процесса.
halt
Ты можешь намутить эту длл-ку? Ато я сейчас колупаться буду до утра...
-
Я чего-то обнаглел сегодня... ::) Я просто с 5-ти утра с этими скриптами вожусь - голова уже не варит...
-
вот так будет выглядеть передача строки в длл:
$name = "process.exe"
//создаем массив
FOR($a=0, $a < 15) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name))
$arr_code[$a-1] = code(STRCUT($name, $a, 1)))
END_CYC
CALL ("check_process.dll", STRLEN($name), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
//в длл берем столько параметров, сколько указанно в первом параметре (длина строки), и создаем там саму строку имени процесса.
halt
Ты можешь намутить эту длл-ку? Ато я сейчас колупаться буду до утра...
;D Не, сорри, но я тоже не полон сил сегодня. Максимум на что есть вдохновение, это попробовать принять эти параметры и создать из них строку. А с остальным - это придется много искать, читать, вникать. Такчто.... ВСЯ НАДЕЖДА НА ТЕБЯ :D
-
Максимум на что есть вдохновение, это попробовать принять эти параметры и создать из них строку.
Я буду благодарен )) Именно это мне и нужно ))
А с остальным - это придется много искать, читать, вникать.
Если что... - http://crapware.aidf.org/forum/index.php?topic=4097.msg27886#msg27886 (http://crapware.aidf.org/forum/index.php?topic=4097.msg27886#msg27886)
Ты в свое время уже нашел, прочитал и вник ;D ;D ;D
-
;D Не, сорри, но я тоже не полон сил сегодня. Максимум на что есть вдохновение, это попробовать принять эти параметры и создать из них строку.
Как и обещал, на что вдохновения хватило. Передаем строку в длл из кликермана, а в длл принимаем и присваиваем переменной process_name:
Код для делфи (длл)
library test;
uses
Vcl.Dialogs,
SysUtils;
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
process_name: String;
i: Integer;
begin
//собираем строку
for i:= 1 to pIntArr(_mas^)[0] do
begin
Insert(Char(pIntArr(_mas^)[i]), process_name, i) ;
end;
ShowMessage(process_name); // process_name - наша строка, которую передал кликерман
result := 1; //не важно
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
begin
// тело пусто
end.
Передаем кликерманом массив из кодов символов:
$name = "process.exe"
//создаем массив
FOR($a=0, $a < 15) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name))
$arr_code[$a-1] = code(STRCUT($name, $a, 1))
END_CYC
CALL ("cmann_plugin.dll", STRLEN($name), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
//print($_return1)
halt
(https://i.imgur.com/GxORjhb.png)
А вот с наличием этого процесса, это ты уж сам, или может завтра посмотрю, поищу, что там да как.
:o длл-ка вышла в 2 с лишним мегабайта, во вложение не влазит. Изза Vcl.Dialogs модуля наверно. Незнаю, молжет альтернатива есть какая? В делфи 7 был просто "Dialogs" , в делфи 10 уже не прокатывает.
-
А что это за окошко...?
(http://imglink.ru/pictures/02-03-19/74d7ba3948547a0d8635462fc0d288ef.jpg)
-
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так, для уверенности, что все получилось правильно :D
Во вложении архив с длл.
-
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так для уверенности что все получилось правильно :D
Во вложении архив с длл.
Ну, спасибо большое! )))) В остальном думаю, что разберусь тут )) - http://www.cyberforum.ru/delphi-beginners/thread628578.html (http://www.cyberforum.ru/delphi-beginners/thread628578.html)
-
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так, для уверенности, что все получилось правильно :D
Во вложении архив с длл.
Точно... Я что-то "ShowMessage(process_name);" упустил из вида...)
-
Если кому понадобится...
Код в кликере:
// Подпрограмма - прописываем ее один раз в начале скрипта
SUB(check_process, $name_process, $max_num_lett)
//создаем массив
FOR($a=0, $a < $max_num_lett) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name_process))
$arr_code[$a-1] = code(STRCUT($name_process, $a, 1))
END_CYC
CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
UNDEFINE ($arr_code)
END_SUB
// Вызываем подпрограмму каждый раз, когда нам нужно чекнуть процесс
check_process ("explorer.exe", 12)
IF($_return1)
LOGWRITE ("Процесс присутствует")
else
LOGWRITE ("Процесс не найден")
END_IF
halt
Исходник dll (чисто информация для программистов на delphi):
library check_process;
uses
System.SysUtils, System.Classes, Winapi.Windows, TlHelp32;
function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
function execute( _mas: pInteger; _size: Integer): Integer; export; stdcall;
type
pIntArr = array[0..0] of Integer;
var
process_name: String;
i: Integer;
begin
//собираем строку
for i:= 1 to pIntArr(_mas^)[0] do
begin
Insert(Char(pIntArr(_mas^)[i]), process_name, i) ;
end;
// Проверяем наличие процесса
If ProcessExists(process_name) Then result := 1 Else result := 0
end;
//------------------------------------------------------------------------------
// список экспорта
exports execute;
{$R *.res}
begin
end.
dll-ка https://yadi.sk/d/MOnRtFRr_t4xRg (https://yadi.sk/d/MOnRtFRr_t4xRg)
-
можно еще один костыль приписать пока 4.14 в релиз не вышла)
$code_a = 65
$code_b = 66
$code_c = 67
// ...
$str = "abc"
FOR($i = 0, $i < STRLEN($str))
$arr[$i] = GETVAR(STRCONCAT("$code_", STRCUT($str, $i+1, 1)))
PRINT($arr[$i])
END_CYC
HALT
-
Если кому понадобится...
Код в кликере:
// Подпрограмма - прописываем ее один раз в начале скрипта
SUB(check_process, $name_process, $max_num_lett)
//создаем массив
FOR($a=0, $a < $max_num_lett) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name_process))
$arr_code[$a-1] = code(STRCUT($name_process, $a, 1))
END_CYC
CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
UNDEFINE ($arr_code)
END_SUB
// Вызываем подпрограмму каждый раз, когда нам нужно чекнуть процесс
check_process ("explorer.exe", 12)
halt
А так работает? Когда у тебя в check_process ("explorer.exe", 12) параметр максимальной длины =12, а при вызове длл используются элементы массива до 14, должна была вылезти ошибка не существующего элемента(ов). Если ошибки нету, то и создавать массив нет надобности. Можно обойтись вот таким вариантом:
SUB(check_process, $name_process)
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name_process))
$arr_code[$a-1] = code(STRCUT($name_process, $a, 1))
END_CYC
//если имя процесса будет длинее 15-ти символов, то нужно добавить в вызов еще параметров столько, сколько требуется, с запасом.
CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
END_SUB
// Вызываем подпрограмму каждый раз, когда нам нужно чекнуть процесс
check_process ("explorer.exe")
И UNDEFINE ($arr_code) тоже будет тратить драгоценные силы и время, убираем, лишнее.
Так и как? Получилось что требовалось? Самому тестить не охота.
-
При строке - FOR($a=1, $a <= STRLEN ($name_process))
выдает ошибку в строке - CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
Я тоже так хотел, но... :(
-
При строке - FOR($a=1, $a <= STRLEN ($name_process))
выдает ошибку в строке - CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
Чтото я запутался :( . Можно еще раз? Но немного поподробнее.
И да, я проверил, создавать массив нужно обязательно, иначе ошибка. Но вот почему в твоем варианте с параметром макс. длины небыло ошибки? Создавался же массив в 12 элементов, а при вызове длл использовались уже 15.
Правильно будет не использовать этот параметр длины, а вписать его статичным числом, и такое же число параметров прописать в вызов длл.
А еще лучше, выполнить создание массива один раз при старте скрипта, и больше не повторять.
Вот так:
SUB(check_process, $name_process)
//создаем массив, один раз
IF($cr = 0)
FOR($a=0, $a < 15) //максимальная длина имени процесса
$arr_code[$a] = 0
END_CYC
$cr = 1
END_IF
//пишем строку в массив (коды символов)
FOR($a=1, $a <= STRLEN ($name_process))
$arr_code[$a-1] = code(STRCUT($name_process, $a, 1))
END_CYC
CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14])
END_SUB
// Вызываем подпрограмму каждый раз, когда нам нужно чекнуть процесс
check_process ("explorer.exe")
halt
-
Создавался же массив в 12 элементов, а при вызове длл использовались уже 15.
;D Работает и работает... Видимо главное, чтобы не больше 15 символов было, или увеличивать тогда в строке:
CALL ("check_process.dll", STRLEN($name_process), $arr_code[0], $arr_code[1], $arr_code[2], $arr_code[3], $arr_code[4], $arr_code[5], $arr_code[6], $arr_code[7], $arr_code[8], $arr_code[9], $arr_code[10], $arr_code[11], $arr_code[12], $arr_code[13], $arr_code[14],$arr_code[15],$arr_code[16],$arr_code[17])... И так далее...
-
dramster! Родной! Выручай! У меня появилась охренительная идея, чтобы кликер не конфликтовал с другими прогами, при работе с ини-файлами! Мы можем намутить передачу в длл НЕСКОЛЬКИХ строковых параметров?
-
Передаешь строки по символьно кодами. Разделяешь их не используемыми кодами или серией кодов. В dll собираешь строки обратно.
Пример: 1 2 3 4 5 6 -1 7 8 9 1 -1 -2 и тд, где -1 конец строки, а -2 конец данных.
Напоминаю что если планируешь получать ответ из dll, без багов будет работать только в 1 потоке из-за того что переменные возврата глобальные.
-
Передаешь строки по символьно кодами. Разделяешь их не используемыми кодами или серией кодов. В dll собираешь строки обратно.
Пример: 1 2 3 4 5 6 -1 7 8 9 1 -1 -2 и тд, где -1 конец строки, а -2 конец данных.
Напоминаю что если планируешь получать ответ из dll, без багов будет работать только в 1 потоке из-за того что переменные возврата глобальные.
Мне пример надо... Я так нифига не понял...
-
Аааа... Передать несколько строк в одной строке, но между каждым "словом" впихнуть символ-метку, по которой длл разобьет уже одну строку на подстроки. Все - понял!
-
Все - понял!
Вот и отлично, только отрицательные числа длл вроде не принимает. Добавлено: или нет? Непомню, потестишь сам, разделителем можно сделать любое число за пределами asci, или юникода (если там в юникоде передает и русские символы), к примеру 99999 вполне подойдет
Лучше добавить еще один параметр в начале со значением количества строк.переменных, далее параметры с длиной строк, далее сами символы (коды). Я думаю так будет правильней. Помочь с кодом пока нет возможностей :(.
Хотя с разделителем - тоже вариант, тогда и параметр с длиной строки не придется отсылать.
-
В пределах integer берет (от -2ккк до +2ккк).
-
В пределах integer берет (от -2ккк до +2ккк).
Не понял
-
В пределах integer берет (от -2ккк до +2ккк).
Не понял
.....
Поскольку CALL("Plugin.DLL", ...) передает в DLL и принимает числа в диапазоне от -2 147 483 648 до 2 147 483 647, .....
Такчто то, что я написал выше про отрицательные числа не правда.
-
1к - 1 тысяча (косарь)
1кк - 1 миллион (лям, лимон)
1ккк - 1 миллиард (арбуз)
Жаргон использующийся в компьютерных играх (и в жизни)
-
wmic process get name >file.txt
Это что такое...?
Командная строка. Сохраняет в файл.
EXECUTE("cmd.exe", "/C wmic process get name >D:\Processes.txt")
Кликер не работает с файлом Processes.txt, который получается. В частности не работают - STRREADLN, TFCOUNT и TFREADARR. Что можно сделать?
-
// Версия км v4.14.003d x32
----------------------------
EXECUTE("cmd.exe", "/C wmic process get name >Processes.txt") //cmd на выходе делает файл в кодирвке UCS-2. Раньше вроде это не мешало для работы с кликерманом, по крайней мере я не замечал :/
wait(1)
//попроовал перевести его в UTF-8
FREADDATA ("Processes.txt", $arr) //разбиваем на байты файл
$str = ""
for($i=1, $i<arrsize($arr)-2,2) // cmd еще и BOM в начале пишет, пропускаем его, начинаем с третьего байта
$str = strconcat ($str,char($arr[$i+1]))
end_cyc
tfwrite("out.txt",$str) //Получайем тот же файл в UTF-8 "out.txt" . Если текст русский, то не уверен что сработает корректно.
print($str)
halt
-
// Версия км v4.14.003d x32
----------------------------
EXECUTE("cmd.exe", "/C wmic process get name >Processes.txt") //cmd на выходе делает файл в кодирвке UCS-2. Раньше вроде это не мешало для работы с кликерманом, по крайней мере я не замечал :/
wait(1)
//попроовал перевести его в UTF-8
FREADDATA ("Processes.txt", $arr) //разбиваем на байты файл
$str = ""
for($i=1, $i<arrsize($arr)-2,2) // cmd еще и BOM в начале пишет, пропускаем его, начинаем с третьего байта
$str = strconcat ($str,char($arr[$i+1]))
end_cyc
tfwrite("out.txt",$str) //Получайем тот же файл в UTF-8 "out.txt" . Если текст русский, то не уверен что сработает корректно.
print($str)
halt
Ппц уже файлов в проекте... И тут, чтоб получит запущенные процессы, еще два текстовых файла...
-
Необязательно хранить инфу в файле, оставляй в переменной :).
Я тут подумал, может всегото стоило поменять маркер BOM. И все и так заработало бы, ато я заморочился этими байтами... и скорее всего зря :o. Завтра проверю, или знатоки подскажут.
-
или знатоки подскажут
Видимо не подскажут...) Я в этих "БОМах" вообще ничего не понимаю...))
-
Проверил, не прокатило. Но немного просмотрев расположение байт в этой UCS-2 кодировке, состряпал скрипт, который убирает bom и нулевые байты. При этом получаем обычную строку ansi. Но если эту строку записать в файл, то на выходе получим уже utf-8 c bom.
Принципиально скрипт не поменялся, просто так нагляднее. (по крайней мере для мена :D)
// Версия км v4.14.003d x32
----------------------------
EXECUTE("cmd.exe", "/C wmic process get name >Processes.txt") ////cmd на выходе делает файл в кодирвке UCS-2
waitms(500)
FREADDATA ("Processes.txt", $arr,2) //разбиваем на байты файл, но пропускаем bom (2 байта)
$str = ""
for($i=0, $i < arrsize($arr)) //создаем вполне себе ANSI строку, со всеми переводоми строки
IF($arr[$i] ! 0)
$str = strconcat ($str,char($arr[$i]))
END_IF
end_cyc
print($str)// смотрим ее в логе
tfwrite("out.txt",$str) //но при записи в файл этой строки, она становится уже в utf-8, еще и bom добавляется
halt
-
А есть способ - получить список запущенных окон, а не процессов?
-
Посмотри тут.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1167
-
А есть способ - получить список запущенных окон, а не процессов?
Можно попробовать вот так. Конечно, много лишних движений, может есть вариант попроще, но все же он работает:
for($i=32, $i< 128) //сунем в массив все hwnd окон по порядку с латинскими буквами и символами
wndfindarr($arr, char($i))
IF(arrsize($arr) > 0)
ARRCONCAT ($arr_win, $arr)
END_IF
end_cyc
for($i=1040, $i< 1104) //добавляем все с кирилицей (RU)
wndfindarr($arr, char($i))
IF(arrsize($arr) > 0)
ARRCONCAT ($arr_win, $arr)
END_IF
end_cyc
ARRSORT ($arr_win, 0) // сортируем
$all_win[0] = $arr_win[1]
for($a=2,$a<arrsize($arr_win)) //убираем повторяющиеся hwnd
IF($arr_win[$a] ! $all_win[arrsize($all_win)-1])
arrpush($all_win, $arr_win[$a])
END_IF
end_cyc
for($i=0, $i< arrsize($all_win)) //смотрим результат
print(HGETTEXT($all_win[$i]))
end_cyc
HALT
v.4.14.003b
В логе:
22:19:10 Clickermann v4.14 x32
22:19:11 Program Manager
22:19:11 Результаты поиска - Opera
22:19:11 Справка Clickermann
22:19:11 Clickermann
22:19:11 Редактор - C:\Users\ed\Desktop\Clickermann v4.14 x32\
22:19:11 Лог
22:19:11 Калькулятор
-
В общем получение запущенных процессов намутил через dll и весь процесс занимает где-то от 10 до 25 мс и без танцев со всякими BOM-ами...
Думаю, что то же самое можно намутить с окнами.
-
Забыл сказать... dramster, спасибо! Всегда откликаешься...