Sind folgende Funktionen mit C++ realisierbar?
-
Hallo!
Ich möchte in Visual C++ vom Visual Studio 6 ein Programm schreiben, und mich vorher vergewissern, ob die Programmiersprache alles das kann:
- Ich möchte an eine andere, zeitgleich laufenden Applikation Tasten bzw. den STRG+V Shortcut schicken.
In VB mach ich das mit AppActivate(....) und dann mit dem Befehl SendKeysIn C gibt es zwar eine Funktion FindWindow, aber hier muss ich genau den Programmtitel des anderen Programms eingeben. Der ist aber nicht immer gleich. Bp: in VB konnte ich auch teilqualifiziert AppActivate("Unbenannt -") aufrufen. Jetzt in C muss ich immer FindWindow(NULL, "Unbenannt - Editor"); schreiben. Kann ich das in C nicht auch irgendwie teilqualifiziert aufrufen, so wie in VB? Außerdem brauch ich dann noch eine Fenster Aktivierungsfunktion. SetFocus haut nicht hin. Und natürlich eine Tasten Sendefunktion. Das könnte dann vielleicht keybd_event werden.
- Dann brauche ein Control das wie eine Liste arbeitet. In VB heißt das MSFlexGrid
http://www.microsoft.com/msj/0999/Visualprog/visualprogfig02.gif
Ich muss es per befüllen und leeren können, es muss mehrzeilige Texte speichern können und die einzelnen Zellen müssen per Mausklick identifiziert werden können.- Ich muss das Programm, wenn es minimiert im Systray läuft, mit einer systemweiten Sondertaste (zb: ^) ansprechen können.
In VB habe ich einen Timer erzeugt der alle 20 Millisekunden abläuft, und dort auf GetAsyncKey(220) reagiert (220 ist der Code für ^). Ich denk mal das wird ich C auch ähnlich gehen.Können die oben genannten Sachen in C++ realisiert werden?
-
Keine Sorge, in C++ lässt sich selbstverständlich alles realisieren, was du zuvor in VB gebastelt hast, wenn auch manchmal auf andere Art und Weise.
Tipp: Statt FindWindow probier mal EnumWindows aus.
-
Danke! Dieses EnumWindows hat funktioniert
EnumWindows((WNDENUMPROC)ShowAllWindows, 0);
BOOL CALLBACK ShowAllWindows(HWND hWnd, LPARAM lParam)
{
TCHAR lpWindowName[255];
GetWindowText(hWnd, (LPTSTR)lpWindowName, 255);
if(strncmp(lpWindowName, "Unbenannt -",11)==0)
MessageBox(0,lpWindowName,"GEFUNDEN",MB_OK);
return TRUE;
}Bleibt nur mehr die Sache mit dem Fensteraktivieren und Tasten schicken. Hat da jemand eine Idee?
-
SetFocus und dazu evtl SetForegroundWindow müsste funktionieren, wobei SetFocus reicht damit das Fenster die Tastatur-Nachricht bekommt. keybd_event müsste auch funktionieren. Wo hapert's denn, Fehlercode oder passiert einfach nichts?
-
Jawoll!
Jetzt mit SetForegroundWindow hats funktioniert. Bei nur SetFocus alleine hat er das Fenster einfach nicht aktiv gemacht und mein keybd_event ging ins Nirvana.
Langsam schließt sich ja das Puzzle
Mein Problem ist jetzt noch das FlexGrid Control
In einem MFC Projekt konnt ich es ganz normal zu den Steuerelementen hinzufügen, aber bei meinem normalen WinAPI Projekt kommt beim Hinzufügen die Fehlermeldung:
"Die Komponenten- und Steuerelement-Sammlung kann nur zum Hinzufügen von ActiveX-Steuerelementen zu Projekten verwendet werden, die vom Klassen-Assistenten unterstützt werden. Weitere Informationen hierzu finden Sie unter dem Hilfethema "Hinzufügen eines ActiveX-Steuerelemente zu einem Projekt"
-
Irgendwie hab ich das Flex Control jetzt in die Control-Toolbox reinbekommen, aber wenn ichs erstellen will wird unten in der Statusleiste angezeigt:
"activex-steuerelemente können nur in mfc-dialogfeldern verwendet werden"
Da scheiterts wohl, das ganze Vorhaben.