Windows-Programme automatisieren (z.B. mit VBScript)
Hallo!
Habe folgende Problemstellung.
Ich möchte ein Programm automatisch öffen, ein paar Aktionen ausführen (Radio-Boxes setzen, zu einem Eingabefeld gehen und ein paar Tastatureinträge machen...) und anschließend das Programm wieder schließen. Dies sollte recht zuverlässig funktionieren (Netzwerkrechner) und sollte z.B. nicht abhänig von z.b. der Fensterposition sein.
Hab schon bisschen mit VB-Script rumgespielt (mit TAB vorgehüpft und so), ist mir aber zu ungenau weil ich die Buttons z.B. nicht genau identifizieren kann um sicher zu gehen das es der richtige ist...
Habt ihr ne Lösung wie man sowas realisieren kann, ähnlich wie z.b. bei Softwareverteilsystemen??
Danke schon mal für eure Hilfe!
Gruß
Tobias
PS: Zum besseren Verständnis hier die genau Befehlsabfolge: Programm öffnen --> Dateipfad-Button 1 anklicken --> Dateipfad eintragen --> OK klicken --> Checkbox setzen --> Dateipfad-Button 2 anklicken --> Dateipfad eintragen --> OK klicken --> F6 drücken --> warten bis fertig --> Programm schließen.
Habe folgende Problemstellung.
Ich möchte ein Programm automatisch öffen, ein paar Aktionen ausführen (Radio-Boxes setzen, zu einem Eingabefeld gehen und ein paar Tastatureinträge machen...) und anschließend das Programm wieder schließen. Dies sollte recht zuverlässig funktionieren (Netzwerkrechner) und sollte z.B. nicht abhänig von z.b. der Fensterposition sein.
Hab schon bisschen mit VB-Script rumgespielt (mit TAB vorgehüpft und so), ist mir aber zu ungenau weil ich die Buttons z.B. nicht genau identifizieren kann um sicher zu gehen das es der richtige ist...
Habt ihr ne Lösung wie man sowas realisieren kann, ähnlich wie z.b. bei Softwareverteilsystemen??
Danke schon mal für eure Hilfe!
Gruß
Tobias
PS: Zum besseren Verständnis hier die genau Befehlsabfolge: Programm öffnen --> Dateipfad-Button 1 anklicken --> Dateipfad eintragen --> OK klicken --> Checkbox setzen --> Dateipfad-Button 2 anklicken --> Dateipfad eintragen --> OK klicken --> F6 drücken --> warten bis fertig --> Programm schließen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 29749
Url: https://administrator.de/forum/windows-programme-automatisieren-z-b-mit-vbscript-29749.html
Ausgedruckt am: 14.04.2025 um 07:04 Uhr
2 Kommentare
Neuester Kommentar
Hoi,
ich kann dir mal ein Beispiel in C++ sagen, wie das geht:
Mit FindWindowEx suchst du dein Fenster, in dem du die Sachen ausführen möchtest.
Um den Namen der Controls herauszufinden, die du benutzen willst, kann ich die MS Spy++ empfehlen. Das hat eine Suchfunktion,
mit der du sämtliche Fenster beobachten kannst, was die einzelnen Controls für Namen haben. Ist glaub ich beim Visual Studio dabei.
Mit der Funktion PostMessage kannst du dann das ausführen, was du haben willst (Enter drücken, String eingeben, etc.)
Achtung: wenn du ein KEYDOWN absetzt, musst du auch ein KEYUP machen, quasi für Taste drücken und wieder loslassen..
Ist ein bisschen Spielerei, aber geht eigentlich ganz gut...
Hoffe, konnt dir ein wenig weiterhelfen.
Falls du noch Fragen hast, einfach posten
ich kann dir mal ein Beispiel in C++ sagen, wie das geht:
#include "string.h"
#include <windows.h>
//nützliches Makro um schreibarbeit zu sparen...
#define CHECKNULLHWND(hWnd,msgboxmsg,msgboxcaption,abbruchlabel) \
if(!hWnd) \
{ MessageBox(NULL,msgboxmsg,msgboxcaption,MB_OK); \
goto abbruchlabel; \
} \
//====================================================================================
// main()
//====================================================================================
int main(int argc, char* argv)
{
//Trick um Warnings zu unterdrücken (die meisten Compiler kennen das)
argc;
argv;
//var
HWND hWnd,hWndChild;
size_t i,ilen;
const char *pszString = "Das ist der Text der übertragen wird!!! \n\nAuch Zeilenumbrüche und "\
"Tab's sind möglich\nx\tTab\nxx\t\tTab\nxxx\t\t\tTab\n\n\n\n\n\n\n"\
" W W W 33333 2222 AAAA PPPPP III RRRRRR U U L ZZZZZZZ \n"\
" W W W 3 2 2 A A P P I R R U U L Z \n"\
" W W W 3 2 A A P P I R R U U L Z \n"\
" W W W 33333 2 --- AAAAAA PPPPP I RRRRRR U U L Z \n"\
" W W W 3 2 A A P I RR U U L Z \n"\
" W W W 3 2 A A P I R R U U L Z \n"\
" W W W 3 2 2 A A P I R R U U L Z \n"\
" WWWWW 33333 22222 A A P III R R UUUU LLLLLL ZZZZZZZ \n";
//code
hWnd=FindWindow //Handle vom Notepad suchen
(NULL,(LPCTSTR)"Unbenannt - Editor");
CHECKNULLHWND(hWnd,"Kein Notepad offen. Bitte ein leeres Notepad öffnen. ","Info",abbruch)
hWndChild=NULL;
hWnd=FindWindowEx //Handle des Editfeldes vom Notepad suchen
(hWnd,hWndChild,(LPCTSTR)"Edit",NULL);
CHECKNULLHWND(hWnd,"Hmmm das sollte nicht passieren: Das Eingabefeld vom Notepad konnte nicht gefunden werden! ","Info",abbruch)
ilen = strlen(pszString); //Länge des zu sendenden Strings bestimmen
for(i=0;i<ilen;i++) //Vom ersten bis zum letzten Zeichen übertragen
{
PostMessage //WM_CHAR-Nachricht posten
(hWnd,WM_CHAR,pszString[i],0);
// So kommt es von der Tastatur, blos hier muessen eben VK's (VK_TAB etc.) gesendet werden.
// Außerdem ist Shift etc. zu drücken wenn man z.B. ein großes A will. Einfacher ist da schon die
// fertige WM_CHAR-Nachricht zu senden (TranslateMessage in der MessageLoop baut die beiden folgenden Nachrichten
// sowieso in eine WM_CHAR um, die dann von der Anwendung verarbeitet wird)
//PostMessage(hWnd,WM_KEYDOWN,'A',0x001E0001);
//PostMessage(hWnd,WM_KEYUP ,'A',0xC01E0001);
}
return 0;
abbruch:
return 1;
}
Mit FindWindowEx suchst du dein Fenster, in dem du die Sachen ausführen möchtest.
Um den Namen der Controls herauszufinden, die du benutzen willst, kann ich die MS Spy++ empfehlen. Das hat eine Suchfunktion,
mit der du sämtliche Fenster beobachten kannst, was die einzelnen Controls für Namen haben. Ist glaub ich beim Visual Studio dabei.
Mit der Funktion PostMessage kannst du dann das ausführen, was du haben willst (Enter drücken, String eingeben, etc.)
Achtung: wenn du ein KEYDOWN absetzt, musst du auch ein KEYUP machen, quasi für Taste drücken und wieder loslassen..
Ist ein bisschen Spielerei, aber geht eigentlich ganz gut...
Hoffe, konnt dir ein wenig weiterhelfen.
Falls du noch Fragen hast, einfach posten