@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
String numero = total.getText().toString();
int dec = numero.indexOf(".");
int longitud = numero.length();
if (dec+3 == longitud && dec != -1) { //3 number decimal + 1
log.i("ento","si");
numero = numero.substring(0,dec+3);
if (contador == 0) {
contador = 1;
total.setText(numero);
total.setSelection(numero.length());
} else {
contador = 0;
}
}
}
Когда вы вызываете CreateProcess (), System () и т. Д., Убедитесь, что вы заключили двойные кавычки в строки имени вашего файла (включая имя файла командной программы) на случай, если в именах файлов и / или в полном пути указан пробел в противном случае части пути к имени файла будут интерпретироваться интерпретатором команд как отдельные аргументы.
system("\"d:some path\\program.exe\" \"d:\\other path\\file name.ext\"");
Для Windows рекомендуется использовать CreateProcess (). Он имеет более сложную настройку, но у вас больше контроля над тем, как запускаются процессы (как описано Грегом Хьюгиллом). Для быстрого и грязного вы также можете использовать WinExec (). (system () переносима в UNIX).
При запуске командных файлов может потребоваться запуск с помощью cmd.exe (или command.com).
WinExec("cmd \"d:some path\\program.bat\" \"d:\\other path\\file name.ext\"",SW_SHOW_MINIMIZED);
(или SW_SHOW_NORMAL
, если вы хотите, чтобы окно команд отображалось).
Windows должна найти command.com или cmd.exe в системной переменной PATH, поэтому не нужно указывать полное имя, но если вы хотите быть уверенным, вы можете составить полное имя файла, используя CSIDL_SYSTEM
(не используйте просто C: \ Windows \ system32 \ cmd.exe).
Пример C++:
char temp[512];
sprintf(temp, "command -%s -%s", parameter1, parameter2);
system((char *)temp);
пример C#:
private static void RunCommandExample()
{
// Don't forget using System.Diagnostics
Process myProcess = new Process();
try
{
myProcess.StartInfo.FileName = "executabletorun.exe";
//Do not receive an event when the process exits.
myProcess.EnableRaisingEvents = false;
// Parameters
myProcess.StartInfo.Arguments = "/user testuser /otherparam ok";
// Modify the following to hide / show the window
myProcess.StartInfo.CreateNoWindow = false;
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Maximized;
myProcess.Start();
}
catch (Exception e)
{
// Handle error here
}
}
Я думаю, что вы ищете функцию CreateProcess в Windows API. Есть на самом деле семья связанных звонков, но это поможет вам начать. Это довольно легко.
Один из самых простых способов сделать это должно использовать system()
функция библиотеки времени выполнения. Это берет единственную строку в качестве параметра (много меньше параметров, чем CreateProcess
!) и выполняет его, как будто это было введено на командной строке. system()
также автоматически ожидает процесса для окончания, прежде чем он возвратится.
существуют также ограничения:
, библиотека времени выполнения также обеспечивает семейство exec*
функции (execl
, execlp
, execle
, execv
, execvp
, более или менее), которые получены из наследия Unix и предлагают больше управления процессом.
На самом низком уровне, на Win32 все процессы запускаются эти CreateProcess
функция, которая дает Вам наибольшую гибкость.
простой пример c ++ (найден после поиска на нескольких сайтах)
#include <bits/stdc++.h>
#include <cassert>
#include <exception>
#include <iostream>
int main (const int argc, const char **argv) {
try {
assert (argc == 2);
const std::string filename = (const std::string) argv [1];
const std::string begin = "g++-7 " + filename;
const std::string end = " -Wall -Werror -Wfatal-errors -O3 -std=c++14 -o a.elf -L/usr/lib/x86_64-linux-gnu";
const std::string command = begin + end;
std::cout << "Compiling file using " << command << '\n';
assert (std::system ((const char *) command.c_str ()) == 0);
std::cout << "Running file a.elf" << '\n';
assert (std::system ((const char *) "./a.elf") == 0);
return 0; }
catch (std::exception const& e) { std::cerr << e.what () << '\n'; std::terminate (); }
catch (...) { std::cerr << "Found an unknown exception." << '\n'; std::terminate (); } }