Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB.NET] Interazione con programmi in esecuzione

    Avrei bisogno si sapere come si possa interagire dal mio eseguibile con un altro programma che si trovi già in esecuzione. In particolare supponiamo di avere un programma nel quale compare una casella che richiede che venga inserito del testo e che io voglia inserire del testo dal mio programma, come posso fare?

    Grazie.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  2. #2
    Studiarti un pò di API... sempre che la casella sia un controllo standard di Windows ed accetti SendMessage.

    Devi:

    -Trovare l' Handle del programma che contiene la casella (API FindWindow)
    -Enumerare le child (EnumChildWindows) e quindi trovare l' handle della casella
    -Mandare il testo a quell' handle con la API SendMessage

    Insomma, si può fare, ma ci devi perdere un attimino di tempo e di studio delle API.

  3. #3
    Grazie. Fatto. Il problema è che se la finestra in questione è minimizzata non funziona, come posso fare per mostrarla (massimizzandola o ripristinarla)? Si può risolvere il problema in altri modi?

    Io utilizzo l'API SendKeys()

    PS:
    L'API ShowWindow() dichiarata in questo modo:
    codice:
    Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Boolean
    Si schianta, Visual Studio mi comunica questo:

    Una chiamata alla funzione PInvoke 'MyPsw!MyPsw.CPsw::ShowWindow' 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.
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'API per .NET è

    codice:
    Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Integer, ByVal nCmdShow As Integer) As Integer
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Se non ricordo male gli hWnd dovrebbero essere dei System.IntPtr, visto che di fatto sono definiti come dei void *...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    Se non ricordo male gli hWnd dovrebbero essere dei System.IntPtr, visto che di fatto sono definiti come dei void *...
    Sì, ma ai fini degli "equilibri dello stack", come saprai, va bene Integer ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Sì, ma ai fini degli "equilibri dello stack", come saprai, va bene Integer ...
    Non vorrei sbagliarmi (è un po' che non lavoro in .NET), ma sui sistemi a 64 bit se non ricordo male Integer rimane a 32 bit, mentre IntPtr segue le dimensioni dei puntatori, per cui conservare quella dichiarazione se il programma viene portato a 64 bit rischia di sfasciare lo stack...
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da MItaly
    Non vorrei sbagliarmi (è un po' che non lavoro in .NET), ma sui sistemi a 64 bit se non ricordo male Integer rimane a 32 bit, mentre IntPtr segue le dimensioni dei puntatori, per cui conservare quella dichiarazione se il programma viene portato a 64 bit rischia di sfasciare lo stack...
    Sì, corretto ... io sottointendevo "nel contesto a 32 bit" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da MItaly
    Non vorrei sbagliarmi (è un po' che non lavoro in .NET), ma sui sistemi a 64 bit se non ricordo male Integer rimane a 32 bit, mentre IntPtr segue le dimensioni dei puntatori, per cui conservare quella dichiarazione se il programma viene portato a 64 bit rischia di sfasciare lo stack...
    Ah... il mio sistema operativo è a 64 bit, potrebbe essere questo il problema?

    Si.. era questo il problema, grazie
    Fracty - The Fractal Generator



    If you cannot choose a concise name that expresses what the method does, it is possible that your method is attempting to perform too many diverse tasks.

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