unsichtbare anwedung...



  • @Deadmaker_HUNTER:
    Timer lassen sich auch ohne Dialog-Klasse programmieren.



  • ich glaube hier liegt irgendwie eine verwechslung vor

    ich bin nicht "< >"

    frag mich auch was er hier im thread will 😵

    ich checke erstmal cpp_junky's version

    thx4help bis hierhin 🙂



  • Cpp_Junky Timer lassen sich auch ohne Dialog-Klasse programmieren.

    finde kein WM_TIMER Ereigniss bei der App

    Deadmaker_HUNTER frag mich auch was er hier im thread will 😵

    naja wuzu ein neues Thread aufmachen wenn in dem hier das Thema ist das ich suche??



  • Das kann man sich doch ganz schnell selberschreiben. Versuchs mal mit GetTickCount(); Das ganze musst du dann nur in Minuten/Stunden/wasauchimmer umrechnen. Such im Internet nach Timer-Klassen! Es gibt mit Sicherheit noch mehr Alternativen.



  • Ich hab jetzt den Code aus dem Beispiel im FAQ benutzt, aber hab das problem, dass sich die anwendung kurz nach dem start selber beendet 😞

    und ich kann auch nicht alles in InitInstance machen, weil ich einen CAsyncSocket oder CSocket benutze.



  • Ich hab mir auchmal sowas erstellt:

    //In InitInstance
        CxxxDlg dlg;
        m_pMainWnd = &dlg;
        dlg.Create(IDD_XXX_DIALOG);
        dlg.ProcessMessages();
    

    Dann der CxxxDlg die Funktion ProcessMessages hinzufügen:

    void ProcessMessages()
    {
        MSG m_msgCur;
        while(GetMessage(&m_msgCur, NULL, NULL, NULL))
        {
            if (!PreTranslateMessage(&m_msgCur))
            {
                TranslateMessage(&m_msgCur);
                DispatchMessage(&m_msgCur);
            }
        };
    }
    

    Nun kannst wie bei einem normalen Dialog WM_Timer hinzufügen. Bei Close etc musst du aber DestroyWindow aufrufen und nicht die CDialog::Onxxx() !



  • in InitInstance()
    
        m_pMainWnd = new CMainFrame();
        m_pMainWnd->ShowWindow(SW_HIDE);
        m_pMainWnd->UpdateWindow();
    
    CMainFrame::CMainFrame()
    {
        RECT r;
        r.left   = 0;
        r.top    = 0;
        r.right  = 0;
        r.bottom = 0;
    
            Create( NULL, "Simple Nonvisible MFC App", WS_EX_TOOLWINDOW, r, NULL, NULL, 0, NULL );
    }
    

    Noch besser ist jedoch direkt WinAPI (MFC unsichtbar macht wenig Sinn):

    #include <windows.h> 
    unsigned int HotKeyID1 = 100; 
    unsigned int HotKeyID2 = 101; 
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
     switch (message) 
     { 
      case WM_HOTKEY: 
        if(wParam == HotKeyID1) MessageBox(hwnd, "Alt+Shift+F11 wurde gedrückt." , "Nachricht WM_HOTKEY wurde erzeugt.", MB_OK); 
        if(wParam == HotKeyID2) MessageBox(hwnd, "Alt+Shift+F12 wurde gedrückt." , "Nachricht WM_HOTKEY wurde erzeugt.", MB_OK); 
      return 0; 
    
      case WM_DESTROY: 
        PostQuitMessage (0); 
      return 0; 
     } 
    
     return DefWindowProc (hwnd, message, wParam, lParam); 
    } 
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) 
    { 
      char szName[] = "MeineKlasse"; 
      HBRUSH MyBrush = CreateSolidBrush( RGB( 0, 150, 255 ) ); 
      WNDCLASS wc; 
      MSG msg; 
    
      wc.style         = CS_HREDRAW | CS_VREDRAW; 
      wc.lpfnWndProc   = WndProc; 
      wc.cbClsExtra    = 0; 
      wc.cbWndExtra    = 0; 
      wc.hInstance     = hI; 
      wc.hIcon         = LoadIcon (NULL, IDI_WINLOGO); 
      wc.hCursor       = 0; 
      wc.hbrBackground = MyBrush; 
      wc.lpszMenuName  = NULL; 
      wc.lpszClassName = szName; 
    
      RegisterClass (&wc); 
    
      HWND hwnd = CreateWindowEx (WS_EX_TOOLWINDOW, szName, "", 0 , 0, 0, 0, 0, NULL, NULL, hI, NULL); 
    
      RegisterHotKey(hwnd, HotKeyID1, MOD_ALT | MOD_SHIFT, VK_F11); 
      RegisterHotKey(hwnd, HotKeyID2, MOD_ALT | MOD_SHIFT, VK_F12); 
    
      ShowWindow   (hwnd, iCmdShow); 
      UpdateWindow (hwnd); 
    
      while (GetMessage (&msg, NULL, 0, 0)) 
      { 
        TranslateMessage (&msg); 
        DispatchMessage  (&msg); 
      } 
      return msg.wParam; 
    }
    




  • Schau mal in die FAQ unter Programm als Service



  • Ich würde auch direkt Winapi vorschlagen, und dann halt auf WM_TIMER reagieren, falls du irgendwelche MFC-Klassen verwendest, kannst du ja trozdem die passenden Headers einbinden.


Anmelden zum Antworten