DOS Console im Hintergrund
-
Hi Leute!
Ich habe mal eine Frage. Ich habe ein Programm C++ Programm geschrieben welches nun im Hintergrund laufen soll. Ich habe gehört das soll funktionieren wenn man aus der Consollen app eine Windows app macht.
#include <iostream> #include <cstdlib> #include <windows.h> #include <ctime> int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //int main(int argc, char *argv[]) { int ende=0, an=0; int ping_rueck; int wartezeit=120000; while (1) { POINT ptCursor; POINT ptNewCursor; GetCursorPos(&ptCursor); Sleep(wartezeit); GetCursorPos(&ptNewCursor); if(ptCursor.x == ptNewCursor.x && ptCursor.y == ptNewCursor.y) { ping_rueck=system("ping -n 1 -w 0 192.168.1.12"); //rechner Heim PC if (ping_rueck==0 && an==1) { system("pskill Azureus.exe"); an=0; wartezeit = 120000; } if (ping_rueck==1 && an==0) { system("start /MIN D:\\programme\\Azureus\\Azureus.exe"); an=1; wartezeit = 6000; } } else { system("pskill Azureus.exe"); wartezeit = 120000; } } system("PAUSE"); return 0; }Nunja ich hab oben schonmal mit Int WinMain angefangen

Das Programm guckt ob die maus innerhalb von 2 min nicht bewegt worden ist.
Wen das true ist guckt das Programm ob der angegebene Netzwerk PC online ist.
Wenn nicht dann öffnet er Naja ein Programm ebend
. Wenn nun der Andere PC online geht oder ich die Maus bewege wird das Programm geschlossen.Nunja dies verhindert das mein Programm ^^ die Netzwerkbandbreite blockiert wenn das netzwerk gebraucht wird.
Nun könnt ihr euch vorstellen das so eine Console auf dem Desktop ziehmlich nerft und ich wollte Fragen ob mir einer den Code so umbauen kann das er im Hintergrund aggiert oder zumindest nur als kleines Icon in der Quick Launch bar vorhanden ist.
Ich hab gehört man kann das Programm in einen Windows Dienst umwandeln aber das sei dehr kompliziert.
Vieleicht kann mir hier ja einer helfen

MFG
WAR][FIRE
-
Warum machst Du auch einen Consolen-Anwendung? Mach eine Window-Anwendung dann hast Du keine Console.
Dies musst Du in Deinen Linker.-Settings umstellen (/SUBSYSTEM:WINDOWS).
Wenn das bei Dir nicht geht, dann verwende eine gescheite IDE (z.B. VC2005 Express).
-
Juhu Danke
das klappt 
allerdings kommt nun ein weiteres Problem dazu.
Wenn das Programm alle 2 min die Mauskoordinaten nimmt, popt kurz die Console auf. Nur einige millisekunden und danach ist sie wieder weg. Das Würd mich auch nicht stören allerdings wirft mich das Programm dann immer aus meinem Spiel raus da es sich in den vordergrund verschiebt.
Kann man da gegen auch noch was machen oder müsst ich dafür das Programm in einen Dienst umschreibe?
MFG
WAR][FIRE
-
Warum verwendest Du "system"?
Nimm CreateProcess oder ShellExceute
mit %COMSPEC% /c pskill Azureus.exe
-
#include <iostream> #include <cstdlib> #include <windows.h> #include <ctime> int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) //int main(int argc, char *argv[]) { int ende=0, an=0; int ping_rueck; int wartezeit=120000; int Me.hWnd = 0; while (1) { POINT ptCursor; POINT ptNewCursor; GetCursorPos(&ptCursor); Sleep(wartezeit); GetCursorPos(&ptNewCursor); if(ptCursor.x == ptNewCursor.x && ptCursor.y == ptNewCursor.y) { ping_rueck=system("ping -n 1 -w 0 192.168.1.12"); //rechner Heim PC if (ping_rueck==0 && an==1) { //system("pskill Azureus.exe"); %COMSPEC% /c pskill Azureus.exe; an=0; wartezeit = 120000; } if (ping_rueck==1 && an==0) { //system("start /MIN D:\\programme\\Azureus\\Azureus.exe"); ShellExecute(Me.hWnd, "open", _ "D:\\programme\\Azureus\\Azureus.exe", "", _ "", SW_HIDE) an=1; wartezeit = 6000; } } else { //system("pskill Azureus.exe"); %COMSPEC% /c pskill Azureus.exe; wartezeit = 120000; } } system("PAUSE"); return 0; }*g*
bei mir kommen hier nur noch fehler.
Was mach ich da falsch?C:\Dev-Cpp\muhatier.cpp
[Warning] In function `int WinMain(HINSTANCE__, HINSTANCE__,:12 C:\Dev-Cpp\muhatier.cpp
parse error before `.' token31 C:\Dev-Cpp\muhatier.cpp
parse error before `%' token39 C:\Dev-Cpp\muhatier.cpp
request for member `hWnd' in `Me', which is of39 C:\Dev-Cpp\muhatier.cpp
`_' undeclared (first use this function)[Build Error] (Each undeclared identifier is reported only once
39 C:\Dev-Cpp\muhatier.cpp
parse error before string constant48 C:\Dev-Cpp\muhatier.cpp
parse error before `%' tokenMFG
WAR][FIRE
-
Kannst du überhaupt schon C programmieren? An einigen Stellen ist es ja _total_ falsch.
-
Me.hWnd ist doch kein zulässiger name für eine variable! du kannst bei ShellExecute für den 1.Parameter auch einfach NULL übergeben
-
C programmieren

also ich bin noch Anfänger ^^ aber ich wills mal können

Bin gerad beim Buch C++ für Dummies *g* auf Seite 105.
Naja nichts desto trotz möcht ich das Programm gerne fertig haben da es ja einen nutzen für mich hat.
Wo sind denn meine Fehler?
MFG
WAR][FIRE
-
#include <iostream> #include <cstdlib> #include <windows.h> #include <ctime> int WinMain(::HINSTANCE__* hInstance, ::HINSTANCE__* hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int nEnd = 0; bool bOn = 0; int nPingResult; int nBreak = 120000; while(true) { ::POINT ptCursor; ::POINT ptNewCursor; ::GetCursorPos(&ptCursor); ::Sleep(nBreak); ::GetCursorPos(&ptNewCursor); if(ptCursor.x == ptNewCursor.x && ptCursor.y == ptNewCursor.y) { nPingResult = system("ping -n 1 -w 0 192.168.1.12"); if(nPingResult == 0 && bOn == true) { // system("pskill Azureus.exe"); %COMSPEC% /c pskill Azureus.exe; // was soll das sein?! bOn = false; nBreak = 120000; } if(nPingResult == 1 && bOn == false) { if((::ShellExecute(NULL, "open", "D:\\programme\\Azureus\\Azureus.exe", 0, 0, SW_HIDE)) > 32) { bOn = true; nBreak = 6000; } else { std::cout << "FEHLER: Das Programm konnte nicht geoeffnet werden!" << std::endl; bOn = false; nBreak = 120000; } } } else { //system("pskill Azureus.exe"); %COMSPEC% /c pskill Azureus.exe; // Was soll das sein?! nBreak = 120000; } } getch(); return 0; }
-
boah könnt ihr mal diesen "::HINSTANCE__* hInstance" lassen. Dafür gibt es keinen grund außer man steht darauf seinen source code unnötig aufzublähen, hässlicher und nunnützer zu machen...
-
Spieleprogrammierer eben...
-
pskill ist ein Programm. Dies fügt in die Console weitere Befehle hinzu.
es reagiert auf den Befehl pskill
Dahinter dann den Namen des Prozesses. Also pskill Azureus.exe .
Diesen Prozess killt er dann wie im Taskmanager "Prozess beenden".Oder gibt es einen Befehl in C der Prozesse schließen kann?
MFG
WAR][FIRE
-
sende dem Azureus fenster doch eine WM_CLOSE nachricht, dein pskill schiesst es ja bestimmt auch einfach ab. wenn du es radikal abschiessen willst kannst du TerminateProcess verwenden allerdings ist davon abzuraten.
-
Wie darf denn so ein WM_CLOSE Befehl aussehen wenn er Azureus.exe schließen soll?
Ich mein der WM_CLOSE Befehl mal als ganzes beispiel wie man ihn auch in den Compiler einfügt.
-
Hi, brauchste die Funktion SendMessage. Du brauchst aber das Handle von deinem Azureus damit SendMessage weiss wo er die Nachricht hinschicken soll, das Handle holste dir mit FindWindow.
Hier Bsp.:
HANDLE DeinWindow; // is klar nä? DeinWindow = FindWindow( "Die ClassID", "Was in der Titelleiste steht" ); if( DeinWindow == NULL ) { printf("Sorry, jabisch jetz grad nisch jefunden!\n"); system("PAUSE"); //Damit dus lesen kannst return 1; //Leider fehlgeschlagen :d } if( SendMessage((HWND)DeinWindow, WM_CLOSE, 0, 0)==0 ) return 1; // Geklabbed? JOP! return 0;So ungefähr.

Bisch dänne, nä?
Der Kettenraucher