Dialogbasierendes Programm beim starten "versteckt" starten
-
Ich möchte ein bereits vorhandenes Programm beim hochfahren des PCs starten und das soll ohne das man davon beim Betrieb behindert wird im Hintergrund laufen. Wie geht das??
MFG Desert Storm
-
Wenn du den Quelltext hast, hätte ich ne Idee - sonst nur eine eher vage...
-
meinst du etwas sowas ?
#include <afxwin.h> class CMyApp : public CWinApp { public: BOOL InitInstance(); } CMyApp theApp; BOOL CMyApp::InitInstance() { // hier dein code ! return TRUE; }
-
SPYWARE !
-
Auf so blöde Kommentare kann ich verzichten!! Wieso sollte ich ne Spyware schreiben. Ich will einfach nur ein Programm haben das auf einem Server läuft und die Leute die am Server arbeiten nicht wegen dem Programm gestört werden. Das dazu
Meinst du den kompletten Quelltext von meinem Dialog?? oder welchen Quelltext meinst du?? Ich poste mal den vom Dialog:
// NetworkDlg.cpp : Implementierungsdatei // #include "stdafx.h" #include "Network.h" #include "NetworkDlg.h" //#include "MySocket.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif bool server; ///////////////////////////////////////////////////////////////////////////// // CNetworkDlg Dialogfeld CNetworkDlg::CNetworkDlg(CWnd* pParent /*=NULL*/) : CDialog(CNetworkDlg::IDD, pParent) { //{{AFX_DATA_INIT(CNetworkDlg) //}}AFX_DATA_INIT // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CNetworkDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CNetworkDlg) DDX_Control(pDX, IDC_SERVER, m_Server); DDX_Control(pDX, IDC_CLIENT, m_Client); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CNetworkDlg, CDialog) //{{AFX_MSG_MAP(CNetworkDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CNetworkDlg Nachrichten-Handler BOOL CNetworkDlg::OnInitDialog() { CDialog::OnInitDialog(); // Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt // wenn das Hauptfenster der Anwendung kein Dialogfeld ist SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden // ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen m_ConnectSocket.SetParent(this); m_ListenSocket.SetParent(this); m_port = 4000; m_ListenSocket.Create(m_port); m_ListenSocket.Listen(); return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten } // Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie // den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das // Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt. void CNetworkDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // Gerätekontext für Zeichnen SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Symbol in Client-Rechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer // das zum Symbol verkleinerte Fenster mit der Maus zieht. HCURSOR CNetworkDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } void CNetworkDlg::OnVerbinden() { AfxMessageBox("Anfrage abgeschickt !"); } void CNetworkDlg::OnAkzeptieren() { m_ListenSocket.Accept(m_ConnectSocket); // Akzeptiert den Clienten als m_ConnectSocket AfxMessageBox("Client wurde akzeptiert!"); } void CNetworkDlg::OnEmpfangen() { char *Buffer = new char[1025]; int BufferSize = 1024; int Rcvd; CString strRecvd; // Nachricht abholen Rcvd = m_ConnectSocket.Receive(Buffer, BufferSize); // Ende der Nachricht abschneiden Buffer[Rcvd] = NULL; // Nachricht in die CString-Variable verweisen strRecvd = Buffer; if(strRecvd == "Reboot") { ExitWindowsEx(EWX_REBOOT,0); } } void CNetworkDlg::Beenden() { OnClose(); DestroyWindow(); }
MFG Desert Storm
-
Okay, du hast den Quelltext. Die Aussage hätte schon gereicht.
Du kannst das so ähnlich machen, wie als wenn du das aus der Taskleiste haben willst.
Da kann man nämlich einen sehr kurzen Timer aufziehen und in der Reaktionsfunktion das Fenster verstecken. Du minimierst deins einfach.ShowWindow(SW_MINIMIZE);
Und die dummen Kommentare ignorier einfach, da sucht einer ein Hobby.
-
also ein umständlicher weg fällt mir sofort ein:
in c++ gibts den befehl WinExec. der benötigt als zweiten parameter, wie und ob ein fenster dargestellt wird. hier könntest du zb. SW_HIDE oder SW_FORCEMINIMIZE verwenden.
auch wenn dir dass jetzt nicht weiterhilft: evtl. kannst du auch beim start deines eigenen programmes dies irgendwo festlegen.
-
Da ich leider nicht weiß wo ich das mit dem ShowWindow einbauen muss hoffe ich du kannst mir das sagen
-
Ist vielleicht auch was:
http://www.c-plusplus.net/forum/viewtopic.php?t=39094&highlight=unsichtbar
-
Ich kann ja aber auch eine Art Startprogramm schreiben. Eine einfache Konsolenanwendung die mein Programm in Hide startet. Aber da hab ich das Problem, dass am Schluss da steht: "Drücken sie eine beliebige Taste zum Fortfahren" und erst dann die Konsolenanwendung geschlossen wird. Kann man das auch abschalten?? Denn wäre nämlich mein Problem in diesem Thread auch geklärt!!
MFG Desert Storm
-
Du legst das doch bestimmt als Verknüpfung in den Autostart...
Guck mal in die Eigenschaften einer Verknüpfung, da kannst du sagen "Ausführen: Minimiert"
Schon fertig und ganz ohne Quellcode.
-
Das ist aber nicht sauber, ausserdem wenn das Programm einen Installer hat dann kann man nicht verlangen das jedesmal der nutzer diese Einstellung ändert.
Das wär auch Unsinn wenn er sein Programm beim Star in den Systray verschieben verschieben will.
Ausserdem siehts doch so viel edler aus.
-
Wo ist das unsauber? Und von Systray habe ich nichts gesehen.
Die Lösung zum direkt einbauen habe ich ja auch schon geschrieben.
-
naja muss ja nicht da stehen, kann ja auch sein das das ganz woanders im Programm steht... oder später noch kommen soll
-
Stimmt mit der Verknüpfung geht das auch!!!
Danke
-
zu was einen dialog erzeugen, wenn er nicht angezeigt wird ????
da reicht doch die App-Klasse wie ich vorhin beschrieben habe aus, oder irre ich ??
-
Ich weiß nicht. Ich hatte halt nur schon ein Programm erstellt und hab mir so gedacht, dass das eigentlich besser wäre, wenn das Programm gleich minimiert wird. Und ich hatte keine Lust das ganze Ding irgendwie nochmal zu programmieren. Deswegen habe ich nach einer bequemen und effizienten Möglichkeit gesucht.
MFG Desert Storm
-
alles klar, war mir nicht ganz sicher, wie du das machen möchtest.
der von mir beschriebene code ist MFC-Programm OHNE irgendwelchem Fenster -> funktioniert einwandfrei, hab ich bereits mehrmals verwendet.
-
Hi,
wenn die Software auf XP und 2000 oder höher läuft, würde ich es als
Service laufen lassen, das macht für mich den einzig richtigen Sinn,
ein Programm im Hintergrund laufen zu lassen, ohne irgendwen zu stören.