Strona 1 z 1

Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: wtorek, 14 grudnia 2010, 22:16
przez Darek_C++
Witam ponownie,
tym razem interesuje mnie kwestia zasymulowania kliknięcia w danym miejscu okna obcego programu dokładnie w okno Tora:
Obrazek
W miejscu użyj nowej tożsamości :)

1) Czy jest to do zrealizowania z poziomu naszego programu ?
2) Czy istnieje możliwość umieszczenia okna tego programu w naszym programie i z tego poziomu "klikanie" niego w wybranym momęcie ?

Pozdrawiam

Re: Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: środa, 15 grudnia 2010, 11:37
przez Cyfrowy Baron
Ten temat był już tyle razy wałkowany na tym forum, że aż się dziwię iż jeszcze o to pytasz. Trzeba pobrać uchwyt do okna programu, a potem wysłać komunikat o kliknięciu myszką.

► patrz serwis: Cyfrowy Baron dział: teoria -> Sterowanie obcym programem z poziomu własnego poprzez wysyłanie komunikatów.



Inny sposób to symulacja kliknięcia klawiszem myszy, ale tutaj okno w którym klikamy musi być na wierzchu. Szerzej zostało to opisane na tym forum:

Symulacja kliknięcia lewym przyciskiem myszy
Symulacja kliknięcia LPM

Re: Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: środa, 15 grudnia 2010, 16:40
przez Cyfrowy Baron
Czy istnieje możliwość umieszczenia okna tego programu w naszym programie i z tego poziomu "klikanie" niego w wybranym momęcie ?


Wcześniej to mi umknęło.

► patrz serwis: Cyfrowy Baron dział: teoria -> Umieszczanie okna obcego programu w programie własnym.

Jednak to nie zmienia faktu, że aby sterować tym oknem trzeba wysyłać do niego komunikaty, gdyż mimo iż w oknie Twojego program, to jednak nie Twoje okno.

Re: Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: środa, 15 grudnia 2010, 22:32
przez Darek_C++
Program napisany jest w QT wiec możne być ciężko z jego "Sterowanie obcym programem z poziomu własnego poprzez wysyłanie komunikatów.".
Narazie spróbuje uruchamiać programy z konsoli:
tor.exe i polipo.exe
które ten program uruchamia co było by lepsze niż jego "oklikiwanie" :)

Pozdrawiam

Re: Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: czwartek, 16 grudnia 2010, 13:01
przez Cyfrowy Baron
Ten kod akurat zadziała z każdym oknem:

KOD cpp:     UKRYJ  
void BringWindowToFront(HWND hWnd)
{
 bool Result;
 DWORD ForegroundWindowThreadID;
 DWORD WindowThreadID;
 if(hWnd != GetForegroundWindow())
 {
  ForegroundWindowThreadID = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
  WindowThreadID = GetWindowThreadProcessId(hWnd, NULL);
  if(ForegroundWindowThreadID != WindowThreadID)
  {
   AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, true);
   SetForegroundWindow(hWnd);
   AttachThreadInput(ForegroundWindowThreadID, WindowThreadID, false);
  }
  else
   SetForegroundWindow(hWnd);
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 HWND hWnd = FindWindow(L"QWidget", L"Panel Kontrolny Vidalii");

 if(hWnd == NULL) ShowMessage("Nie odnaleziono okna!");

 TRect wRect;
 GetWindowRect(hWnd, &wRect);

 BringWindowToFront(hWnd);

 POINT cP;
 GetCursorPos(&cP);

 int dx = wRect.Left + 215;
 int dy = wRect.Top + 245;

 SetCursorPos(dx, dy);

 mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 );
 mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 );

 SetCursorPos(cP.x, cP.y);
 BringWindowToFront(this->Handle);
}

Re: Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postNapisane: czwartek, 16 grudnia 2010, 16:59
przez Darek_C++
Faktycznie działa 8-)