Уважаемый друзья, подскажите пожалуйста, есть ли возможность отправлять как то через кибор команды для "Командной строки" извиняюсь за тавтологию, очень нужно, это поможет многим кто пишет ботов по эмуляторы андроид делать ботов скрытими, как это работает?
Есть такая чтука как ADB работает оно через командную строку, скачал архив, извлек три файла, через командную строку windows "win+r" - > cmd открываем скаченный файлик, и нам запускаем эмулятор затем в коммандной строке пишем adb devices , если все хорошо то покапжет список подключенных устройств, дальше все просто, нам открывается практический полный контроль над андроидом, от установки и удалением программ, создание скриншотов (даже если эмулятор СВЕРНУТ), что дает нам 100% работу бота в фоне, если не ошибаюсь даже можо делать тапы(нажатия) по экрану програмно, проще говоря вещь полезная, у меня полукчилось запустить поделать скриншоты, но через командную строку windows, вот я и хотел узнать можно как то это дело подружить с кибор, или как то подавать команды чтоб пользователь не видел командную строку, Спасибо.
Вот ссылка откуда обучался этому делу.
http://xakep.ru/2016/05/12/android-adb/#toc01.
1. ivantu - 04 Июня, 2019 - 06:12:40 - перейти к сообщению
2. Kibor - 04 Июня, 2019 - 06:21:09 - перейти к сообщению
ivantu пишет:
или как то подавать команды чтоб пользователь не видел командную строку
Не знаю такого способа.
Командную строку вызвать не проблема
start("%SystemRoot%\System32\cmd.exe");
Или батник записать кибором и запустить.
Как ее скрыть не знаю. Вернее можно по всякому, но мелькать будет по любому.
3. Zireael - 04 Июня, 2019 - 06:47:08 - перейти к сообщению
CODE:
#define SW_HIDE 0
#define SW_SHOW 5
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
win cmd=window (-1, "ConsoleWindowClass", -1); // окно cmd
if(cmd)
{
ShowWindow(formatwi(cmd), SW_HIDE); // скрыть окно cmd
// дальше любые команды
command("HELP"); // показать список команд
command("start %SystemRoot%\System32\calc.exe"); // открыть калькулятор
sleep(2000);
ShowWindow(formatwi(cmd), SW_SHOW); // показать окно cmd если надо
}
else messagebox("Окно не найдено");
function command(string s)
{
sendkey(s, cmd);
sendkey(RETURN, cmd);
sleep(200);
}
#define SW_SHOW 5
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
win cmd=window (-1, "ConsoleWindowClass", -1); // окно cmd
if(cmd)
{
ShowWindow(formatwi(cmd), SW_HIDE); // скрыть окно cmd
// дальше любые команды
command("HELP"); // показать список команд
command("start %SystemRoot%\System32\calc.exe"); // открыть калькулятор
sleep(2000);
ShowWindow(formatwi(cmd), SW_SHOW); // показать окно cmd если надо
}
else messagebox("Окно не найдено");
function command(string s)
{
sendkey(s, cmd);
sendkey(RETURN, cmd);
sleep(200);
}
4. Kibor - 04 Июня, 2019 - 06:56:17 - перейти к сообщению
CODE:
win cmd;
if (window (-1, "ConsoleWindowClass", -1)!=0)
{
sendmessage(WM_CLOSE, 0, 0, window (-1, "ConsoleWindowClass", -1));
}
start("%SystemRoot%\System32\cmd.exe");
while(window (-1, "ConsoleWindowClass", -1)==0)sleep(1);
cmd=window (-1, "ConsoleWindowClass", -1); // окно cmd
transparency (0, cmd);
// дальше любые команды
//command("HELP"); // показать список команд
command("start %SystemRoot%\System32\calc.exe"); // открыть калькулятор
sendmessage(WM_CLOSE, 0, 0, cmd);
function command(string s)
{
sendkey(s, cmd);
sendkey(RETURN, cmd);
sleep(200);
}
if (window (-1, "ConsoleWindowClass", -1)!=0)
{
sendmessage(WM_CLOSE, 0, 0, window (-1, "ConsoleWindowClass", -1));
}
start("%SystemRoot%\System32\cmd.exe");
while(window (-1, "ConsoleWindowClass", -1)==0)sleep(1);
cmd=window (-1, "ConsoleWindowClass", -1); // окно cmd
transparency (0, cmd);
// дальше любые команды
//command("HELP"); // показать список команд
command("start %SystemRoot%\System32\calc.exe"); // открыть калькулятор
sendmessage(WM_CLOSE, 0, 0, cmd);
function command(string s)
{
sendkey(s, cmd);
sendkey(RETURN, cmd);
sleep(200);
}
5. ivantu - 04 Июня, 2019 - 08:05:08 - перейти к сообщению
Вот такое еще решение, работает, я проверил:
Создать блокнот с содержимым:
сохраните с расширением .vbs и запустить.
Мне вот интересно, а как то можно из cmd отправить в кибор какую то информацию, или результат выполнения какой то команды?
Создать блокнот с содержимым:
CODE:
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "ваш файл", 0, false
WshShell.Run "ваш файл", 0, false
сохраните с расширением .vbs и запустить.
Мне вот интересно, а как то можно из cmd отправить в кибор какую то информацию, или результат выполнения какой то команды?
6. ivantu - 04 Июня, 2019 - 16:59:00 - перейти к сообщению
Друзья, а можно как то чтоб побыстрее вводились команды, пробовал через
sendtext("");
у меня заголовок CMD меняется... а строка не хочет вводиться.
sendtext("");
у меня заголовок CMD меняется... а строка не хочет вводиться.
7. Zireael - 04 Июня, 2019 - 17:31:28 - перейти к сообщению
Цитата:
а можно как то чтоб побыстрее вводились команды
В настройках уменьшить паузу в нажатии и отпускании кнопок.
Цитата:
как то можно из cmd отправить в кибор какую то информацию, или результат выполнения какой то команды?
Разве что через буфер обмена или через txt файл.
8. ivantu - 05 Июня, 2019 - 00:39:57 - перейти к сообщению
У меня еще вопрос, этот метод ввода чувствителен к расскладке, если в данный момент раскладка русская в командную строку вводятся русские символы, есть какое то решение?
(Добавление)
еще нашел на просторах интернета, что можно команду вот так отправить, но это С++
Вот еще одна реализация:
Помогите как то грамотно отправлять команды, полезная же штука то.
(Добавление)
Еще одна на С#, помогите как то адаптировать под Кибор.
Для начало потребуется подключить пространство имён
C#:
Код для выполнения:
C#:
В результате Вы увидите всё то же самое, что и на последней картинке выше.
Класс ProcessStartInfo имеет перегруженный конструктор, в который сразу же можно передать имя запускаемого приложения и аргументы.
C#:
Для запуска приложений может потребоваться указание полного пути к файлу запуска, например: запуск браузера opera.
C#:
(Добавление)
еще нашел на просторах интернета, что можно команду вот так отправить, но это С++
CODE:
C++
system( "cls" );
C++
system( "cls" );
Вот еще одна реализация:
Цитата:
Вот реализация функции DosExec, которая позволяет (молча) выполнять любую команду DOS и извлекать сгенерированный вывод в виде строки в Юникоде.
CODE:
// Convert an OEM string (8-bit) to a UTF-16 string (16-bit)
#define OEMtoUNICODE(str) CHARtoWCHAR(str, CP_OEMCP)
/* Convert a single/multi-byte string to a UTF-16 string (16-bit). We take advantage of the MultiByteToWideChar function that allows to specify the charset of the input string.
*/
LPWSTR CHARtoWCHAR(LPSTR str, UINT codePage) { size_t len = strlen(str) + 1; int size_needed = MultiByteToWideChar(codePage, 0, str, len, NULL, 0); LPWSTR wstr = (LPWSTR) LocalAlloc(LPTR, sizeof(WCHAR) * size_needed); MultiByteToWideChar(codePage, 0, str, len, wstr, size_needed); return wstr;
}
/* Execute a DOS command. If the function succeeds, the return value is a non-NULL pointer to the output of the invoked command. Command will produce a 8-bit characters stream using OEM code-page. As charset depends on OS config (ex: CP437 [OEM-US/latin-US], CP850 [OEM 850/latin-1]), before being returned, output is converted to a wide-char string with function OEMtoUNICODE. Resulting buffer is allocated with LocalAlloc. It is the caller responsibility to free the memory used by the argument list when it is no longer needed. To free the memory, use a single call to LocalFree function.
*/
LPWSTR DosExec(LPWSTR command){ // Allocate 1Mo to store the output (final buffer will be sized to actual output) // If output exceeds that size, it will be truncated const SIZE_T RESULT_SIZE = sizeof(char)*1024*1024; char* output = (char*) LocalAlloc(LPTR, RESULT_SIZE); HANDLE readPipe, writePipe; SECURITY_ATTRIBUTES security; STARTUPINFOA start; PROCESS_INFORMATION processInfo; security.nLength = sizeof(SECURITY_ATTRIBUTES); security.bInheritHandle = true; security.lpSecurityDescriptor = NULL; if ( CreatePipe( &readPipe, // address of variable for read handle &writePipe, // address of variable for write handle &security, // pointer to security attributes 0 // number of bytes reserved for pipe ) ){ GetStartupInfoA(&start); start.hStdOutput = writePipe; start.hStdError = writePipe; start.hStdInput = readPipe; start.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow = SW_HIDE;
// We have to start the DOS app the same way cmd.exe does (using the current Win32 ANSI code-page).
// So, we use the "ANSI" version of createProcess, to be able to pass a LPSTR (single/multi-byte character string)
// instead of a LPWSTR (wide-character string) and we use the UNICODEtoANSI function to convert the given command if (CreateProcessA(NULL, // pointer to name of executable module UNICODEtoANSI(command), // pointer to command line string &security, // pointer to process security attributes &security, // pointer to thread security attributes TRUE, // handle inheritance flag NORMAL_PRIORITY_CLASS, // creation flags NULL, // pointer to new environment block NULL, // pointer to current directory name &start, // pointer to STARTUPINFO &processInfo // pointer to PROCESS_INFORMATION )){ // wait for the child process to start for(UINT state = WAIT_TIMEOUT; state == WAIT_TIMEOUT; state = WaitForSingleObject(processInfo.hProcess, 100) ); DWORD bytesRead = 0, count = 0; const int BUFF_SIZE = 1024; char* buffer = (char*) malloc(sizeof(char)*BUFF_SIZE+1); strcpy(output, ""); do { DWORD dwAvail = 0; if (!PeekNamedPipe(readPipe, NULL, 0, NULL, &dwAvail, NULL)) { // error, the child process might have ended break; } if (!dwAvail) { // no data available in the pipe break; } ReadFile(readPipe, buffer, BUFF_SIZE, &bytesRead, NULL); buffer[bytesRead] = '\0'; if((count+bytesRead) > RESULT_SIZE) break; strcat(output, buffer); count += bytesRead; } while (bytesRead >= BUFF_SIZE); free(buffer); } } CloseHandle(processInfo.hThread); CloseHandle(processInfo.hProcess); CloseHandle(writePipe); CloseHandle(readPipe); // convert result buffer to a wide-character string LPWSTR result = OEMtoUNICODE(output); LocalFree(output); return result;
}
#define OEMtoUNICODE(str) CHARtoWCHAR(str, CP_OEMCP)
/* Convert a single/multi-byte string to a UTF-16 string (16-bit). We take advantage of the MultiByteToWideChar function that allows to specify the charset of the input string.
*/
LPWSTR CHARtoWCHAR(LPSTR str, UINT codePage) { size_t len = strlen(str) + 1; int size_needed = MultiByteToWideChar(codePage, 0, str, len, NULL, 0); LPWSTR wstr = (LPWSTR) LocalAlloc(LPTR, sizeof(WCHAR) * size_needed); MultiByteToWideChar(codePage, 0, str, len, wstr, size_needed); return wstr;
}
/* Execute a DOS command. If the function succeeds, the return value is a non-NULL pointer to the output of the invoked command. Command will produce a 8-bit characters stream using OEM code-page. As charset depends on OS config (ex: CP437 [OEM-US/latin-US], CP850 [OEM 850/latin-1]), before being returned, output is converted to a wide-char string with function OEMtoUNICODE. Resulting buffer is allocated with LocalAlloc. It is the caller responsibility to free the memory used by the argument list when it is no longer needed. To free the memory, use a single call to LocalFree function.
*/
LPWSTR DosExec(LPWSTR command){ // Allocate 1Mo to store the output (final buffer will be sized to actual output) // If output exceeds that size, it will be truncated const SIZE_T RESULT_SIZE = sizeof(char)*1024*1024; char* output = (char*) LocalAlloc(LPTR, RESULT_SIZE); HANDLE readPipe, writePipe; SECURITY_ATTRIBUTES security; STARTUPINFOA start; PROCESS_INFORMATION processInfo; security.nLength = sizeof(SECURITY_ATTRIBUTES); security.bInheritHandle = true; security.lpSecurityDescriptor = NULL; if ( CreatePipe( &readPipe, // address of variable for read handle &writePipe, // address of variable for write handle &security, // pointer to security attributes 0 // number of bytes reserved for pipe ) ){ GetStartupInfoA(&start); start.hStdOutput = writePipe; start.hStdError = writePipe; start.hStdInput = readPipe; start.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow = SW_HIDE;
// We have to start the DOS app the same way cmd.exe does (using the current Win32 ANSI code-page).
// So, we use the "ANSI" version of createProcess, to be able to pass a LPSTR (single/multi-byte character string)
// instead of a LPWSTR (wide-character string) and we use the UNICODEtoANSI function to convert the given command if (CreateProcessA(NULL, // pointer to name of executable module UNICODEtoANSI(command), // pointer to command line string &security, // pointer to process security attributes &security, // pointer to thread security attributes TRUE, // handle inheritance flag NORMAL_PRIORITY_CLASS, // creation flags NULL, // pointer to new environment block NULL, // pointer to current directory name &start, // pointer to STARTUPINFO &processInfo // pointer to PROCESS_INFORMATION )){ // wait for the child process to start for(UINT state = WAIT_TIMEOUT; state == WAIT_TIMEOUT; state = WaitForSingleObject(processInfo.hProcess, 100) ); DWORD bytesRead = 0, count = 0; const int BUFF_SIZE = 1024; char* buffer = (char*) malloc(sizeof(char)*BUFF_SIZE+1); strcpy(output, ""); do { DWORD dwAvail = 0; if (!PeekNamedPipe(readPipe, NULL, 0, NULL, &dwAvail, NULL)) { // error, the child process might have ended break; } if (!dwAvail) { // no data available in the pipe break; } ReadFile(readPipe, buffer, BUFF_SIZE, &bytesRead, NULL); buffer[bytesRead] = '\0'; if((count+bytesRead) > RESULT_SIZE) break; strcat(output, buffer); count += bytesRead; } while (bytesRead >= BUFF_SIZE); free(buffer); } } CloseHandle(processInfo.hThread); CloseHandle(processInfo.hProcess); CloseHandle(writePipe); CloseHandle(readPipe); // convert result buffer to a wide-character string LPWSTR result = OEMtoUNICODE(output); LocalFree(output); return result;
}
Помогите как то грамотно отправлять команды, полезная же штука то.
(Добавление)
Еще одна на С#, помогите как то адаптировать под Кибор.
Для начало потребуется подключить пространство имён
C#:
CODE:
using System.Diagnostics;
Код для выполнения:
C#:
CODE:
ProcessStartInfo psi = new ProcessStartInfo();
//Имя запускаемого приложения
psi.FileName = "cmd";
//команда, которую надо выполнить
psi.Arguments = @"/k ping 127.0.0.1";
// /c - после выполнения команды консоль закроется
// /к - не закрывать консоль после выполнения команды
Process.Start(psi);
//Имя запускаемого приложения
psi.FileName = "cmd";
//команда, которую надо выполнить
psi.Arguments = @"/k ping 127.0.0.1";
// /c - после выполнения команды консоль закроется
// /к - не закрывать консоль после выполнения команды
Process.Start(psi);
В результате Вы увидите всё то же самое, что и на последней картинке выше.
Класс ProcessStartInfo имеет перегруженный конструктор, в который сразу же можно передать имя запускаемого приложения и аргументы.
C#:
CODE:
ProcessStartInfo psi;
psi = new ProcessStartInfo("cmd", @"/k ping 127.0.0.1");
Process.Start(psi);
psi = new ProcessStartInfo("cmd", @"/k ping 127.0.0.1");
Process.Start(psi);
Для запуска приложений может потребоваться указание полного пути к файлу запуска, например: запуск браузера opera.
C#:
CODE:
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\Program Files\Opera\opera.exe";
Process.Start(psi);
psi.FileName = @"C:\Program Files\Opera\opera.exe";
Process.Start(psi);
9. Zireael - 05 Июня, 2019 - 03:02:28 - перейти к сообщению
Цитата:
если в данный момент раскладка русская в командную строку вводятся русские символы, есть какое то решение?
code (Отобразить)
Цитата:
system( "cls" );
cls очистит консоль.
10. ivantu - 05 Июня, 2019 - 03:23:42 - перейти к сообщению
Спасибо Уважаемый Zireael, последний вариант уже имеет место на существование, только я заметил что иногда, по не понятным причинам строка полностью не успевает дописатьсяв консоль, и происходит перенос строки вводом Enter, что влечет за сабой непредсказуемые последствия, это можно как то отконтролировать?
Код (Отобразить)