CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Probelm z wysyłaniem polecenia

Probelm z wysyłaniem polecenia

dział ogólny

Re: Probelm z wysyłaniem polecenia

Nowy postprzez polymorphism » środa, 25 lipca 2012, 13:39

Nie wychodzi, bo zapewne używasz funkcji, które działają tylko z poziomu aplikacji, która jest właścicielem docelowych okien.

http://stackoverflow.com/questions/2671 ... ow-using-c <--- tu masz sposób ustawienia focusa.
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
sfyrek
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Probelm z wysyłaniem polecenia

Nowy postprzez sfyrek » środa, 25 lipca 2012, 16:52

Witam ponownie i bardzo dziękuje za pomoc :) . Wystarczylo tylko ustawić focus i wysylanie poleceń do programu który chce sterować działa.
Poniżej przesyłam kod jaki użyłem:
KOD cpp:     UKRYJ  
HWND inf;
 inf = FindWindow("WindowsForms10.Window.8.app.0.2bf8098_r13_ad1",NULL);

if( inf == NULL )
{
  ShowMessage( "Nie odnaleziono okna programu!" );
  return;
}

SetActiveWindow(inf);
SwitchToThisWindow(inf, true);
PostMessage(inf,WM_SYSKEYDOWN,VK_F5,0);
 
Avatar użytkownika
sfyrek
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): wtorek, 26 czerwca 2012, 18:14
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Opera

Re: Probelm z wysyłaniem polecenia

Nowy postprzez Cyfrowy Baron » czwartek, 26 lipca 2012, 00:15

polymorphism napisał(a):Generalnie okno/kontrolka, żeby odebrać key-event, musi mieć ustawiony focus. Być może tu tkwi problem.


Tutaj kolega nie korzysta z key-event lecz z funkcji SendMessage i PostMessage, a do tego focus nie jest potrzebny. Jak już wspominałem wcześniej to działa np. z oknem Firefox i z kilkoma innymi programami też, ale z tym konkretnym już nie. Nie spotkałem się jeszcze z tym by SendMessage potrzebował focusa.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Probelm z wysyłaniem polecenia

Nowy postprzez polymorphism » czwartek, 26 lipca 2012, 10:48

Tutaj kolega nie korzysta z key-event lecz z funkcji SendMessage i PostMessage

Heh, ja nie pisałem o funkcji key-event (w samej nazwie jest błąd składniowy), tylko o "zdarzeniu klawiaturowym". Między innymi po to pogrubiam nazwy funkcji, żeby nie było nieporozumień.

Nie spotkałem się jeszcze z tym by SendMessage potrzebował focusa.

SendMessage nie potrzebuje focusa, to oczywiste, ale my tu mówimy o konkretnym przypadku symulacji naciśnięcia klawiszy. A normalnie okno, które odbiera komunikaty klawiaturowe, ma ustawiony focus, czyli najpierw obiera komunikat WM_SETFOCUS, a dopiero później WM_KEYDOWN/WM_KEYUP.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Probelm z wysyłaniem polecenia

Nowy postprzez Cyfrowy Baron » piątek, 27 lipca 2012, 00:13

polymorphism napisał(a):SendMessage nie potrzebuje focusa, to oczywiste, ale my tu mówimy o konkretnym przypadku symulacji naciśnięcia klawiszy.


W przypadku tego programu mamy do czynienia z poleceniem MainMenu, więc gdyby focus był potrzebny to i tak by nie wystarczył, gdyż trzeba by jeszcze dodatkowo aktywować MainMenu. W programach, w których skrót klawiaturowy jest przypisany do MainMenu nie ma potrzeby pobierania focusa. Jak już wspomniałem sprawdza się to doskonale w przypadku np. Firefox'a. Najlepszym rozwiązaniem byłoby wysłać komunikat WM_COMMAND, gdyż nie wymagałoby to symulacji klawisza, a wywoływałoby konkretne polecenie MainMenu. Sam program nie przechowuje jednak w zasobach spisu komend, więc trzeba by się chyba przyjrzeć bibliotekom programu, być może któraś to zawiera.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Probelm z wysyłaniem polecenia

Nowy postprzez polymorphism » piątek, 27 lipca 2012, 10:34

Nie widziałem tego programu, więc nie wiem, czy mowa tu o skrócie klaw., czy po prostu o zwykłej reakcji na zdarzenie naciśnięcia klawisza. Z drugiej strony to rozróżnienie nie ma aż takiego znaczenia, ponieważ nawet skróty klawiaturowe trafiają do okna (aplikacji), które jest w danej chwili aktywne. Zatem przed zdarzeniem klawiaturowym następuje zdarzenie WM_ACTIVATE lub WM_SETFOCUS. Oczywiście focus nie musi mieć znaczenia, co udowadnia przykład z FF, ale też może mieć, co pokazuje przykład programu z tego wątku. Trzeba to po prostu uwzględniać, i tyle.

Sam program nie przechowuje jednak w zasobach spisu komend, więc trzeba by się chyba przyjrzeć bibliotekom programu, być może któraś to zawiera.
Klawisze skrótu możesz sobie w runtime'ie ustawiać, w sposób dynamiczny, zasoby nie są do tego konieczne (szczególnie w aplikacjach, w których możesz sobie ustawiać swoje własne skróty).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Probelm z wysyłaniem polecenia

Nowy postprzez sfyrek » piątek, 27 lipca 2012, 18:54

Chodziło mi o oto by była zwykła rekacja na naiścinięcie klawisza. W tej chwili działa tak jak chciałem a i jeżeli w programie ustawie sobie skróty klawiaturowe do jakiejś funkcji to też to działa. Mam jeszcze problem z wysłaniem kombinacji dwóch klawiszy.
Nie widziałem tego programu, więc nie wiem, czy mowa tu o skrócie klaw., czy po prostu o zwykłej reakcji na zdarzenie naciśnięcia klawisza.

Jeżeli chcesz to umieściłem link to tego programu w tym poście.
Avatar użytkownika
sfyrek
Bladawiec
Bladawiec
 
Posty: 18
Dołączył(a): wtorek, 26 czerwca 2012, 18:14
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Opera

Re: Probelm z wysyłaniem polecenia

Nowy postprzez Cyfrowy Baron » sobota, 28 lipca 2012, 13:20

Ja zrobiłem to w ten sposób, w przeglądarce Firefox, nie w Twoim programie, gdyż już go usunąłem:

KOD cpp:     UKRYJ  
 HWND info;
 info = FindWindow(L"MozillaWindowClass", NULL);

 if( info == NULL )
 {
  ShowMessage( "Nie odnaleziono okna programu!" );
  return;
 }

 keybd_event( VK_CONTROL, 0, 0, 0); /* wciśniecie klawisza Ctrl */
 SendMessage( info, WM_KEYDOWN, 84, 1); // 84 = T
 SendMessage( info, WM_KEYUP, 84, 1);
 keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); /* koniecznie trzeba zwolnić klawisz Ctrl */


U mnie to działa, i podobnie jak poprzednio focus nie musi być ustawiony na Firefox'a. Zwolnienie klawisza jest konieczne, w przeciwnym razie system będzie przekonany, że klawisz Ctrl cały czas jest wciśnięty.
Klawisz Ctrl nie musi być wciśnięty na oknie programu.

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

Poprzednia strona

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 3 gości