Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1240 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  lancer une application et remplir ses paramètres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

lancer une application et remplir ses paramètres

n°1393541
belsuncett​e
Posté le 23-06-2006 à 11:37:48  profilanswer
 

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.

mood
Publicité
Posté le 23-06-2006 à 11:37:48  profilanswer
 

n°1393569
DamienCYS
Posté le 23-06-2006 à 12:17:16  profilanswer
 

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

n°1394754
belsuncett​e
Posté le 26-06-2006 à 09:19:29  profilanswer
 

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....

n°1394898
wazzzuup10​00
Posté le 26-06-2006 à 12:30:21  profilanswer
 

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

n°1394922
belsuncett​e
Posté le 26-06-2006 à 13:37:37  profilanswer
 

ç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 ?

n°1394977
belsuncett​e
Posté le 26-06-2006 à 14:38:20  profilanswer
 

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 :)

n°1395025
belsuncett​e
Posté le 26-06-2006 à 15:27:39  profilanswer
 

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 ?

n°1395691
belsuncett​e
Posté le 27-06-2006 à 13:47:25  profilanswer
 

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 !

n°1397917
belsuncett​e
Posté le 30-06-2006 à 12:06:43  profilanswer
 

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 ?

n°1397979
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 13:29:09  profilanswer
 

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:

mood
Publicité
Posté le 30-06-2006 à 13:29:09  profilanswer
 

n°1398002
belsuncett​e
Posté le 30-06-2006 à 13:51:40  profilanswer
 

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

n°1398012
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 13:58:50  profilanswer
 

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:

n°1398022
belsuncett​e
Posté le 30-06-2006 à 14:05:28  profilanswer
 

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...

n°1398034
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 14:18:43  profilanswer
 

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

n°1398064
belsuncett​e
Posté le 30-06-2006 à 14:48:55  profilanswer
 

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

n°1398084
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 15:05:11  profilanswer
 

Oui je comprends ^_^

n°1399228
belsuncett​e
Posté le 03-07-2006 à 11:12:34  profilanswer
 

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.

n°1855520
cancan49
Posté le 26-02-2009 à 14:24:12  profilanswer
 

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!

n°1855901
cancan49
Posté le 27-02-2009 à 11:30:47  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  lancer une application et remplir ses paramètres

 

Sujets relatifs
application qui scanne un document et l'envoie par mailInsertion d'application dans un document html
[resolu]Remplir une listbox avec bdd accessRemplir inputs via une liste deroulante(select)
Comment remplir un DataGrid à partir d'un fichier XML en VB.Net ??Lancer gif au survol...
[ADO .NET][RESOLU] Remplir un DataGridView avec un Datareader ?[ASP.net] Debugger une application Web
navigateur internet au sein d'une application JavaOracle : valeur par defaut aux parametres proc stock
Plus de sujets relatifs à : lancer une application et remplir ses paramètres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR