Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119

    [VBNET] Chiudere un applicazione solo con hwnd

    Buon duemilaCredici a tutti.

    Forse sono arrivato alla fine del mio programmino ma mi manca ancora una info .... magari stupida ..... anzi probabilmente stupida

    Parlo sempre di PPoint

    Se apro più presentazioni PPoint il PID di PPoint è sempre lo stesso ma cambiano gli handle delle presentazioni.
    Se volessi chiudere una presentazione senza killare il processo (che mi chiuderebbe al volo tutte le presentazioni) posso farlo killando l'handle della presentazione e mantenendo l'altra presentazione aperta ?

    Se si mi date qualche informazione sul come fare ?

    Grazie, Alberto

  2. #2

    Re: [VBNET] Chiudere un applicazione solo con hwnd

    Originariamente inviato da m.alverman
    Buon duemilaCredici a tutti.

    Forse sono arrivato alla fine del mio programmino ma mi manca ancora una info .... magari stupida ..... anzi probabilmente stupida

    Parlo sempre di PPoint

    Se apro più presentazioni PPoint il PID di PPoint è sempre lo stesso ma cambiano gli handle delle presentazioni.
    Se volessi chiudere una presentazione senza killare il processo (che mi chiuderebbe al volo tutte le presentazioni) posso farlo killando l'handle della presentazione e mantenendo l'altra presentazione aperta ?

    Se si mi date qualche informazione sul come fare ?

    Grazie, Alberto
    Immagino che "PPoint" sia PowerPoint, il classico programma per la creazione/presentazione di slides del pacchetto Office di Microsoft, e "killando" sia una brutta trasposizione in Italiano di una parola inglese.

    Al di là di queste considerazioni di carattere generale, per quanto riguarda la risposta: non puoi ricavare l'handle della finestra in base al titolo? Qual'è il passaggio che non riesci a sviluppare di preciso?

  3. #3
    Invia alla finestra un messaggio WM_CLOSE.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Originariamente inviato da MItaly
    Invia alla finestra un messaggio WM_CLOSE.
    Stavo appunto provando con SendMessage ma il codice che riporto mi da errore

    Ho un codice, che non allego, che mostra gli handle aperti
    Nel programma di test inserisco nella textbox l' handle da chiudere e quando eseguo mi riporta l'errore sotto il codice:

    codice:
        Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Public Const WM_CLOSE = &H10
        Public Const WM_SYSCOMMAND As Integer = &H112
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Dim hWnd1 As Long = CLng(txtHWND.Text)
            If (hWnd1 <> 0) Then
                SendMessage(hWnd1, WM_CLOSE, 0, 0)
            End If
    
        End Sub
    Errore generato
    L'assistente al debug gestito 'PInvokeStackImbalance' ha rilevato un problema in 'C:\Users\helpd_000\Documents\Visual Studio 2012\Projects\EnumWindows\WindowsApplication1\bin\ Debug\WindowsApplication1.vshost.exe'.

    Informazioni aggiuntive: Una chiamata alla funzione PInvoke 'WindowsApplication1!WindowsApplication1.Form1::Se ndMessage' ha sbilanciato lo stack. Questo problema può verificarsi quando la firma PInvoke gestita non corrisponde alla firma di destinazione non gestita. Verificare che la convenzione di chiamata e i parametri della firma PInvoke corrispondano alla firma di destinazione non gestita.

  5. #5
    Stai usando una definizione di SendMessage per VB6, i tipi sono tutti sbagliati, per cui vai a sfasciare lo stack.
    Una dichiarazione adatta può essere:
    codice:
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Originariamente inviato da MItaly
    Stai usando una definizione di SendMessage per VB6, i tipi sono tutti sbagliati, per cui vai a sfasciare lo stack.
    Una dichiarazione adatta può essere:
    codice:
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Hai ragione ..... funziona.
    Ma è normale che all'esecuzione del comando passino 5/6 secondi prima che PPoint si chiuda ?

    Grazie, Alberto

  7. #7
    Quella SendMessage sostanzialmente equivale al cliccare sul pulsante di chiusura ([X]) della finestra, se il tempo che ci mette è lo stesso allora non c'è nulla di strano.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    Se clicco, con presentazione caricata o meno. sulla x di PPoint si chiude subito mentre con sendmessage ci mette sempre alcuni secondi mentre le altre applicazioni si chiuduno subito.
    Boh vedo se ci sto dentro ugualmente.

    Grazie, Alberto

  9. #9
    Sicuro che il problema stia nella SendMessage? Posta il resto del codice che usi per individuare l'HWND che ti interessa.
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    119
    No .... va tutto perfettamente

    grazie, Alberto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.