problem mit SetTime (CDateTimeCtrl)



  • hallo!
    ich habe eine kleien anwendung mit einem CDateTimeCtrl-Steuerelement!
    diese anwendung funktioniert wunderbar!

    jetzt mein problem:

    ich möchte von aussen (d.h. mit einer anderen anwendung) die zeit für das steuerelement setzen!
    ich hole mir das HANDLE mit FindWindowEx, dass klappt auch soweit ganz gut, damit kann ich das fenster verstecken oder deaktivieren usw.
    nur wenn ich die zeit setzen will bekomme ich immer ein FALSE zurück!

    kann mir einer sagen woran das liegt?

    danke

    MFC



  • Wie erfolgt denn dein Zugriff genau (some code is helpfull)?

    Ich würde das ja über eine Windows-Message machen, so dass die betreffende Applikation nur die (selbstdefinierte) Änderungs-Nachricht erhält und entsprechend die Zeit setzt. Das ermittelte Handle kannst du dabei gut verwenden.

    s. PostMessage (SDK):

    BOOL PostMessage(
      HWND hWnd,      // handle of destination window
      UINT Msg,       // message to post
      WPARAM wParam,  // first message parameter
      LPARAM lParam   // second message parameter
    );
    

    Wes 🕶



  • ich mach das so:

    CTime _time;
    
    CDateTimeCtrl* pDate = (CDateTimeCtrl*) FindWindowEx( starthandle, 0, "SysDateTimePick32", "" );
    
    _time = CTime::GetCurrentTime ();
    VERIFY ( pDate->SetTime ( &_time ) );
    

    habs mit postmessage ausprobiert, der returnwert ist true, aber die zeit wird trotzdem nich gesetzt!

    SYSTEMTIME syst;
    GetSystemTime( &syst );
    
    CDateTimeCtrl* pDate = FindWindowEx( starthandle, 0, "SysDateTimePick32", "" );
    
    ::PostMessage( pDate->GetSafeHwnd(), DTM_SETSYSTEMTIME, GDT_VALID,          
                   (LPARAM) &syst );
    


  • Natürlich musst du die Nachricht in der Ziel-Applikation auch entsprechend verarbeiten (also dann dort die empfangene Zeit setzen). Von selbst macht die das nicht 😉



  • gut!
    aber was ist, wenn ich den quelltext nicht habe?



  • Ich hatte es so verstanden, dass du das Programm mit dem CDateTimeCtrl auch selbst erstellt hast. Falls nicht, hast du natürlich schlechte Karten, da dann nur über definierte Schnittstellen des Programms darauf zugegriffen werden kann. Kennst du diese Schnittstellen nicht, besteht keine Chance, da etwas zu bewerkstelligen.



  • ja, hab ich auch selbst erstellt, aber wenn ich den quelltext nicht mehr hätte?!
    ich versteh das nicht bei allen anderen ctrls combobox, button, editfeld usw. funktioniert alles, außer bei cdatetimectrl, warum?


Anmelden zum Antworten