Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Hito on March 01, 2019, 09:03:42 PM

Title: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 09:03:42 PM
 :o
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 09:33:51 PM
wmic process get name >file.txt
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 09:45:34 PM
wmic process get name >file.txt
Это что такое...?
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 09:55:18 PM
wmic process get name >file.txt
Это что такое...?
Создаёшь батник и получаешь через текстовик имена процессов

https://ab57.ru/cmdlist/wmic.html
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: open_78 on March 01, 2019, 09:57:02 PM
wmic process get name >file.txt
Это что такое...?
Командная строка. Сохраняет в файл.
Code: (clickermann) [Select]
EXECUTE("cmd.exe", "/C wmic process get name >D:\Processes.txt")
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:04:41 PM
А я вспомнил что в автоите чтото подобное видел  :)

Глянул в справку - ProcessList()

Пока вы тут уже все проще придумали, я проверил:

Code: (clickermann) [Select]
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

Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:09:17 PM
Каждую секунду запускать CMD... Это попа...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:15:30 PM
А можно как-то проверить наличие ОДНОГО процесса? Скажем - process.exe
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:20:00 PM
Так а WNDFIND (title, [begin])  не подойдет? Если нету такого заголовок, он возвратит 0 . Или у этого процесса нет заголовка и окна?
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:25:49 PM
Или у этого процесса нет заголовка и окна?
Окно есть, но заголовка у окна нет. Окно даже диспетчер окон кликера не видит...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:29:01 PM
(http://imglink.ru/pictures/01-03-19/24ab24460f09f6c7492be22bb955a071.jpg)

Это окно нужно как-то ловить...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:29:47 PM
НУ, у меня идей больше нет.

 Могу состряпать ехе-шку на автоите, если дашь имя этого процесса. Будет в ини передавать параметр присутствия его. Делов на 2 минуты... Отрабатывать будет за ~милисекунду.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:32:10 PM
Могу состряпать ехе-шку
Ексешку и я могу, но... http://crapware.aidf.org/forum/index.php?topic=4477.msg30713#msg30713 (http://crapware.aidf.org/forum/index.php?topic=4477.msg30713#msg30713)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:37:16 PM
Попробуй передавать данные напрямую кликеру. SENDMESSAGE-ам передавай, GETMESSAGE-ам принимай. Быстроо, без посторонних файлов и касяков с ними.

Незнаю как это в делфи будет выглядеть, но автоитом я отсылал так параметры, вроде не сложно, зато четко и быстро.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:40:37 PM
Попробуй передавать данные напрямую кликеру. SENDMESSAGE-ам передавай, GETMESSAGE-ам принимай. Быстроо, без посторонних файлов и касяков с ними.
Это все конечно хорошо, но у меня уже столько костылей к проекту, что плюсовать к ним не особо хочется...
У меня в 17-ти виртуалках контролируется куча окон, их запуск, ошибки, активность окон - обо всем писать замучаюсь. Костылей уже куча понаделана...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:43:41 PM
Самый лучший вариант, это  - ДЛЛ  :D. Состряпай на делфи.

Или если с длл не знаком, дай код делфи, который будет определять наличие этого процесса, а я покажу как это будет выглядеть для длл.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:46:20 PM
Самый лучший вариант, это  - ДЛЛ  :D. Состряпай на делфи.

Или если с длл не знаком, дай код делфи, который будет определять наличие этого процесса, а я покажу как это будет выглядеть для длл.
Имя процесса нельзя просто впаивать в длл-ку, так как имя может изменяться и перемену кликер знает. Это не только длл-кликер общение нужно делать, но и кликер-длл. Чтобы кликер длл сообщал имя процесса, а длл кликеру его статус.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 10:53:41 PM
Code: [Select]
@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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:53:56 PM
Ага... имя может меняться... А как кликерман узнает перемену?

 Вообще, в длл можно и текст передать, если сильно захотеть. В v4.14 такая возможность есть, хотя такой вариант смахивает на костыль  ;D . Там есть CODE(символ). Создаем массив каждого символа имени процесса, и передаем в длл. А там снова собираем в строку.
Я так пока не пробовал, но должно получиться  :D
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 10:55:22 PM
Можно как-то намутить длл-ку, которую кликер запускал бы и передавал бы ей имя процесса, а длл-ка проверяла бы статус процесса, передавала бы его кликеру назад и закрывалась бы? У меня уже башка не варит...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 10:57:49 PM
Можно как-то намутить длл-ку, которую кликер запускал бы и передавал бы ей имя процесса, а длл-ка проверяла бы статус процесса, передавала бы его кликеру назад и закрывалась бы? У меня уже башка не варит...

Именно так. Все верно. Можно попробовать.  :)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 10:58:03 PM
Можно в батнике перезаписывать строку с новым именем
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:01:34 PM
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 11:01:36 PM
Можно в батнике перезаписывать строку с новым именем

Но упор весь в передаче параметра кликерману, а это в тваем случае - ини . Выше мы говорили о возможных косяках с ними.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 11:03:44 PM
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
Code: [Select]
@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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:10:27 PM
Можно в батнике перезаписывать строку с новым именем
http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881 (http://crapware.aidf.org/forum/index.php?topic=4520.msg30881#msg30881)
Code: [Select]
@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)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:12:53 PM
Космич, пойми уже наконец )) Если каждую секунду на экране будет мелькать окно командной строки, то это ну совсем не вариант...))
К тому же опять же передача инфы через ини или какой-то другой файл...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 01, 2019, 11:14:21 PM
но ведь её можно скрыть  :D
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:19:17 PM
У меня, например, есть длл-ка, для проверки активности нужного окна и в кликере это выглядит так:
Code: (clickermann) [Select]
CALL("handle_active_window.dll")
IF($hwnd_okna_igri ! $_return1)
   //============================================= Клиент игры не активен
else
   //============================================= Клиент игры активен
END_IF
Все работает очень быстро и надежно...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 11:27:46 PM
вот так будет выглядеть передача строки в длл:
Code: (clickermann) [Select]
$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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:30:29 PM
вот так будет выглядеть передача строки в длл:
Code: (clickermann) [Select]
$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
Ты можешь намутить эту длл-ку? Ато я сейчас колупаться буду до утра...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:34:23 PM
Я чего-то обнаглел сегодня... ::) Я просто с 5-ти утра с этими скриптами вожусь - голова уже не варит...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 01, 2019, 11:38:48 PM
вот так будет выглядеть передача строки в длл:
Code: (clickermann) [Select]
$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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 01, 2019, 11:44:31 PM
Максимум на что есть вдохновение, это попробовать принять эти параметры и создать из них строку.
Я буду благодарен )) Именно это мне и нужно ))
А с остальным - это придется много искать, читать, вникать.
Если что... - 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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 02, 2019, 01:08:53 AM

 ;D Не, сорри, но я тоже не полон сил сегодня. Максимум на что есть вдохновение, это попробовать принять эти параметры и создать из них строку.

Как и обещал, на что вдохновения хватило. Передаем строку в длл из кликермана, а в длл принимаем и присваиваем переменной process_name:


Код для делфи (длл)
Code: (clickermann) [Select]
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.


Передаем кликерманом массив из кодов символов:
Code: (clickermann) [Select]
$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 уже не прокатывает.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 01:13:13 AM
А что это за окошко...?
(http://imglink.ru/pictures/02-03-19/74d7ba3948547a0d8635462fc0d288ef.jpg)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 02, 2019, 01:14:47 AM
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так, для уверенности,  что все получилось правильно :D

Во вложении архив с длл.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 01:19:22 AM
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так для уверенности  что все получилось правильно :D

Во вложении архив с длл.
Ну, спасибо большое! )))) В остальном думаю, что разберусь тут )) - http://www.cyberforum.ru/delphi-beginners/thread628578.html (http://www.cyberforum.ru/delphi-beginners/thread628578.html)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 01:21:00 AM
Это ж ShowMessage(process_name); . Это длл нам показала что записано в переменной process_name . Так, для уверенности,  что все получилось правильно :D

Во вложении архив с длл.
Точно... Я что-то "ShowMessage(process_name);" упустил из вида...)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 01:56:37 PM
Если кому понадобится...

Код в кликере:
Code: (clickermann) [Select]
// Подпрограмма - прописываем ее один раз в начале скрипта
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):
Code: (clickermann) [Select]
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)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Космич on March 02, 2019, 02:22:11 PM
можно еще один костыль приписать пока 4.14 в релиз не вышла)

Code: (clickermann) [Select]
$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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 02, 2019, 03:50:49 PM
Если кому понадобится...

Код в кликере:
Code: (clickermann) [Select]
// Подпрограмма - прописываем ее один раз в начале скрипта
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, должна была вылезти ошибка не существующего элемента(ов). Если ошибки нету, то и создавать массив нет надобности. Можно обойтись вот таким вариантом:
Code: (clickermann) [Select]
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) тоже будет тратить драгоценные силы и время, убираем, лишнее.

Так и как? Получилось что требовалось? Самому тестить не охота.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 05:01:57 PM
При строке - 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])

Я тоже так хотел, но... :(
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 02, 2019, 05:30:06 PM
При строке - 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.

Правильно будет не использовать этот параметр длины, а вписать его статичным числом, и такое же число параметров прописать в вызов длл.
А еще лучше, выполнить создание массива один раз при старте скрипта, и больше не повторять.
Вот так:

Code: (clickermann) [Select]
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


Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 02, 2019, 06:57:15 PM
Создавался же массив в 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])... И так далее...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 04, 2019, 10:49:38 AM
dramster! Родной! Выручай! У меня появилась охренительная идея, чтобы кликер не конфликтовал с другими прогами, при работе с ини-файлами! Мы можем намутить передачу в длл НЕСКОЛЬКИХ строковых параметров?
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: ya12 on March 04, 2019, 11:51:19 AM
Передаешь строки по символьно кодами. Разделяешь их не используемыми кодами или серией кодов. В dll собираешь строки обратно.

Пример: 1 2 3 4 5 6 -1 7 8 9 1 -1 -2 и тд,  где -1 конец строки, а -2 конец данных.

Напоминаю что если планируешь получать ответ из dll, без багов будет работать только в 1 потоке из-за того что переменные возврата глобальные.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 04, 2019, 02:10:06 PM
Передаешь строки по символьно кодами. Разделяешь их не используемыми кодами или серией кодов. В dll собираешь строки обратно.

Пример: 1 2 3 4 5 6 -1 7 8 9 1 -1 -2 и тд,  где -1 конец строки, а -2 конец данных.

Напоминаю что если планируешь получать ответ из dll, без багов будет работать только в 1 потоке из-за того что переменные возврата глобальные.
Мне пример надо... Я так нифига не понял...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 04, 2019, 02:47:52 PM
Аааа... Передать несколько строк в одной строке, но между каждым "словом" впихнуть символ-метку, по которой длл разобьет уже одну строку на подстроки. Все - понял!
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 04, 2019, 10:09:56 PM
Все - понял!
Вот и отлично, только отрицательные числа длл вроде не принимает. Добавлено: или нет? Непомню, потестишь сам, разделителем можно сделать любое число за пределами asci, или юникода (если там в юникоде передает и русские символы), к примеру 99999 вполне подойдет

Лучше добавить еще один параметр в начале со значением количества строк.переменных, далее параметры с длиной строк, далее сами символы (коды). Я думаю так будет правильней. Помочь с кодом пока нет возможностей  :(.

Хотя с разделителем  - тоже вариант, тогда и параметр с длиной строки не придется отсылать.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: ya12 on March 05, 2019, 09:47:34 AM
В пределах integer берет (от -2ккк до +2ккк).
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on March 05, 2019, 10:05:44 AM
В пределах integer берет (от -2ккк до +2ккк).
Не понял
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on March 05, 2019, 12:10:03 PM
В пределах integer берет (от -2ккк до +2ккк).
Не понял


.....
Поскольку CALL("Plugin.DLL", ...) передает в DLL и принимает  числа в диапазоне от  -2 147 483 648 до 2 147 483 647,  .....

Такчто то, что я написал выше про отрицательные числа не правда.

Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: ya12 on March 05, 2019, 12:36:14 PM
1к - 1 тысяча (косарь)
1кк - 1 миллион (лям, лимон)
1ккк - 1 миллиард (арбуз)
Жаргон использующийся в компьютерных играх (и в жизни)
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on September 22, 2019, 04:45:46 PM
wmic process get name >file.txt
Это что такое...?
Командная строка. Сохраняет в файл.
Code: (clickermann) [Select]
EXECUTE("cmd.exe", "/C wmic process get name >D:\Processes.txt")

Кликер не работает с файлом Processes.txt, который получается. В частности не работают - STRREADLN, TFCOUNT и TFREADARR.  Что можно сделать?
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on September 22, 2019, 11:29:41 PM
Code: (clickermann) [Select]
// Версия км 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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on September 23, 2019, 12:07:37 AM
Code: (clickermann) [Select]
// Версия км 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

Ппц уже файлов в проекте... И тут, чтоб получит запущенные процессы, еще два текстовых файла...
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on September 23, 2019, 12:13:19 AM
Необязательно хранить инфу в файле, оставляй в переменной   :).

Я тут подумал, может всегото стоило поменять маркер BOM. И все и так заработало бы, ато я заморочился этими байтами... и скорее всего зря  :o. Завтра проверю, или знатоки подскажут.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on September 23, 2019, 10:49:03 AM
или знатоки подскажут
Видимо не подскажут...) Я в этих "БОМах" вообще ничего не понимаю...))
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on September 23, 2019, 08:55:17 PM
 Проверил, не прокатило. Но немного просмотрев расположение байт в этой UCS-2 кодировке, состряпал скрипт, который убирает bom и нулевые байты. При этом получаем обычную строку ansi. Но если эту строку записать в файл, то на выходе получим уже utf-8 c bom.
 Принципиально скрипт не поменялся, просто так нагляднее. (по крайней мере для мена  :D)
Code: (clickermann) [Select]
// Версия км 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
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on October 01, 2019, 05:56:56 PM
А есть способ - получить список запущенных окон, а не процессов?
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: ya12 on October 01, 2019, 08:39:45 PM
Посмотри тут.

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1167
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: dramster on October 01, 2019, 10:14:21 PM
А есть способ - получить список запущенных окон, а не процессов?

Можно попробовать вот так. Конечно, много лишних движений, может есть вариант попроще, но все же он работает:
Code: (clickermann) [Select]
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


В логе:
Code: (текст) [Select]
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 Калькулятор
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on October 03, 2019, 12:36:50 PM
В общем получение запущенных процессов намутил через dll и весь процесс занимает где-то от 10 до 25 мс и без танцев со всякими BOM-ами...
Думаю, что то же самое можно намутить с окнами.
Title: Re: Можно как-то получить список запущенных процессов в диспетчере задачь?
Post by: Hito on October 03, 2019, 06:18:46 PM
Забыл сказать... dramster, спасибо! Всегда откликаешься...