lancer une application et remplir ses paramètres

lancer une application et remplir ses paramètres - VB/VBA/VBS - Programmation

Marsh Posté le 23-06-2006 à 11:37:48    

Hello ! je cherche à lancer VNC Viewer depuis VB, en indiquant depuis VB l'IP à laquelle je veux me connecter et le mot de passe.
En gros, je lance VNC avec cette commande (pour le moment) :
Shell "C:\Program Files\ULTRAVNC\vncviewer.exe", vbNormalFocus
 
et je voudrais utiliser des infos que j'ai dans ma form VB pour que la connexion se fasse automatiquement : l'IP et le mot de passe sont chargés tout seuls. L'utilisateur n'a alors qu'à demander la connexion pour le poste qu'il veut, il se retrouve sans rien faire d'autre devant la fenêtre VNC ouverte sur le poste distant.
 
Le lancement du programme ne me pose pas de problème, mais je ne sais pas comment remplir le champ adresse de VNC, puis valider, puis remplir le champ mot de passe, puis valider....
Quelqu'un saurait-il ?  
Merci d'avance, je n'ai pas internet ce week end, mais je réponds lundi sans faute à tout message.

Reply

Marsh Posté le 23-06-2006 à 11:37:48   

Reply

Marsh Posté le 23-06-2006 à 12:17:16    

slt,
utilise la fonction sendkeys, à peu près comme ca je pense :
Application.SendKeys(Identifiant &  "{TAB}" & MotDePasse & "{ENTER}" )
 
Identifiant et MotDePasse étant des variables que tu aurs renseignées avant

Reply

Marsh Posté le 26-06-2006 à 09:19:29    

Merci, je fais des tentatives... Le problème est que quand l'application (VNC) se lance, il y a 3 fenêtres. La première contient l'adresse destination, donc pas de pb pour la remplir et valider. Mais ensuite j'aimerais pouvoir identifier la fenêtre à remplir parce que pour l'instant ça bloque un peu. Je voudrais remplir celle avec le mot de passe mais c'est une autre qui a la main et il n'y a pas de commande qui permet d'en sortir, on doit cliquer dans l'autre pour y accéder. Or depuis VB ça me paraît difficile....

Reply

Marsh Posté le 26-06-2006 à 12:30:21    

essaye comme ca ca pourait fonctionner tu peux utiliser l'api SetFocus de cette facon...
 
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Const GW_HWNDNEXT = 2
Dim mWnd As Long
Function InstanceToWnd(ByVal target_pid As Long) As Long
    Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
    'Find the first window
    test_hwnd = FindWindow(ByVal 0&, ByVal 0& )
    Do While test_hwnd <> 0
        'Check if the window isn't a child
        If GetParent(test_hwnd) = 0 Then
            'Get the window's thread
            test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
            If test_pid = target_pid Then
                InstanceToWnd = test_hwnd
                Exit Do
            End If
        End If
        'retrieve the next window
        test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
    Loop
End Function
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim Pid As Long
    'Lock the window update
    LockWindowUpdate GetDesktopWindow
    'Execute notepad.Exe
    Pid = Shell("c:\windows\notepad.exe", vbNormalFocus)
    If Pid = 0 Then MsgBox "Error starting the app"
    'retrieve the handle of the window
    mWnd = InstanceToWnd(Pid)
    'Set the notepad's parent
    SetParent mWnd, Me.hwnd
    'Put the focus on notepad
    Putfocus mWnd
    'Unlock windowupdate
    LockWindowUpdate False
End Sub
Private Sub Form_Unload(Cancel As Integer)
    'Unload notepad
    DestroyWindow mWnd
    'End this program
    TerminateProcess GetCurrentProcess, 0
End Sub

Reply

Marsh Posté le 26-06-2006 à 13:37:37    

ça marche bien pour lancer l'appli, mais du coup je ne peux plus réduire la fenêtre VB puisque le .exe lancé est à l'intérieur de la fenêtre VB? Et sinon ensuite il faudrait que j'utilise SendMessage pour envoyer les infos, mais je ne comprends pas pourquoi le 2e argument de cette fonction est un Long et non pas une String contenant le message ?

Reply

Marsh Posté le 26-06-2006 à 14:38:20    

Finalement je m'en sors avec SendKeys et après avoir a peu près compris le code fourni. Merci aux 2 personnes qui ont répondu, donc :)

Reply

Marsh Posté le 26-06-2006 à 15:27:39    

Toujours des problèmes...Voila ou j'en suis :
    Dim Pid As Long
    Dim test_hwnd As Long
     
    'Lock the window update
    LockWindowUpdate GetDesktopWindow
    'Execute vnc.Exe
    Pid = Shell(vnc, vbNormalFocus)
    If Pid = 0 Then MsgBox "Erreur au cours du lancement"
    'retrieve the handle of the window
    mWnd = InstanceToWnd(Pid)
    'Set the parent
    SetParent mWnd, Page.hwnd
    'Put the focus on vnc
    Putfocus mWnd
     
    SendKeys Adresse & "{ENTER}", True
     
    'Unlock windowupdate
    LockWindowUpdate False
    test_hwnd = FindWindowS(vbNullString, "VNC Authentication" )
    SetParent mWnd, test_hwnd
    'Put the focus on vnc
    Putfocus mWnd
    Page.WindowState = vbMinimized
    SendKeys MDP & "{ENTER}", True
 
en ayant déclaré ce qui est dans le code plus haut. Et ça me dit que ça rate....alors qu'avant ça connectait, pas toujours, mais des fois....
Y a-t-il une erreur la-dedans ou est ce que ça vient forcément de la récupération de mes paramètres ?

Reply

Marsh Posté le 27-06-2006 à 13:47:25    

voila ou j'en suis maintenant : le code m'amène à la bonne fenêtre mais je vois pas pourquoi elle se remplit pas...
 
    Dim Pid As Long
    Dim test_hwnd As Long
     
'Lock the window update
    LockWindowUpdate GetDesktopWindow
'Execute vnc.Exe
    Pid = Shell(vnc, vbNormalFocus)
    If Pid = 0 Then MsgBox "Erreur au cours du lancement"
'retrieve the handle of the window
    mWnd = InstanceToWnd(Pid)
'Set the parent
    SetParent mWnd, Page.hwnd
'Put the focus on vnc
    Putfocus mWnd
    SendKeys Adresse & "{ENTER}", True
     
'Unlock windowupdate
    LockWindowUpdate False
    test_hwnd = FindWindowS(vbNullString, "VNC Authentication" )
    SetParent test_hwnd, mWnd
'Put the focus on vnc
 
    Putfocus test_hwnd
    SetForegroundWindow test_hwnd
     
    SendKeys MDP & "{ENTER}"
 
le dernier SendKeys n'est pas pris en compte, mais j'arrive bien à ce que la fenetre voulue ait le focus. Mystère, donc....Et puis des fois ça marche complètement, mais la plupart du temps, non. Je me demandais si ça n'est pas un problème de temps d'exécution, alors j'ai essayé de mettre un sleep avant la dernière ligne, mais pas vraiment d'amélioration...help !

Reply

Marsh Posté le 30-06-2006 à 12:06:43    

Maintenant je suis obligée de mettre plein de temps de pause pour que ça marche, mais du coup ça n'est pas stable, car les temps dépendent de l'encombrement et du poste sur lequel on est..... Une solution miracle ?

Reply

Marsh Posté le 30-06-2006 à 13:29:09    

Bonjour,
 
J'ai rencontré lê même genre de problème de correspondance de temps d'exécution au cours de mes développements... La seule solution adéquate que j'ai trouvée était de communiquer à mon application que l'exécution du traitement de l'autre appli était finie. Pour ce faire j'ai dû ordonner à l'autre appli, VNC dans ton cas si j'ai bien compris, de créer un fichier (.txt ou peu importe) et de récupérer cet évènement par le biais du "FileSystemWatcher" de VB.NET (si tu utilise ce langage bien évidemment).
Voilà, j'espère que ceci pourra t'aider.
Salutations :jap:

Reply

Marsh Posté le 30-06-2006 à 13:29:09   

Reply

Marsh Posté le 30-06-2006 à 13:51:40    

Moi j'utilise VB6...il peut y avoir une correspondance, mais en fait, je ne sais pas si c'est exactement la même situation : pour moi le pb se pose au lancement de VNC, il y a plusieurs fenêtres et plusieurs champs à remplir et selon l'heure, l'humeur du PC, le PC lui même, etc....ça risque de ne pas être des temps "standards". J'ai des pbs aussi quand VNC s'arrête pour erreur quelconque : plantage, faut le fermer sauvagement...peut être que ce que tu me proposes correspondrait plus à résoudre ce cas la, mais bon, pour l'instant j'aimerais déjà que le lancement se passe bien !!!!! :D

Reply

Marsh Posté le 30-06-2006 à 13:58:50    

Ah, dans ce cas là je ne pense pas être capable de t'aider plus que celà. En effet, je n'ai jamais utilisé VB6 (même si j'en ai vu pas mal de lignes de code), je ne saurai donc pas t'éclairer sur les méthodes à utiliser.
Sinon pour tes problèmes de plantages, ça m'étonnerai que VB6 utilise un système d'exceptions, donc pour moi le seul moyen de traiter celà est de tester chacun de tes champs... fastidieu certes mais je ne vois rien d'autre.
Désolé de ne pas pouvoir t'en dire plus pour l'instant, bon courage
:jap:

Reply

Marsh Posté le 30-06-2006 à 14:05:28    

C'est pas grave merci quand meme ! La on essaie de voir si on pourrait pas utiliser un autre logiciel qui aurait les mêmes possibilités et pas les problèmes au lancement, mais VNC semble être le plus approprié, un des seuls gratuits, alors....tant pis ! pour l'instant, je suis dans une impasse...

Reply

Marsh Posté le 30-06-2006 à 14:18:43    

Et si tu essayais de changer de langage de programmation ? xD

Reply

Marsh Posté le 30-06-2006 à 14:48:55    

Oui mais non la je viens de faire 3 semaines pour faire une toute jolie application qui marche tout bien (sauf ça) alors, non, vraiment pas !!!! :D

Reply

Marsh Posté le 30-06-2006 à 15:05:11    

Oui je comprends ^_^

Reply

Marsh Posté le 03-07-2006 à 11:12:34    

Problème résolu (je ne sais pas comment on change le sujet du message) : pour information si quelqu'un est confronté à ce problème, je l'ai résolu (dans le cas de VNC) en mettant les paramètres directement dans la commande shell lancée.
Peut être n'est-ce pas possible pour tous les exécutables, mais piste à explorer. Chez moi ça donne :
 
  Shell vnc & " -nostatus -connect " & Adresse & " -password " & MDP, vbNormalFocus
 
 
Et voila...une ligne, une semaine de perdue...merci à ceux qui ont répondu à mes messages ! J'espère que ça aidera de futures questions.

Reply

Marsh Posté le 26-02-2009 à 14:24:12    

Bonjour,
Je remonte ce sujet car j'ai un peu le même problème.
 
j'ai fait ça:
    Dim stAppName As String
     Dim ident As String
    Dim mdp As String
   
    ident = Texte13
    'mdp = Texte15
 
    stAppName = "C:\Program Files\RealVNC\VNC4\vncviewer.exe "
     Shell stAppName & ident, vbNormalFocus

 
Mon problème vient que je ne sais pas du tout ou mettre mon mot de passe.
Merci d'avance!

Reply

Marsh Posté le 27-02-2009 à 11:30:47    

un petit up!!
Aidez moi s'il vous plaît car il me le faut vraiment.
Je le demande à votre âme de dévellopeur.   ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed