Windows media player

ray76

Nouveau membre
Bonsoir a toutes et tous, forum bonsoir

(1) Je souhaiterai svp positionner a l'écran windows média player dès l'ouverture a un endroit de mon choix, car je voudrai qu'il s'ouvre toujours au mème endroit question de présentation sur ma page

(2) et un petit code pour arreter et effacer une image dans une forme

PS: sous seven 32 bits

Merci a vous et de votre temps combien précieux

Bonne soirée et merci d'avance

Raymond


[cpp]Option Explicit

'*** LANCE UN FILM SUR DOUBLE CLIC DANS LA LISTE COLONNE A
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Chemin As String: Dim Fichier As String: Dim Shp As Shape

'===============
Dim s As Shape
'===============

If Not Intersect(Target, Range("A4:A" & [A1800].End(xlUp).Row)) Is Nothing Then

'===========================================
For Each s In ActiveSheet.Shapes
If s.Type = msoPicture Then s.Delete
Next s
'===========================================

Cancel = True
Chemin = "E:\Videos\"
Fichier = "E:\Affiche\" & Target.Value & ".jpg"

End If
'*** APPEL DU FILM CHOISI DANS LA COLONNE A
Shell """C:\Program Files\Windows Media Player\wmplayer.exe"" """ & Chemin & Target & ".avi", vbMaximizedFocus

'*** APPEL DE L'IMAGE CORRESPONDANT AU FILM (A) (B) (C) (D)
Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 900, 50, 200, 240)

End Sub[/cpp]
 

ray76

Nouveau membre
Bonsoir a toutes et tous, forum


Je lance Windows Media Player a partir d'excel 2007 sous seven dans la feuil1 (baptiser)(Listing)

Windows media player lit bien la vidéo souhaiter et svp je souhaiterai savoir comment faire pour


(1) Windows Media Player tourne Ok

(2) je l'arrète en cliquant sur la petite croix et Windows Media Player s'arrète

(3) comment tester l'arrèt afin de faire une action quand il est arreter

(4) par ex: If si Windows Media Player arreter alors message msgbox "Windows Media Player est arreter" sinon message msgbox "Windows Media Player en cours de lecture"

Par exemple bien sur

merci de votre savoir et de votre temps

Raymond

 

zeb

Modérateur
Salut,

Tu tiens vraiment à utiliser la commande Shell ?

Alors il va falloir récupérer l'identifiant retourné par cette fonction, puis le handle associé au processus grâce à la fonction OpenProcess (API).

Dans une boucle dans laquelle tu n'oublieras pas de mettre un DoEvents, tu scruteras le statut de ton processus par son handle grâce à la fonction GetExitCodeProcess (API).

A l'issue, ne pas oublier de libérer le handle.

--------------------

Sinon, voici les recommandations de Microsoft sur l'art de suivre un processus en VB : http://support.microsoft.com/kb/129796/EN-US/ (A lire en anglais, la traduction automatique est une trahison).
 

zeb

Modérateur
Pour positionner une fenêtre, c'est avec la fonction SetWindowPos (API) qu'il faut jouer.
 

ray76

Nouveau membre
Bonsoir Zed, forum bonsoir

merci pour ta réponse c'est gentil a toi

Bon effectivement je vais devoir laisser tomber je ne suis pas assez balaise en vba pour faire ce que je voulais.

en plus Doc en anglais sinon avec un exemple je devrais peut etre m'en sortir

Réponse a ta question >>> Tu tiens vraiment à utiliser la commande Shell ?

NON si on peut faire plus simple te cache pas que ca m'arrangerai bien

Dit moi svp si tu peux m'arranger le coup ou pas

En tout cas de nouveau merci pour ton temps et pour les recherches

PS: je baisse pas les bras j'attends ta réponse svp

Bonne soirée
cordialement Raymond


 

zeb

Modérateur
Bonsoir,

Anglais ou pas, pourquoi ne recopies-tu pas le code de 'Crosoft ?
Il te suffit de remplacer l'appel à notepad.exe par wmplayer.exe !
 

ray76

Nouveau membre
Bonjour tous le monde, forum bonjour

Zed merci merci et merci, ca fonctionne j'ai pu exploiter la valeur renvoyer par le code qui dit selon l'ouverture ou la fermeture de windows media player a savoir Retval =( 0 ou -1 ).

Pour ca déja un grand merci a toi

PAR contre je ne vais pas ouvrir un autre post pour ma question a propos de comment positionner ou forcer Windows média player a se fixer sur l'écran a l'endroit précis de mon choix.

Si tu as une idée sur la question, je suis preneur bien sur.

Ici a Rouen le soleil est la enfin, je te souhaite une agréable journée et encore merci

Cordialement Raymond

PS: j'ai bien fait de ne pas baisser les bras hihihihihi bye






 

zeb

Modérateur

M'enfin, là encore je t'ai répondu.
Cherche un peu, quand même. Reviens avec un bout de code, on l'étudiera.

Du soleil en Normandie ? Ça va pas durer ! :o (*)
La bonne journée ;)
______________
(*) Quand tu verras d'où je suis :sarcastic: .... ;)
 

ray76

Nouveau membre
Salut Zeb

Bon j'ai chercher, chercher, chercher tu peux me croire, mais je ne suis pas un as du vba mais ca me plait bien c'est deja ca, mais bien sur je cherche mal.

le bout de code tu l'as, regarde svp la ligne 25 lance windows média player, c'est la juste avant que je souhaiterai placer les codes pour positionner a l'endroit voulu.

ca fait 15 jours que je cherche rien trouver sur ca mais rien, j'ai vu les diverses commandes c'est tout, mais peut etre il s'auto gére ???

voila tu sais tout merci et sans doute a plus tard, je retourne fouiller on sait jamais

Bonne journée

Raymond
 

zeb

Modérateur
Oh, lala ! Tu n'expliques pas tout. Tu réutilises ton code ou es-tu allé récupérer celui de MS ?

Bon, j'ai regardé un peu comment faire. La vache, c'est sioux !
Je regarde un peu mieux...
 

ray76

Nouveau membre
Re
j'ai fait comme tu m'a dit j'ai pris le code je l'ai mis dans un module puis j'ai mis windows media player a la place de notepad
puis j'ai tester msgbox retval qui m'a renseigner 0 ou -1 ca c'est pour la première partie qui le but etait de récuperer une info quand WMP est arrèter pour faire une action ca c'est régler grace a toi et le code trouver.

Maintenant le but c'est de dire a WMP de se postionner a chaque ouverture que je sollicite qu'il aille la ou je veux, car actuellement il s'ouvre un peu comme il veut d'ou ma pensée qu'il s'auto gère.

Voila Monsieur zeb, je déconne merci a toi de voir pour mon souci et de m'aider c'est vraiment sympa, je recommanderai le site.

je continue a chercher égaement si quelque chose je t'informe immédiatement pour que tu ne perde pas ton temps.

au plaisir de te relire toujours beau a Rouen hihihi

Bye Raymond
 

zeb

Modérateur
T'emmerde pas trop à chercher comment faire, vu que qu'en fait, c'est très compliqué. Je te donne des éléments de solution dès que possible (là, j'ai des problèmes au boulot - enfin, c'est le boulot qui a des problèmes, et moi, je vais les résoudre :sol: )
 

ray76

Nouveau membre
Bonsoir a tous, Zed

j'ai continuer de chercher une partie de l'après midi, hélas j'ai rien trouver pour mon soucis.

j'espère que tes problemes de boulot sont régler, t'embete pas plus longtemps
je te souhaite la bonne soirée.

j'en remets un coup demain

bye bye Raymond
 

zeb

Modérateur
Au prochain qui m'appelle Zed, c'est direct la décharge de chevrotine dans les bijoux de famille, puis j'appelle deux experts complétement défoncés au crack qui vont travailler nos deux copains avec une paire de pince, un chalumeau et un fer à souder. Est-ce que tu m'as entendu espèce de porc ? Je suis très loin d'en avoir fini avec toi, je vais te la jouer à la flamme bien moyenâgeuse !

--------------------------

Bon, alors pour en revenir à nos moutons.
Il ne peut pas y avoir de lien direct entre un identifiant de processus et une fun même processus pouvant créer plusieurs fenêtres. Au contraire, une même fenêtre n'a été créée que par un unique processus

Process (0,n) <---- (1) Window

Donc, on va ruser. On va parcourir toutes les fenêtres ouvertes et on va chercher celle dont le processus créateur nous intéresse.

Pour énumérer toutes les fenêtres, on utilise EnumWindows de user32.dll.
C'est un peu compliqué. Cette API appelle en boucle une fonction définie par l'utilisateur, dite fonction de rappel, en donnant en paramètre le handle de chaque fenêtre.
Dans notre fonction, on récupère à partir de ce handle, l'identifiant du processus (plus exactement du thread du processus, mais je crois que tu t'en tamponne le coquillard). Comme on connaît par ailleurs cette valeur qui nous est renvoyé par CreateProcess, on a notre solution.

Code:
Public Function ExecCmd(cmdline As String)
    Dim proc As PROCESS_INFORMATION
    Dim start As STARTUPINFO
    
    start.cb = Len(start)
    ret& = CreateProcessA(vbNullString, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, vbNullString, start, proc)

    ' // Enumération des fenêtres. On passe l'identifiant de thread à la fonction de rappel.
    EnumWindows AddressOf EnumWindowsProc, proc.dwThreadID

    ret& = WaitForSingleObject(proc.hProcess, INFINITE)
    Call GetExitCodeProcess(proc.hProcess, ret&)
    Call CloseHandle(proc.hThread)
    Call CloseHandle(proc.hProcess)
    ExecCmd = ret&
End Function

Voici donc la fonction de rappel :
Code:
Private Function EnumWindowsProc(ByVal Hwnd As Long, ByVal lParam As Long) As Long
    Dim thread_id As Long
    Const x = 100
    Const y = 100
    
    ' // Identifiant du thread en fonction du handle de sa fenêtre
    thread_id = GetWindowThreadProcessId(Hwnd, 0)
    ' // Est-ce notre fenêtre ?
    If thread_id = lParam Then
        ' // Oui, on bouge !
        SetWindowPos Hwnd, 0, x, y, 0, 0, SWP_NOSIZE
        ' // Pas la peine de continuer, on a déjà trouvé.
        EnumWindowsProc = 0
    End If
    ' // On continue.
    EnumWindowsProc = 1
End Function

--------------------------

Comment ça, ça ne marche pas !?
Bien il est possible qu'entre le moment où l'on crée le processus de lancement (CreateProcess, ligne 6) et la recherche de sa fenêtre (EnumWindows, ligne 9), la fenêtre n'a pas le temps d'apparaître. Il faudrait perdre un peu de temps entre ces deux lignes.

Comment faire ?
Utiliser la fonction Sleep (API).

--------------------------

Bon, maintenant, il te reste du boulot. Il faut que tu trouves les déclaration pour VB des fonctions EnumWindows, GetWindowThreadProcessId, SetWindowPos et Sleep et de la constante SWP_NOSIZE.
 

ray76

Nouveau membre
Salut heu pas Zed, forum

bon on se lache sur le site, merci d'avoir répondu mais la tu es trop fort pour moi

c'est pas que je me fout du code au contraire mais j'ai personne pour m'expliquer

et je n'en suis pas a ce stade de programmation malgré que j'y passe beaucoup de temps, mais pas facile d'apprendre seul.

Bon si j'ai bien tout compris on lance WMP on repère si il est actif et a l'écran
si oui auquel cas on dit Bonjour et va te mettre ou j'ai dit sinon prends ta petite pelle et va jouer au sable.

maintenant c'est de savoir comment lui parler pour qu'il fasse ce que l'on lui dit c'est a dire d'aller a l'endroit de mon choix.

pour etre franc je ne sait pas faire ca, je sais par ailleurs que les apis c'est pas facile mais par contre puissant

dit moi svp ce que tu en penses je continue de regarder pour >>> Bon, maintenant, il te reste du boulot. Il faut que tu trouves les déclarations pour VB des fonctions EnumWindows, GetWindowThreadProcessId, SetWindowPos et Sleep et de la constante SWP_NOSIZE.

voila te laisse la patronne va pas tarder et un petit boulot m'attends, j'avais promis, j'y retourne sitot fini.

A plus au plaisir de te relire Zed ha merde désoler ihihihi

Raymond


 

zeb

Modérateur
maintenant c'est de savoir comment lui parler pour qu'il fasse ce que l'on lui dit c'est a dire d'aller a l'endroit de mon choix.
Ça, c'est fait. C'est la commande SetWindowPos sur laquelle je t'avais demandé de te renseigner.

Mon code est complet, ne manquent que les déclarations que je te demande de trouver tout seul, juste que je ne te donne pas l'impression que j'ai fait tout le boulot à ta place (ce qui est contraire à nos principes).

Allez !
 

ray76

Nouveau membre
RE:



EnumWindowPos



Sleep pour suspendre jusqu'à fin du timer



SWP_NOSIZE
---------------------------------------------------------------------------


GetWindowthreadProcessID pour placer

Voila ce que j'ai trouver, j'ai d'ailleurs mis ces sites au chaud, je verrai plus tard

Maintenant je fait quoi avec les oreilles parce que la (les Apis) déja sans je nage mais la je coule.

Sincerement je ne sais pas quoi en faire, c'est encore trop tot et dur pour moi.

a 58 ans ca rentre mais j'ai les neurones qui suivent pas tout les jours

Enfin voila je vais relire au cas ou

A plus tard merci

Raymond


 

ray76

Nouveau membre
Bonjour

Bon voila j'ai griller le peu de neurones qui me restait pour faire marcher mon bazar, en fait j'y comprends rien j'aurai du travailler plus a l'école.

Enfin j'ai réussi a planter excel 3 fois et ca m'a rebooter 2 fois mon PC

J'ai pas trouver comment faire, alors tant pis c'est pas bien grave du moment que notre planète tourne encore c'est la l'essentiel.

Si tu as une solution parce que moi j'en ai pas, j'ai envoyer un mail a microsoft
et toujours pas de réponse.

Te souhaite la bonne journée, ha au fait il fait un temps manifique a Rouen Monsieur

et les minis jupes sont de retour yes

Bye Raymond


 

zeb

Modérateur
M'enfin !

Microsoft ne te répondra pas, c'est sûr !
Le code que je te propose fonctionne. Je l'ai testé.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 959
Membres
1 586 383
Dernier membre
potofeu
Partager cette page
Haut