uruchomienie zewnętrznej aplikacji oraz jej zamknięcie...

0

mam aplikację która wykonuje obliczenia i po skończeniu obliczeń pokazuje się komunikat YES/NO po wybraniu YES aplikacja się zamyka.

Wiem jak uruchomić program natomiast, moje pytanie jest takie, jak wysłać to tej aplikacji żeby autamatycznie nacisnąc przycisk YES

Oto kod jaki posiadam to uruchomienia:

WinExec("program.exe", SW_HIDE);

komunikat YES/NO też powinien byc ukryty i niewidoczny dla użytkownika

dodam jeszcze że piszę w Builderze C++ 2007 pod XP

//trochę ci te posty uporządkowałem - R

0

Do uruchamiania programów najlepiej używać ShellExecute();, ale nie mam pojęcia jak napisać kody, aby automatycznie wybierał przycisk YES, to raczej pod wirus podchodzi, mogę się mylić.

0

robie interferj użytkownika który korzysta z zewnętrzenej aplikacji, musi ją uruchomić, nastepnie ten zewn. program wykonuje obliczenia i jak skończy wyskakuje okienko TAK/NIE , jak naciśniemy TAK aplikacja zewn. się zamyka a jak mogę wtedy pobrać dane z pliku ktory ta aplikacja tworzy, dlatego mpotrzebuję wiedzieć jak automatycznie wybrać TAK. Jak na razie czytałęm coś o uchwytach i komendzie SendMessage która wysyła komenty do aplikacji lub odpowieniego okna. Tylko nie wiem jak zato się zabrać

0

Ostatnio nie miałem czasu, aby odpisać, ale jest jeden sposób.
Funkcja SendMessage() służy do wysyłania polecenia do całego okna, ale jeślij chcesz np. wybrać w okienku przycisk TAK musisz wybrać funkcję SendDlgItemMessage();, ale przedtem musisz mieć uchwyt do konkretnego okna w HWND, jeśli masz to :

SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

Parametry:
okno - uchwyt okna(HWND);
IDYES - info o kontrolce(np. IDNO, IDCANCEL itp)
WM_LBUTTONDOWN - co ma zrobić z kontrolką
reszta po 0
Tutaj muszą być wysłane dwie komendy: WM_LBUTTONDOWN i
WM_LBUTTONUP, aby program wiedział, że przycisk został naciśnięty.

Ale jest jeszcze jeden problem, jeżeli przycisk np. IDYES jest domyślnym przyciskiem, akcję z naciśnięciem przycisku musi zostać wywołana dwa razy:

//dwa razy, aby zadziałało!
SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

Przykład programu:

HWND okno = FindWindow(0,"Notatnik");

SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

//niby krótke kawałki, ale wziąłem w tagi - R

0

tak wygląda kod funkcji w całości:

STARTUPINFO si;
PROCESS_INFORMATION pi;

void __fastcall TFormOkrag::UruchomProgramAnteny(void)
{

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   si.dwFlags = STARTF_USESHOWWINDOW;       // ukrywanie okna głownego


CreateProcess("antena.exe", "antena.exe", NULL, NULL, TRUE,NULL, NULL, NULL, &si, &pi);


  HWND okno = FindWindow(NULL,"antena");  // nazwa okna MessageBoxa to antena

  SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
  SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

  SendDlgItemMessage(okno, IDYES, WM_LBUTTONDOWN,0,0);
  SendDlgItemMessage(okno, IDYES, WM_LBUTTONUP,0,0);

}

Niestety nie zadziałało talej wyskakuje okienko TAK/NIE

tutaj jest filmik jak wyglada ta aplikacja :

http://rapidshare.com/files/107938707/antena.avi

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