none
Aktiv/Inaktiv RRS feed

  • Frage

  • Hallo
    Ich möchte machen, dass der Status(msn) auf beschäftigt geht wenn das Messenger Fenster und die WA inaktiv ist.
    Mein Code:
    Imports MessengerAPI
    Public Class Form1
        Dim msn As New MessengerAPI.Messenger
    
    Sub Inaktiv()
    msn.MyStatus = busy
    Wait to me.Status = aktiv Then aktiv()
    End Sub
    
    Sub aktiv()
    msn.MyStatus = Online
    End Sub
    
    Sub Timer1.Tick()
    If me.status = inaktiv for x sekunden Then inaktiv()
    End Sub
    
    End Class
    Also dieser Code funktioniert nicht, aber ich möchte einen Code der ungefär das selbe kann.
    LG Yves Riedener
    Dienstag, 16. März 2010 12:24

Antworten

  • Hallo zusammen,

    Ich verstehe das so: wenn die Anwendung und das Windows Live Messenger nicht die Aktive Fenster sind dann soll Windows Live Messenger auf „Busy“ springen. Wenn eines von den Beiden Fenstern jedoch aktiv ist dann passiert nichts.

    @Yves: Kannst Du ein bisschen "Licht" machen?

    Imports System.Runtime.InteropServices
    Imports System.Text
    Imports MessengerAPI
    
    Public Class Form1
    
        <DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
        Public Shared Function GetForegroundWindow() As IntPtr
        End Function
    
        <DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Public Shared Function GetWindowText(ByVal hWnd As IntPtr, <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer
        End Function
    
    
        Dim myMSN As New MessengerAPI.Messenger
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            If GetActiveWindowTitle() = "Form1" Or GetActiveWindowTitle() = "Windows Live Messenger" Then
                '//Nichts machen
            Else
                myMSN.MyStatus = MISTATUS.MISTATUS_BUSY
            End If
    
            '//MsgBox(GetActiveWindowTitle)
        End Sub
    
        Private Function GetActiveWindowTitle() As String
            Const nChars As Integer = 256
            Dim handle As IntPtr = IntPtr.Zero
            Dim Buff As New StringBuilder(nChars)
            handle = GetForegroundWindow()
    
            If GetWindowText(handle, Buff, nChars) > 0 Then
                Return Buff.ToString()
            End If
            Return Nothing
        End Function
    
    End Class



     



    Grüße,

    Robert

    Donnerstag, 18. März 2010 12:40
    Moderator

Alle Antworten

  • Hallo Yves,
    und ich verstehe Deinen Code nicht.


    Das To-Schlüsselwort kann in den folgenden Kontexten verwendet werden:

    For...Next-Anweisung

    Select...Case-Anweisung

    Gruß
    Ellen


    please, mark this as answer if it is THE answer -- best regards Ellen
    Donnerstag, 18. März 2010 09:31
  • Hallo Ellen,

    um sein Ansinnen zu verstehen, und eine Lösung zu präsentieren,
    müsste man sich mit dem Messenger API auseinander setzen.
    Eine (englische) Anlaufstelle: http://dev.live.com/messenger/

    Gruß Elmar
    Donnerstag, 18. März 2010 10:21
    Beantworter
  • Hallo Yves,

    Du kannst prüfen ob das Fenster in „Away“ Status ist und auf „Busy“ schalten wie zum Beispiel:

     

    Imports MessengerAPI
    Public Class Form1
    
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim myMSN As New MessengerAPI.Messenger
    
    
            If myMSN.MyStatus = MISTATUS.MISTATUS_AWAY Then
    
                myMSN.MyStatus = MISTATUS.MISTATUS_BUSY
    
            End If
    
        End Sub
    End Class


    Weil „Away“ bedeutet ja „Inactive“ für x Minuten (die Einstellung findest Du in Windows Live Messenger unter Menü Tools

    -> Options -> Personal -> Status -> Häkchen auf „Show me as „Away“ when I’m inactive for x Minutes“)

    Grüße,

    Robert

    Donnerstag, 18. März 2010 11:21
    Moderator
  • Hallo Robert und Elmar,

    könntet Ihr mir bitte diese Syntax erklären?

    Wait to me.Status = aktiv Then aktiv()

    Das ist doch Visual Basic oder nicht?

    schöne Grüße
    Ellen




    please, mark this as answer if it is THE answer -- best regards Ellen
    Donnerstag, 18. März 2010 11:42
  • Hallo Ellen,

    Für mich scheinte es so eine „Art“ Pseudocode zu sein aber es ist eine Mischung zwischen Yves Logik (was er machen möchte) und VisualBasic.NET. Wenn ich das noch einmal nachschau sehe ich er möchte das machen wenn die WA (WindowsAnwendung ?) „inaktiv“ ist.

    Grüße,

    Robert

    Donnerstag, 18. März 2010 11:51
    Moderator
  • Hallo Ellen,

    das ist einfach nur Pseudocode, der veranschaulichen soll, was erreicht werden sollte. Allerdings ist dieser Pseudocode so geschrieben, dass man das leider trotzdem nicht wirklich versteht.
    Hannes

    If you have got questions about this, just ask.
    Mark the thread as answered if the answer helps you. This helps others who have the same problem !
    C# to VB.NET: http://www.developerfusion.com/tools/convert/csharp-to-vb/
    Donnerstag, 18. März 2010 11:52
  • Hallo Robert und Hannes,

    alles klar. Dann bin ich ja beruhigt.
    Ich habe das einem Kollegen gezeigt und mit ihm eine Viertelstunde diskutiert.
    Wir konnen uns keinen Reim draus machen. Mein Kollege programmiert in
    c# und ist schon einiges weiter als ich.

    danke und schöne Grüße
    Ellen

    please, mark this as answer if it is THE answer -- best regards Ellen
    Donnerstag, 18. März 2010 12:33
  • Hallo zusammen,

    Ich verstehe das so: wenn die Anwendung und das Windows Live Messenger nicht die Aktive Fenster sind dann soll Windows Live Messenger auf „Busy“ springen. Wenn eines von den Beiden Fenstern jedoch aktiv ist dann passiert nichts.

    @Yves: Kannst Du ein bisschen "Licht" machen?

    Imports System.Runtime.InteropServices
    Imports System.Text
    Imports MessengerAPI
    
    Public Class Form1
    
        <DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
        Public Shared Function GetForegroundWindow() As IntPtr
        End Function
    
        <DllImport("user32", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Public Shared Function GetWindowText(ByVal hWnd As IntPtr, <Out(), MarshalAs(UnmanagedType.LPTStr)> ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer
        End Function
    
    
        Dim myMSN As New MessengerAPI.Messenger
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            If GetActiveWindowTitle() = "Form1" Or GetActiveWindowTitle() = "Windows Live Messenger" Then
                '//Nichts machen
            Else
                myMSN.MyStatus = MISTATUS.MISTATUS_BUSY
            End If
    
            '//MsgBox(GetActiveWindowTitle)
        End Sub
    
        Private Function GetActiveWindowTitle() As String
            Const nChars As Integer = 256
            Dim handle As IntPtr = IntPtr.Zero
            Dim Buff As New StringBuilder(nChars)
            handle = GetForegroundWindow()
    
            If GetWindowText(handle, Buff, nChars) > 0 Then
                Return Buff.ToString()
            End If
            Return Nothing
        End Function
    
    End Class



     



    Grüße,

    Robert

    Donnerstag, 18. März 2010 12:40
    Moderator
  • ja vielen dank
    LG Yves Riedener
    Donnerstag, 18. März 2010 15:52