Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Fremde MFC-Anwendung fernsteuern, geht sowas ?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
18.12.2004, 03:14 Uhr
~daSickboy
Gast


Ich habe eine MFC Anwendung und will dort zB. einen Slider bewegen, jedoch von einer anderen Anwendung aus die ich schreiben will. Der Quellcode dieser Anwendung steht mir nicht zur Verfügung.
Kann man irgendwie die ID des Sliders rauskriegen und dann per SendMessage einen Befehl an die Anwendung schicken ? Gibts für sowas Tools? Geht das etwa mit Spy++ ?

Schonmal vielen Dank

daSickboy
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.12.2004, 10:29 Uhr
~mike
Gast


Hi!
Sollte gehen. Da gibts 2 Möglichkeiten:
* Du simulierst alle Maus und Tastenklicks
* Oder du schickst der App Messages alla

C++:
CWnd* pWnd = FindWindow(NULL, "test1");
CString s = "Das ist ei Test";
if(pWnd) {
CEdit* pEdit = (CEdit*)pWnd->GetDlgItem(0x3E8);
pEdit->SendMessage(EM_REPLACESEL, 0, (LPARAM)s.GetBuffer(s.GetLength()));
}


Das setzt z.B. den Text einer Anwendung mit dem Namen "test1".

Habs noch nie getestet mit dem Slider Bar - aber hab im google folgendes gefunden:

C++:
SendMessage(hwndSlider, TBM_SETRANGE,
(WPARAM) TRUE,// redraw flag
(LPARAM) MAKELONG(iMin, iMax));// min. & max. positions

SendMessage(hwndSlider, TBM_SETPOS,
(WPARAM) TRUE,// redraw flag
(LPARAM) iSelMin);


hwndSlider bekommst du, indem du mit GetDlgItem nen Pointer holst und mit GetSafeHWND() das Handle.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.12.2004, 09:21 Uhr
~urs
Gast


Hallo!

Wenn man ein Fremdprogramm "anschubsen" will, damit es für eine bestimmte Zeit etwas erledigt.... geht das? Das Programm welches den Impuls an das Fremdprogramm abgibt, soll in der Zwischenzeit beendet werden können.

Idee?

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.12.2004, 09:32 Uhr
Spacelord
Hoffnungsloser Fall


Da musst du schon etwas konkreter werden was du unter "anschubsen" verstehst.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.12.2004, 14:16 Uhr
~urs
Gast


na ja, das hauptprogramm soll eben das fremdprogramm dazu bewegen (1. zu starten->o.k. per shellexec aus dem hauptprogramm heraus (mit FindWindow() etc. kein Probl., 2. wenn es bereits gestartet ist für z.b. 5 sekunden eine animation ablaufen lassen, 3. das fremdprogramm kann ruhig gestartet bleiben/optional z.b. nach 10min. beendet werden).
Immer dann, wenn das Hauptprogramm ein Signal an das Fremdprogramm "sendet" (z.b. per SendMessage()??? ) soll das Fremdprogr. die animation abspielen.

wenn es so was gibt wie ....pOtherProcessWindow->SetForeground(), gibt es dann auch sowas wie ...pOtherProcessWindow->SetImpulse() und das Fremdprogramm reagiert darauf wie etwa:

OnNotifyTheForeinImpulse()
{
PlayAnimation(5000), //5Sekunden lang anim abspielen
} oder so...??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.12.2004, 15:31 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Das geht schon - aber kannst du den Src des Fremdprogrammes beeinflussen? Wenn du keinen MessageHandler / o.ä. installieren kannst, wird das schwer funktionieren. SendMessage sendet auch Nachrichten - die MFC sieht hier die MessageMaps vor, welche diese Nahcrichten verarbeiten - also deine Frage kann man nicht konkret beantworten. Es hängt ganz vom Fremdprogramm ab. Willst du nur einen Button drücken? Hast du den Src des Fremdprogramms?

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.12.2004, 16:47 Uhr
~urs
Gast


ja den Crs habe ich

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.12.2004, 09:44 Uhr
~urs
Gast


Ist das Editfeld per Zugriffsnummer (z.B. 002C03A4) erreichbar?

In Deinem Bsp. steht CEdit* pEdit = (CEdit*)pWnd->GetDlgItem(0x3E8);

"0x3E8" --> mit Spy++ ermittelt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.12.2004, 10:49 Uhr
mike
Pinguinhüpfer
(Operator)


Hi!
Ja genau, einfach mit der Lupe über das Editfeld fahren. Leider weiß ich nicht mehr, wie das Feld heißt wo das Ergebnis angezeigt wird, aber es stand dann auch 03E8000

mfg
--
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.12.2004, 11:02 Uhr
~urs
Gast


bekomme dann mit

CEdit* pEdit = (CEdit*)pWndPrev->GetDlgItem(002C03A4);

aber die meldung:

Syntaxfehler : 'Ungueltiges Suffix auf Zahl'
Syntaxfehler : Fehlendes ')' vor Bezeichner 'C03A4'
Syntaxfehler : ')'

???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: