+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

VB6 - Nascondere il pulsante relativo a una fiinestra sulla barra delle applicazioni.

  1. #1
    patapatty non è in linea Novello
    Ho questo problema. E' possibile fare in modo che il pulsante relativo a una finestra (di cui conosco il titolo e quindi riesco a "catturarne" l'handle tramite APi) non sia visualizzato nella barra delle applicazioni?

    Grazie

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person

  3. #3
    patapatty non è in linea Novello
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Imposta nella finestra

    ShowInTaskbar = False

    Scusa Gibra, lo so che adesso ti arrabbierai perchè aggiungo solo ora dei dettagli!!!!
    Però talvolta, quando hai in testa una cosa, non ti accorgi di aver dimenticato di dire qualcosa perchè la dai per scontata!

    La finestra di cui voglio nascondere il pulsante non fa parte di un programma vb di cui ho il sorgente! Però è scritto in VB anche quello.

    Pensavo esistesse qualche api (non sono molto ferrata sull'argomento)

    Scusami ancora.

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Nascondere un'applicazione non tua non è molto lecito.
    Esistono delle API ma.... pungono.

    Tu come sei messa riguarda a conoscenza dei meccanismi relativi alle API?

    In teoria, non ho mai provato, ma potresti

    1) cercare l'handle della finestra (con FindWindow)
    2) leggere lo stile (GWL_EXSTYLE) della finestra (con GetWindowLong)
    3) modificare lo stile (GWL_EXSTYLE) ricavato al punto 2 (con SetWindowLong)
    aggiungendo o sottraendo il flag WS_EX_APPWINDOW a seconda che tu voglia
    a - mostrare (usando Or)
    b - nascondere (usando And Not)

    Perchè immagino che per correttezza, dopo averla nascosta (la finestra), dovrai poi farla riapparire.
    Altrimenti come fai a chiudere il programma?

    ℹ️ Leggi di più su gibra ...

  5. #5
    L'avatar di spikexx84
    spikexx84 non è in linea Scribacchino
    Umhh.... Io avevo provato a fare quello che dici, Gibra (per tuttaltro motivo), però non funziona non sò perchè, prendiamo un microcodice di esempio:

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
        
    Const GWL_EXSTYLE As Long = -20
    Const WS_EX_APPWINDOW As Long = &H40000
    
    Sub Main
      n_HandleFinestra = FindWindow(vbNullString, "Form1")
      n_StileFinestra = GetWindowLong(n_HandleFinestra, GWL_EXSTYLE)
    
      SetWindowLong n_HandleFinestra, GWL_EXSTYLE, n_StileFinestra And Not (WS_EX_APPWINDOW)
    End Sub
    
    Purtroppo non da errori di runtime, ma non funziona, nel senso che non fa sparire la finestra dalla taskbar, non che la cosa mi sorprenda dal momento che lo style letto dalla finestra è 256, mentre la costante WS_EX_APPWINDOW vale 262144, quindi

    n_StileFinestra And Not (WS_EX_APPWINDOW) = n_StileFinestra
    256 And Not (262144) = 256

    Il dramma è che anche su MSDN non riesco a trovare nulla, anche se sinceramente inizio a dubitare che il fatto di mostrare o no la finestra nella taskbar sia una questione di stile di finestra dal momento che lanciando la stessa form una volta visibile e una volta invisibile nella taskbar (tramite la proprietà ShowInTaskBar della form stessa) e leggendo lo Style con GetWindowLong ho ottenuto 256 tutte e due le volte....

    Il mistero si infittisce.....

    Comunque se qualcuno ha voglia di fare qualche prova in più posto qui sotto un programmino di prova (c'è tutto il codice della form, oggetti inclusi, quindi è necessario copiaincollarlo nel notepad e salvarlo con estensione .frm, dopodiche è sufficente fare doppio click sul file)

    VERSION 5.00
    Begin VB.Form Form1 
       BorderStyle     =   1  'Fixed Single
       Caption         =   "Prova"
       ClientHeight    =   2955
       ClientLeft      =   45
       ClientTop       =   330
       ClientWidth     =   4680
       LinkTopic       =   "Form1"
       MaxButton       =   0   'False
       MinButton       =   0   'False
       ScaleHeight     =   2955
       ScaleWidth      =   4680
       StartUpPosition =   3  'Windows Default
       Begin VB.TextBox obj_TextBoxCaption 
          Height          =   495
          Left            =   120
          TabIndex        =   2
          Text            =   "Text1"
          Top             =   240
          Width           =   4455
       End
       Begin VB.CommandButton CmdMostra 
          Caption         =   "Mostra"
          Height          =   495
          Left            =   3360
          TabIndex        =   1
          Top             =   960
          Width           =   1215
       End
       Begin VB.CommandButton CmdNascondi 
          Caption         =   "Nascondi"
          Height          =   495
          Left            =   2040
          TabIndex        =   0
          Top             =   960
          Width           =   1215
       End
       Begin VB.Label obj_LabelStyleNuovo 
          Height          =   375
          Left            =   120
          TabIndex        =   5
          Top             =   2400
          Width           =   4455
       End
       Begin VB.Label obj_LabelStyleVecchio 
          Height          =   375
          Left            =   120
          TabIndex        =   4
          Top             =   2040
          Width           =   4455
       End
       Begin VB.Label Obj_labelHandle 
          Height          =   375
          Left            =   120
          TabIndex        =   3
          Top             =   1680
          Width           =   4455
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
        
    Const GWL_EXSTYLE As Long = -20
    Const WS_EX_APPWINDOW As Long = &H40000
    
    Dim n_HandleFinestra As Long
    Dim n_StileFinestra As Long
    
    Private Sub CmdMostra_Click()
    
        LeggiHandle
            SetWindowLong n_HandleFinestra, GWL_EXSTYLE, n_StileFinestra Or (WS_EX_APPWINDOW)
        ScriviStyleNuovo
        
    End Sub
    
    Private Sub CmdNascondi_Click()
    
        LeggiHandle
            SetWindowLong n_HandleFinestra, GWL_EXSTYLE, n_StileFinestra And Not (WS_EX_APPWINDOW)
        ScriviStyleNuovo
        
    End Sub
    
    Private Sub LeggiHandle()
    
        n_HandleFinestra = FindWindow(vbNullString, obj_TextBoxCaption.Text)
        n_StileFinestra = GetWindowLong(n_HandleFinestra, GWL_EXSTYLE)
        
        Obj_labelHandle.Caption = "Handle -> " & n_HandleFinestra
        obj_LabelStyleVecchio.Caption = "Style vecchio -> " & n_StileFinestra
        
    End Sub
    
    Private Sub ScriviStyleNuovo()
        
        n_StileFinestra = GetWindowLong(n_HandleFinestra, GWL_EXSTYLE)
        obj_LabelStyleNuovo.Caption = "Style nuovo   -> " & n_StileFinestra
    
    End Sub
    
    ℹ️ Leggi di più su spikexx84 ...

  6. #6
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Quote Originariamente inviato da spikexx84 Visualizza il messaggio
    Umhh.... Io avevo provato a fare quello che dici, Gibra (per tuttaltro motivo), però non funziona [CUT]
    infatti io ho detto che non ho mai provato.

    In realtà non ho provato con una finestra esterna al progetto e secondo me, non credo funzioni perchè lo stile può essere impostato solo al momento della creazione della finestra.
    Una volta creata.... nisba.
    Si potrebbe installare un hook di tipo WH_CALLWNDPROC per intercettare il messaggio WM_CREATE e riuscire così a modificare stile durante la creazione della finestra.
    Ma si inizia ad andare sul complicato, e poi bisogna vedere se i S.O. moderni lo permettono...


    Al contrario, con un form interno al progetto è possibilissimo, e funziona bene, a patto che:
    1) il form sia prima impostato su ShowIntaskbar=False
    2) la modifica dello stile avvenga nell'evento Initialize.

    ShowInTaskBar_API.zip
    Vedi progetto in allegato.

    ℹ️ Leggi di più su gibra ...

  7. #7
    Bisogna usare la 'setwindowpos' e settare il flag a SWP_HIDEWINDOW.

    Ora mostro una funzione che passatogli un nome di un programma(o meglio la caption della finestra) e segnliendo true o false visualizza o nasconde la finestra dalla taskbar,unico inconveniente è dato che si utilizza la setwindowpos quando si torna a visualizzare la finestra essa sarà delle dimensioni da noi impostate,e quindi,bisognerebbe prima memorizzarci le dimensioni in modo da risettare i giusti valori,ma queste sono frivolezze...

    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    
    Private Const SWP_HIDEWINDOW = &H80
    Private Const SWP_SHOWWINDOW = &H40
    
    Private Function AppInTaskBar(ByVal AppName As String, ByVal HideApp As Boolean) As Boolean
        Dim hwnd As Long
        
        hwnd = FindWindow(vbNullString, AppName)
        
        If hwnd = 0 Then Exit Function
        
        If HideApp Then
            SetWindowPos hwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW
        Else
            SetWindowPos hwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW
        End If
        
        AppInTaskBar = True
    End Function
    
    ℹ️ Leggi di più su vbExtreme ...

  8. #8
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Ho aggiunto la gestione delle dimensioni (usando GetWindowRect) ma...
    ... nel mio Windows 64bit nasconde tutto, finestra compresa.
    Ultima modifica di gibra; 09-04-2011 10:40 
    ℹ️ Leggi di più su gibra ...

  9. #9
    si lo so ma è il metodo piu semplice che conosco....
    Altrimenti si hanno altri due possibili soluzioni:
    1) elencare i processi attivi e toglierlo(assai complicato e difficile per un principiante)
    2) Hackerare la task manager,ovvero far sembrare che non ci sia il processo semplicemente prendendo l'handle della list della task e rimuovendo con LVM_ il nome dalla lista dei processi.

    Non li ho elencati solo perchè sono molto piu complicati e spero che basti il primo da me espresso.
    ℹ️ Leggi di più su vbExtreme ...

  10. #10
    ops ho fatto una gaff....pensavo alla task manager....al piu presto provvedo a rispondere....
    ℹ️ Leggi di più su vbExtreme ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Nascondere la Barra delle Applicazioni
    Da PCBase nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 22-09-2012, 17:00
  2. Nascondere la Barra delle Applicazioni
    Da PCBase nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 22-09-2012, 14:09
  3. nascondere barra delle applicazioni di windows
    Da ugk111 nel forum Microsoft Word
    Risposte: 3
    Ultimo Post: 20-09-2010, 19:49
  4. Barra delle applicazioni e ora
    Da The Revolution nel forum Microsoft Windows
    Risposte: 2
    Ultimo Post: 30-07-2007, 16:49
  5. barra delle applicazioni
    Da antonio_81 nel forum Microsoft Windows
    Risposte: 4
    Ultimo Post: 09-01-2007, 08:51