Newsgroup: it.comp.lang.visual-basic
Titolo: Ho trovato sul web la soluzione per portare in primo piano un'applicazione ma...

Il mio problema č quello di rendere in primo piano un'applicazione che č
ridotta a icona
Navigando su internet ho trovato questa soluzione al mio problema ma
funziona solo se devo portare in primo piano NOTEPAD, ma con gli altri
programmi non funziona, ad esempio con WORDPAD non funnge.
C'č qualcuno che puň darmi una mano?? non so piů dove andare a sbattere la
testa.................
1. Aprire un nuovo progetto Visual Basic
2. Aggiungere una form con un bottone
3. Aggiungere il seguente codice alla form
'---------------------------------------------------------------------------
-------------------
Option Explicit
Function AppActivateClass(lpClassName$)
     Dim hwnd As Long       'the application's window handle
     Dim dummy As Long      'Dummy variable
     'Get the Window Handl
     hwnd = FindWindow(lpClassName$, vbNullString)
     dummy = PostMessage(hwnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0)
     dummy = SetWindowPos(hwnd, HWND_TOP, 0&, 0&, 600, 300, SWP_SHOWWINDOW)
     AppActivateClass = hwnd
End Function
Private Sub Command1_Click()
   Dim x As Long
   'x = AppActivateClass("ConsoleWindowClass")
   x = AppActivateClass("notepad")
End Sub
'---------------------------------------------------------------------------
--------------------
4. Aggiungere un modulo standard con il seguente codice
'---------------------------------------------------------------------------
--------------------
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Public 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
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam
As Long) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MAXIMIZE = &HF030&
Public Const HWND_TOP = 0
Public Const SWP_SHOWWINDOW = &H40
'---------------------------------------------------------------------------
--------------------
Ringrazio tutti in anticipo.
Ciao da Emiliano

Il nome della classe di WordPad è WordPadClass.
Andrea


Grazie ma dove posso trovare questi nomi di classe?
Ho chiesto del programma WORDPAD perchè sicuramente conosciuto da tutti.
A me servirebbe quello di un programma che si chiama AutoCAD. Come posso
trovare il suo nome di classe.
Ciao e ancora grazie da Emiliano

 Ciao e ancora grazie da Emiliano
Ciao
Andrea

 Come posso trovare il suo nome di classe.
Utilizzando il programma Spy++ (Spyxx.exe) che è fornito insieme
a VisualStudio. Non so se sia disponibile anche col solo VB o
tramite il PlatformSDK:
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
Ciao.
-- 
BSD is for UNIX lovers -- linux is for Windows haters.

 --
Ciao ti ringrazio per la risposta ho trovato il Spy++ (Spyxx.exe), quindi
anche il nome di classe dell'applicazione AutoCAD.
Mi è rimasto però un dubbio, la macro che sto scrivendo dovrebbe funzionare
con tutte le versioni di AutoCAD commercializzate, e sono molte specie se si
considerano anche le varie lingue (italiano, inglese, francese ecc) con cui
è stato localizzato.
Non è che il nome di classe cambia da versione a versione? Se così fosse c'è
un modo per ovviare a questo problema?
Un'altra domanda: con questo sistema penso sia anche fattibile, una volta
resa in primo piano un'applicazione mandare in esecuzione anche un suo
comando specifico... Si può fare? Ad esempio ho una macro in EXCEL che rende
in primo piano WORD e poi gli fa scrivere a quest'ultimo nella prima riga
"QUESTA E' UNA PROVA"
E' la prima volta che mi trovo a risolvere un problema di questo tipo e
tenendo conto che non sono una cima con VB....potete darmi un mano?
Ancora grazie e ciao.
Emiliano

 riga"QUESTA E' UNA PROVA"
Probabilmente questo è stato fatto utilizzando COM ed il modello
ad oggetti di Word. Se non è una versione troppo vecchia anche
AutoCAD dovrebbe disporre di un modello ad oggetti utilizzabile
da VB via COM. Questo è il modo più semplice di "comandarlo".
Maggiori informazioni le puoi sicuramente trovare sulla sua
guida...



Ok, ti ringrazio proverň a mettere subito in pratica i tuoi consigli che
finora mi sono stati utilissimi.
Ciao da Emiliano