Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ShellExecute() e hwnd
Forum - C/C++ - ShellExecute() e hwnd

Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 3:47
Sabato, 10/07/2010
si può ottenere l'hwnd di un exe aperto con ShellExecute?

di solito usavo GetForegroundWindow con SW_SHOWNORMAL però ora mi serve usare SW_HIDE quindi non mi funziona... idee?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:13
Sabato, 10/07/2010
Un processo può creare n finestre.

Non esiste quindi il concetto di hwnd associato ad un processo (non esiste il concetto di "finestra principale").

Dovrai creare il processo con la CreateProcess (e non con la ShellExecute) e poi "enumerare" tutte le finestre con la EnumWindows utilizzando le informazioni che questa API ti fornirà con la API GetWindowThreadProcessID per ottenere gli hwnd associati.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 14:19
Sabato, 10/07/2010
grazie per la dritta sull' hwnd :)

se creo con CreateProcess non posso usare sw_hide ed è lo stesso di niente....

http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%2 ...
ho provato con CREATE_NO_WINDOW ma è la stessa cosa che mettere null (non ho capito mil perchè ancora).
se devo crearla per poi nasconderla uso ShellExecute a sto punto...
usando ShellExecute non ci sono modi?


su internet parlano di questo modo che dovrebbe essere funzionante ( anche che non ho capito cosa fa):

Codice sorgente - presumibilmente C/C++

  1. //Start code
  2.  
  3. HWND hWnd;
  4. HWND winHandle;
  5.  
  6. hWnd = this->GetSafeHwnd();
  7.  
  8. HINSTANCE hInst = ::ShellExecute(hWnd, NULL, _T("http://www.experts-exchange.com"), NULL, NULL, SW_SHOWNORMAL);
  9.  
  10. if( winHandle = ::FindWindow(NULL, NULL) )
  11. {
  12.    do{
  13.       if( !::GetParent(winHandle) )
  14.                {
  15.                     if( (long)hInst == ::GetWindowLong(winHandle,                                                                              GWL_HINSTANCE) )
  16.                     break;
  17.                }
  18.       }while( winHandle = ::GetWindow(winHandle, GW_HWNDNEXT) );
  19. }
  20.  
  21. //End of code




a parte che quando compilo mi da errore su hWnd = this->GetSafeHwnd(); poi non riesco a farlo funzionare..

PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 14:19
Sabato, 10/07/2010
mi è partito il doppio post....
(potete eliminare questo)

Ultima modifica effettuata da NickoMaiden il 10/07/2010 alle 15:34
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:08
Sabato, 10/07/2010
Postato originariamente da NickoMaiden:

se creo con CreateProcess non posso usare sw_hide ed è lo stesso di niente....

Come no ... STARTUPINFO ... leggi meglio.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 15:40
Sabato, 10/07/2010
wShowWindow...non ti sfugge niente, come al solito eh??
grazie tante,ora mi metto un po e vedo quello che riesco a fare:D

PM Quote