Oppure

Loading
28/04/12 21:26
pescarese77
letto la funzione in questione e lo richiamata cosi
<DllImport("user32.dll")> _
    Shared Function AllowSetForegroundWindow(ByVal dwProcessId As Integer) As Boolean
    End Function

sotto le dichiarazioni poi ho letto che per usarla devo mettere questo circa
AllowSetForegroundWindow(System.Diagnostics.Process.GetCurrentProcess().Id)


ma non riesco a capire in che punto la devo mettere, sono un enofilo se mi puoi dare una mano te ne sarei veramente grado mi basta anche un mini esempio per capire come funzional la funzione da te proposta e come utilizarla nel mio esempio

dalla traduzione della pagina ho letto questo

Consente il processo specificato impostare la finestra in primo piano, utilizzando la funzione SetForegroundWindow . Il processo di chiamata deve essere già in grado di impostare la finestra in primo piano. Per ulteriori informazioni, vedere la sezione osservazioni più avanti in questo argomento.
ti ringrazio anticipatamente per la pazienza
aaa
02/05/12 8:06
Il Totem
Il parametro della funzione è l'ID del processo che vuoi sia in grado di usare SetForegroundWindow, quindi Internet Explorer.
aaa
03/05/12 16:17
pescarese77
Ciao ho provato e no non va le finestre si alternano ma nulla rimane a zero eppure togliedo la funzione SetForegroundWindow funziona tutto già senza le altre modifico riposto il codice con le modifiche che ho fatto magari ho sbagliato qualcosa.
Imports System.Runtime.InteropServices
Public Class Form1

    'Ipvoke per i vari metodi
    'Richiamo funzioni da libreria windows per trovare la finestra attiva
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function
    '----------------------------------------------------------------------
    'Funzione per dare lo stato attivo alal finestra che e selezionata con la funzione findwindows
    <DllImport("user32.dll", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True)> _
    Public Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function


    <DllImport("user32.dll", SetLastError:=True)> _
    Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer
    End Function


    <DllImport("user32.dll")> _
    Shared Function AllowSetForegroundWindow(ByVal dwProcessId As Integer) As Boolean
    End Function




    Dim TestoOra As String = "00"
    Dim TestoMinuti As String = "00"
    Dim TestoSecondi As String = "00"

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'Avvio il cronometro
        Timer1.Start()
        'Avvio le operazioni da eseguire
        prova()
    End Sub

    Private Sub prova()
        Dim i As Integer = 1
        Do
            'trovo l'handle dell'applicazione da cercare
            Dim HandleRoulette = FindWindow(vbNullString, "Google - Windows Internet Explorer")
            Dim idprogesterno = GetWindowThreadProcessId(HandleRoulette, 0&)
            AllowSetForegroundWindow(idprogesterno)
            'Do il focus all'aplicazione esterna
            SetForegroundWindow(HandleRoulette)
            'Metto un timer per dare il tempo per utilizzare la finestra
            System.Threading.Thread.Sleep(1000)
            Dim mioid = GetWindowThreadProcessId(Me.Handle, 0&)
            AllowSetForegroundWindow(mioid)
            'Rimetto la mia finestra in focus per aggiornare la mia applicazione
            SetForegroundWindow(Me.Handle)
            'do del tempo prima di ripetere l'operazione
            System.Threading.Thread.Sleep(1000)
            i += 1
        Loop Until i = 3
        If i = 3 Then
            Timer1.Stop()
        End If
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
              TestoSecondi = TestoSecondi + 1
        If TestoSecondi < 10 Then
                  TestoSecondi = "0" & TestoSecondi
        End If
        If TestoSecondi = 60 Then
                  TestoSecondi = "00"
                  TestoMinuti = TestoMinuti + 1
            If TestoMinuti < 10 Then
                      TestoMinuti = "0" & TestoMinuti
            End If
            If TestoMinuti = 60 Then
                      TestoMinuti = "00"
                      TestoOra = TestoOra + 1
                If TestoOra < 10 Then
        TestoOra = "0" & TestoOra
                End If
            End If

        End If
              Me.Text = "Mia app" & " - Tempo Trascorso: " & TestoOra & ":" & TestoMinuti & ":" & TestoSecondi
    End Sub

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Me.Text = "Mia app" & " - Tempo Trascorso: " & TestoOra & ":" & TestoMinuti & ":" & TestoSecondi
    End Sub
End Class

ho aggiunto una nuova funzione delel Api che mi serviva per individuare gli id
la funzione è GetWindowThreadProcessId.
aaa