Uruchamianie innego programu

0

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.

0
        Runtime r=Runtime.getRuntime();
        String[] cmds={nameOfProgram,parametr};
        try
        {
            r.exec(cmds);
        }
        catch(Exception e)
        {
            System.out.println(e.toString());
        }
0

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

0

nameOfProgram="C:\....word.exe"
parametr="MojPlik.doc"

0

Wielkie dzieki dziala ok :)
Pozdrawiam

0

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...

0

bez kodu przeciez nie znajdziemy w czym problem nie?

0

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...

0

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

0

Od siebie dodam, że w przypadku uruchamiania większych ilości takowych procesów polecam Apache Commons Exec

0
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? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1