Zasymulowanie kliknięcia myszką w okno innego programu

dział ogólny

Zasymulowanie kliknięcia myszką w okno innego programu

Nowy postprzez Darek_C++ » wtorek, 14 grudnia 2010, 22:16

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
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Cyfrowy Baron » środa, 15 grudnia 2010, 11:37

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
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » środa, 15 grudnia 2010, 16:40

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.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Darek_C++ » środa, 15 grudnia 2010, 22:32

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
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Cyfrowy Baron » czwartek, 16 grudnia 2010, 13:01

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);
}

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
Darek_C++
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

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

Nowy postprzez Darek_C++ » czwartek, 16 grudnia 2010, 16:59

Faktycznie działa 8-)
Avatar użytkownika
Darek_C++
Elektrowied
Elektrowied
 
Posty: 454
Dołączył(a): piątek, 25 lipca 2008, 14:33
Podziękował : 66
Otrzymał podziękowań: 4
System operacyjny: Windows XP Pro SP2
Kompilator: Turbo Explorer C++
Gadu Gadu: 0
    Windows XPFirefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron