[C#] przejmowanie wladzy nad odpalonym oknem (programem)

0

Jest taka sprawa. Odpalam sobie program przez System.Diagnostics.Process.Start("program.exe"); i chce nad nim zawladnąć... tzn konkretniej wybrac 1 z 3 radioboxow (z gory znany) i z comboboxa wybrac konkretne pole.

Jak sie do tego zabrac? Przez hooka na mysz? czy moze lapac za handle procesu (ktory mam zwracany przy odpalaniu) i grzebac bezposrednio w obiektach programu.

Pytanie drugie z podobnej beczki. Odpalam se girke (konkretnie Return to Castle Wolfenstein: Enemy-Territory) i chce ją zminimalizowac z poziomu mojego programu. Wiemw iem istnieją programu które to potrafią (znam 3) ale ja chce wiedzieć jak to robią zeby to szybko działało bo nie jest sztuką zminimalizowac program i dac systemowi przywrócic oryginalną rozdzielczosć (chociaz i tego nie umiem :|) sztuka jest to zrobic szybko... (max 1-3 sekund na P4 2GHz z GF4)

Wszelkie rady mile widziane (nawet na czystym c/c++ chociaz preferowalbym C#)

PS mala ciekawostka... kiedy uzywam Environment.CommandLine to zwraca mi on sciezke do programu z " na początku i końcu stringa... ciekawostka w tym ze odpalony z .NET w trybie debug jak mu obetne " z obu stron przez substring jest ok ten sam program (ta sama kompilacja) na zewnątrz odpalony "recznie" wywala sie bo na koncu dostaje juz po " spację... taka mala ciekawostka z windows... zeby tego uniknac musze uzywac algorytmu wlasnej produkcji bo of corz String.Trim() ani String.TrimEnd() nie dzialaja jak nalezy (a powinny obciac odpowiednio z obu stron albo tylko z konca wszystkie spacje).

Jak ktos wie co ejst nie tak i jak to latwo obejsc prosze o info

w tej chwili radzę sobie tak:

string SciezkaProgramu = Environment.CommandLine;
//czyszczenie sciezki programu ze zbednych smieci :/
int i=0;
int pocz,dlug, dlugSciez;
dlugSciez=SciezkaProgramu.Length;
pocz = 0;
dlug = 0;
while (i < dlugSciez)
{
   if (SciezkaProgramu[i] == '\"' || SciezkaProgramu[i] == ' ') 
      i++;
   else
      {
         pocz	= i;
         i	= dlugSciez;
      }
}
i--;
while (i > 0)
{
   if (SciezkaProgramu[i] == '\"' || SciezkaProgramu[i] == ' ') 
      i--;
   else
      {
         dlug	= i - pocz+1;
         i	= 0;
      }
}
SciezkaProgramu = SciezkaProgramu.Substring(pocz, dlug);
//skopiuj plik
string LokalizacjaRunnera=lokalizacjaET+"\\ETwebRunner.exe";
if (!String.Equals(lokalizacjaET, LokalizacjaRunnera)) 
   System.IO.File.Copy(SciezkaProgramu,lokalizacjaET+"\\ETwebRunner.exe",true);

robie to w petlach aby uniknac ew innych tego typu bugow...

0

ad 1
zdobadz po prostu uchwyt okna rodzica tych buttonow, jak juz bedziesz go mial wystarczy wyslac odpowiedni komunikat systemowy do niego(za pomoca sendmessage albo postmessage, zdaje sie ze powinno to byc WM_COMMAND z odpowiednimi lparam i wparam)
ad 2
tu jest to jeszcze prostsze musisz miec uchwyt glownego okna programu i tak samo wyslac odpowiedni komunikat(zapomnialem jaki to powinien byc ;P ) z tym ze to nie musi dzialac, w takim razie zasymuluj wcisniecie klawiszy alt + tab(WM_KEYDOWN)

0

ehem powiem tyle alt+tab nie dziala w tej grze :P temu powstaly osobne programy do minimalizacji jak nie wierzysz sciagnij se (jest darmo gra) i przekonaj sie sam :>

a co do komunikatow... to moze znasz jakis samouczek na ten temat? bo ja wiem ze mozna tak ale nie wiem jak i co gdzie itd... tzn ostatecznie mozna by rpzez hooka na myszke i klawiaturke ale... jest to klopotliwe i nie o to biega...

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