Topmost pour tous ?

Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008
- 9 mars 2007 à 07:08
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
- 12 mars 2007 à 20:09
Bonjour à tous.
Est il possible d'executer un programme non vb 2005 avec un appli vb 2005 et avec l'option "Topmost" ?
Pour lancer des prog j'utilise:

Imports System.IO
                Public Class Form1
                Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                Dim chemin As String = "setup.exe"
                Dim process As New Process
                For Each disque As String In Directory.GetLogicalDrives()
                Dim D As New DriveInfo(disque)
                If D.DriveType = DriveType.CDRom Then
                Try
                If My.Computer.FileSystem.FileExists(disque + chemin) = True Then
                process.StartInfo.FileName = disque + chemin
                process.Start()
                End If
                Catch ex As Exception
                MsgBox(ex.Message)
                End Try
                End If
                Next
                End Sub
                End Class

Merci d'avance.

16 réponses

cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
9 mars 2007 à 11:58
Salut,

Si tu veux que toute tes form est la propriété TopMost, tu as deux possibilités :

1) Pour chaque form, tu vas dans les propriétés de ta form, tu mets TopMost à True et tu fais cà pour chaque form

2) Ou alors, tu fais dans la procédure Form_Load de chaque form
   
       Nom_de_ta_form.TopMost = True

@+
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

9 mars 2007 à 13:12
Ok mais ce n'est pas ce que je veus:
Avec ma form, j'ouvre un programme du genre Wmplayer ou IE, et je voudrais que ce programme s'ouvre au premier plan et y reste !(l'equivalent du topmost pour vb 2005)
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
9 mars 2007 à 15:03
Salut,

Il n'est malheureusement pas possible de laisser IE par exemple en pleine écran mais il y a toujours un moyen de contourner le système pour arriver à tes fins.

Ce que tu peux faire c'est empêcher que Internet Explorer se lance et de créer toi même une form pour remplacer IE (petit indice : il faut utiliser le control WebBrowser qui permet d'afficher des pages web comme sur IE). Et là, la form tu peux lui mettre sa propriété TopMost à True.

Pour empêcher Internet Explorer de se lancer, Ajouter un Timer, règle le pour un intervalle 100 ms et mets le code qui suit dans la procédure Timer_Tick :

Dim prc As System.Diagnostics.Process() = Process.GetProcesses() ' Liste tous les processus
        For i As Integer = 0 To prc.Length - 1 ' Parcoure tous les processus trouvés
            If prc(i).ProcessName = "iexplore" Then  ' Si un processus s'appelle "iexplore" (Internet Explorer)
                prc(i).Kill() ' On tue le processus
            End If
        Next, ----

(Coloration syntaxique automatique par Kenji)

Pour le WebBrowser :

1) Tu rajoutes un WebBrowser, une TextBox, un Bouton dans ta form

2) Tu rajoutes la procédure pour détecter un clic sur le Bouton (en double cliquant dessus)
        et tu rajoutes ce code :
         
WebBrowser1.Url() = New Uri("http://" + TextBox1.Text)

          exemple : Tu mets dans ta TextBox : www.voila.fr et tu cliques sur le bouton et dans ton WebBrowser tu as la page de Voila qui apparait.

@+ Si tu as des soucis, n'hésites pas à laisser un message
0
ad vitam aeternam
Messages postés
17
Date d'inscription
jeudi 19 mai 2005
Statut
Membre
Dernière intervention
10 mars 2008

9 mars 2007 à 17:18
Moi j'avais compris autre chose; tu voudrais (si je comprends donc bien) que internet explorer ce lance depuis ta form.
En vb6 par exemple tu lancerais internet explorer avec un shell puis tu utiliserais l'API SetWindowsPos
Tu déclare ta fonction puis dans ton programme après le shell tu mets:
SetWindowPos(iexplore.hwnd,HWND_TOPMOST, x,y,cx,cy, 0)
iexplore représente ici le programme internet explorer dont tu doit connaître le handle (hwnd), x y cx cy sont les diverses caractéristiques de positions données si dessous en annexe.

Mais alors, le plus grose problème reste de trouver le handle d'internet explorer: pas de problème avec l'API GetWindowThreadProcessId tu déclares:
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Puis tu utilises la fonction
explorer_thread=GetWindowThreadProcessId(iexplorer, test_pid)
qui te retournera dans explorer_thread le thread de internet explorer.

Désolé si j'ai mal compris ce que tu demandais!

ad vitam aeternam

annexe:

Fonction SetWindowPos

Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" ( _
                 ByVal hwnd As Long, _
                 ByVal hWndInsertAfter As Long, _
                 ByVal x As Long, _
                 ByVal y As Long, _
                 ByVal cx As Long, _
                 ByVal cy As Long, _
                 ByVal wFlags As Long)As Long
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui






Description :

Cette API permet d'afficher la fenêtre où bon vous semble sur
l'écran en exécutant une méthode du type move avec la possibilité de laisser la feuille toujours au premier plan d'affichage.
hwnd est le handle de la feuille,
hWndInsertAfter est une des contantes définies ci-dessous,
X, Y, cx et cy sont respectivement les coordonnées et les dimensions de l'image.
wFlags est une combinaison de constantes ci-dessous.




<center>
Constante,
Valeur,
Définition,

----

HWND_BOTTOM,
1,
Place la fenêtre en dessous de toutes les autres.,

----

HWND_NOTOPMOST,
-2,
Place la fenêtre au dessus de toutes les fenêtres qui n'ont pas l'attribut "TOPMOST" (et en dessous de ces dernières).,

----

HWND_TOP,
0,
Place la fenêtre au premier niveau.,

----

HWND_TOPMOST,
-1,
Place la fenêtre au premier niveau, celle-ci conserve cet attribut même lorsqu'elle perd le focus.,

----

SWP_HIDEWINDOW,
&H80,
Cache la fenêtre.,

----

SWP_NOACTIVATE,
&H10,
N'active pas la fenêtre.,

----

SWP_NOMOVE,
&H2,
Garde la même position (les paramètres X et Y ne sont pas pris en compte).,

----

SWP_NOSIZE,
&H1,
Conserve les dimensions courantes (paramètres cx et cy pas pris en compte).,

----

SWP_SHOWWINDOW,
&H40,
Affiche la fenêtre.

</center>






 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

9 mars 2007 à 17:53
En fait ce n'est pas ça du tout. Excusez moi pour ma maladresse en explication. Je ne veut pas d'internet, mais c'était juste un exemple de logiciel, comme windows media player ! Le prog que je veu mettre au premier plan n'est pas programé en vb et doit etre lancé à partir de ma form. Mais, je croyais que l'on pouvait lancer des applications depuis une form avec des conditions comme l'affichage en plein ecran !
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
9 mars 2007 à 18:08
Salut,

Est ce que tu peux me dire quel est le nom du processus de ton programme ? Pour le savoir, faire [CTRL]+[ALT]+[Suppr]
puis vas dans l'onglet processus. J'ai peut être trouvé quelue chose ?

@+
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

9 mars 2007 à 18:12
C'est la visionneuse dont je t'ai deja parlé. Cependant, grace à la fonction FileSystemWatcher, je ne pense plus avoir besoin de cette fonction. Au lieu d'interdire l'utilisateur en bloquant ses fenetres, j'ejecterais le cd en verifiant la date d'acces au dossiers du cd !
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
9 mars 2007 à 18:49
Ok !

Mais faut savoir que même si un programme accède à ton dossier il modifie la date d'accès par exemple : il suffit de lit un fichier dans le dossier la date d'accès sera modifié et le CD va se faire éjecter. Je sais pas si c'est une bonne solution.
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

11 mars 2007 à 20:46
Ah ouais j'y avait pas pensé ! Merci bien.
Je vais voir ce que je peux faire. Plutot surveiller si le dossier n'est pas copié alors si je comprends bien ?
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
12 mars 2007 à 00:12
Bon, j'ai fait un petit programme pour toi. j'ai reussi à détecter la copie d'un dossier ou fichier et d'éjecter le CD mais en revanche ca ne fonctionne que si le dossier à protéger est sur le disque dur car nircmd n'éjecte pas le cd s'il est en cours d'utilisation (la copie).

Donc ca ne fonctionne pas.

En revanche, j'ai reussi à trouver un moyen d'empêcher que l'utilisateur se promène sur ton CD. En effet, grâce à nircmd je peux fermer toutes les fenêtres d'explorations (Poste de travail, Ma musique, Mes documents, ...)

Tu pourras essayer si tu arrives à accéder à ton CD pendant l'exécution de mon programme alors Bravo mais il faudra que tu me dise comment tu as fait

Tu peux le télécharger à cette adresse : http://www.vbfrance.com/dlzip.zipnix?ID=41826&accept=1

@+

PS : Tiens moi au courant ! Merci
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

12 mars 2007 à 07:17
Salut.
Merci bien. J'ai testé et c 'est vraiment bien. Juste, tu a oublié de mettre les deux nircmd dans le dossier ressources (je les ai rajoutés) !
J'ai aussi un autre probleme: J'ai essayé de comprendre ton code, et je ne vois pas comment tu fais pour ejecter le cd !!! De plus, quand le prog est lancé, je vais dans le post de travail. La fenetre se ferme automatiquement, mais il n'y a pas d'ejection de CD ! Cependant nircmd est bien sur le DD de windows, j'ai vérifié !
A oui aussi si avant de lancer ton prog, on crée un raccourci vers le lecteur CD, et le prog ne le voit pas et on peut se balader sur le CD !
Est-ce que c'est ça qui ferme le poste de travail ???
Shell("C:\nircmd.exe win close class ""CabinetWClass""")
Merci
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
12 mars 2007 à 14:41
Salut,

Voici le programme pour éjecter le cd si une copie est détectée dans le dossier à surveiller :

1) Il faut que chemin d'accès du dossier soit dans la TextBox (au lieu de le taper à la main j'ai rajouté un FolderBrowserDialog pour choisir un dossier) Plus pratique !!!

2) Je n'ai pas encore compris pourquoi mais le CD n'est pas éjecter si tu choisis un dossier à surveiller sur celui-ci
    mais il éjecte bien le CD si le dossier à surveiller est sur le disque dur

L'autre programme pour verrouiller l'accès au disque, il n'y avait pas
nircmd car quand on met un une source sur vbfrance, il enlève tous les
.exe donc nircmd est passé à la trappe.


Cette fois-ci, le programme n'est pas sur vbfrance, donc nircmd sera présent.
http://www.freewebs.com/visual-basic/Ejecter%20le%20cd.zip
PS : Voici le lien pour télécharger le programme : http://www.freewebs.com/visual-basic/Ejecter%20le%20cd.zip

Si tu arrives à éjecter ton CD même si le dossier surveillé est sur celui-ci fais moi savoir comment tu as fais ! Merci

@+
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
12 mars 2007 à 14:43
Pour enregistrer la source faire un clic droit sur le lien puis Enregistrer la cible sous.

@+
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

12 mars 2007 à 20:01
Merci je te tiens au courant!
0
Marneus73
Messages postés
344
Date d'inscription
mercredi 24 janvier 2007
Statut
Membre
Dernière intervention
27 octobre 2008

12 mars 2007 à 20:03
Et au lieu d'ejecter le CD ne pourrait on pas fermer l'explorateur, ou toute autre fenetre qui affiche le contenu du CD ???
0
cs_fauve
Messages postés
661
Date d'inscription
vendredi 2 décembre 2005
Statut
Membre
Dernière intervention
23 mars 2011
8
12 mars 2007 à 20:09
Oui c'est faisable, tu mets Shell("C:\nircmd.exe win close class ""CabinetWClass""") mais en revanche il faut l'exécuter régulièrement grâce à un timer mais le souci c'est que là ton programme monopolise beaucoups de ressources. Ou alors, il faudrait détecter qu'une fenêtre de l'explorateur Windows a été ouverte et tu lances la commande Shell ci-dessus. Crée un nouveau topic pour savoir s'il possible de détecter l'ouverture de l'explorateur Windows en vb.net (Tu peux mettre le sujet en bleu pour le topic).
0