Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    [C++] trovare HWND da HANDLE a processo o da Process Id

    mmm...mi sa che non devo spiegare niente.....non ho idee su come farlo....ho rovistato MSDN e Google ma niente da fare!

    Aiuto

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    ma se nn riesci a trovare API elenca le windows e controlla con il tuo id del processo.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Ecco

    Spiego meglio:
    Io ho due exe:
    il primo avvia 30 volte il primo
    il secondo crea una finestra ogni volta che si avvia.

    Il problema è che il secondo processo deve capire chi è il primo processo che è stato avviato.
    Quindi un processo avrà una variabile tipo questa: bSonoStatoAvviatoPerPrimo = TRUE, mentre gli altri 29 avranno questa bSonoStatoAvviatoPerPrimo = FALSE.

    Se io uso la FindWindow() non lavora bene perchè visto che i processi devono essere avviati uno dopo l'altro senza Sleep() accade questo:

    ("=>" significa "di conseguenza")

    Processo1): FindWindow() ritorna NULL => bSonoStatoAvviatoPerPrimo = TRUE (Tutto ok )
    Processo2): FindWindow() ritorna comunque NULL perchè il primo processo non ha ancora chiamato la CreateWindow()=> bSonoStatoAvviatoPerPrimo = TRUE (MALE! il processo avviato per primo è solo 1! )
    Processo3): Lo stesso per Processo2)

    /*Vari processi che si comportano come Processo2*/

    Finalmente): Processo1 chiama la CreateWindow(), ma ormai è troppo tardi....


    Se ci fosse quella API ho ideato un metodo abbastanza veloce è robusto.....però non la trovo ..... bhe adesso che avete capito il problema a fondo, come potrei fare?

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Puoi usare anche un'oggetto nominativo, cioe che ha un ID univoco all'interno del sistema, normalmente si usa un mutex, e se esiste significa che il processo è avviato.
    Attenzione la visibilita' dell'oggetto in alcuni casi puo' non funzionare adesso nn ricordo bene i casi specifici ma sono molto limitati.
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ok grazie

    Grazie....comunque sono riuscito a risolvere con un enumwindow() e altri stratagemmi che non sto qui a spiegare percè sono abbastanza comlpessi...comunqe prover la mutex
    Ciao

  6. #6
    Fidati che conviene il mutex; per il nome "unico", usa un GUID (o il nome del tuo programma seguito da un GUID).
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da MItaly
    Fidati che conviene il mutex; per il nome "unico", usa un GUID (o il nome del tuo programma seguito da un GUID).
    Concordo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    mmm

    mmm ho provato a leggere la documentazione.....e non ho capito niente!!!
    potreste spiegarmi un po' meglio perfavore....

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    ok:)

    avevo letto per sbaglio la documentazione del .NET....ebbene ora ho capito cos'è un mutex....e (anche se un po' meno cos'è un GUID).....

    Domanda1 come potrei usare un Mutex (che si rivelerebbe utile) visto che qui non si lavora con più trhead ma con più processi?

    Domanda2 come posso usare il GUID....che li mi sono sforzato di capire un possibile impiego ma non l'ho trovato

    ps evviva la faccia

  10. #10
    1. È lo stesso, i mutex dotati di nome sono oggetti globali.
    2. I GUID sono identificatori più o meno garantiti come universalmente unici (una bassissima probabilità di collisione c'è, ma è risibile); visto che il nome del mutex dovrà essere unico nel sistema, inserendo nel suo nome un GUID ti cauteli da eventuali conflitti con altre applicazioni, che potrebbero generarsi se due applicazioni cercassero di usare un mutex con lo stesso nome, senza sapere che, oltre a loro, ci sta accedendo un'altra applicazione. Per questo dunque ti conviene includere nel nome del mutex un GUID che puoi generare al volo da siti come questo.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.