Witam
Mam takie pytanie, czy można zrobić program który uruchamia inny i wykonuje w nim kilka prostych zadań.
Przykład program "URUCHAMIACZ" otwiera np plik worda (poprzez worda) i w wordzie robi kilka czyności (odpowiadajace np kilku kliknieciom myszki np przy zmianie koloru czcionki itp), czy coś takiego jest w ogóle możliwe(otwarcie programu , kilka prostych czynności i zamknięcie programu )
Czy program może symulować pracę użytkownika w innym programie, a jeśli tak to w jaki sposób.
Runtime r=Runtime.getRuntime();
String[] cmds={nameOfProgram,parametr};
try
{
r.exec(cmds);
}
catch(Exception e)
{
System.out.println(e.toString());
}
Dzieki za odpowiedz ale mam dalsze pytanie :)
Biorąc analogie do tego worda to nameOfProgram - powinno określac np "przykladowy_tekst.doc" ?
i jaka powinna być wartość parametru?
Pozdrawiam
nameOfProgram="C:\....word.exe"
parametr="MojPlik.doc"
Wielkie dzieki dziala ok :)
Pozdrawiam
wiem, że odświeżam wątek po kilku latach, ale:
mam problem z uruchomieniem kilku programów, tzn. chciałbym np. co kilka sekund w pętli uruchamiać inny program (aby na końcu wszystkie były włączone) leczy gdy próbuję to uruchamia się tylko pierwszy z listy...
bez kodu przeciez nie znajdziemy w czym problem nie?
więc mam coś w rodzaju:
List<Program> lista = new ArrayList<Program>();
lista.add(new Program("sciezka1"));
lista.add(new Program("sciezka2"));
int time = 5000;
for(int i=0; i<lista.size(); i++) {
Program program = lista.get(i);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(time);
Runtime r = Runtime.getRuntime();
String[] cmds = {program.getSciezka(), ""};//bez parametru
try {
r.exec(cmds);
} catch(Exception e) {
System.out.println(e.toString());
}
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}).start();
}
domyślam się że problem leży w wywołaniu Runtime...
ok, sam sobie odpowiem - być może komuś się jeszcze przyda
ponad 1000 wyświetleń także myślę że warto :)
pierwsza rzecz
Runtime r = Runtime.getRuntime();
następnie przykładowa metoda do uruchamiania (można ją wywoływać tyle razy ile programów chcemy uruchomić)
- parametr $time jest opcjonalny (ustawia opóźnienie uruchomienia programu po ostatnim uruchomionym)
- parametr cmds jak widać zawiera tablicę typu String (potrzebne są dwie rzeczy: ścieżka do programu który chcemy uruchomić oraz parametr z jakim chcemy uruchomić ten program - jeżeli ma być uruchomiony bez parametru zostawiamy "")
private void newRun(final String[] cmds, final int $time) {
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep($time);
try {
Process process = r.exec(cmds);
process.waitFor();
} catch(Exception e) {
System.out.println(e.toString());
}//zagnieżdżony blok try-catch - można zrobić w jednym jak kto woli
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
}).start();
}
to tylko moja propozycja, nie wiem czy jest to profesjonalny sposób - niemniej jednak działa bardzo dobrze
pozdrawiam
Od siebie dodam, że w przypadku uruchamiania większych ilości takowych procesów polecam Apache Commons Exec
wartek01 napisał(a):
Od siebie dodam, że w przypadku uruchamiania większych ilości takowych procesów polecam Apache Commons Exec
a mógłbyś napisać coś więcej na ten temat? :)