Ik ben bezig met het maken van een plug-in voor MSN plus! welke winamp aanstuurt. Nu heb ik een functie die het "jump to file" venster van winamp aanroept. Echter dit venster moet ook meteen het actieve venster worden, en dat doet ie nu niet? Is er een manier hoe ik dat kan forceren?
Wat heb je geprobeerd. Wat lukte niet? Welke call gaat fout? Wat heb je gezocht? Heb je wat code, welke niet zou werken?
Geef es wat meer info aub
Geef es wat meer info aub
Ik heb deze code, welke winamp het jump to file dialog weer laat geven:Glimi schreef op 07 July 2003 @ 19:35:
Wat heb je geprobeerd. Wat lukte niet? Welke call gaat fout? Wat heb je gezocht? Heb je wat code, welke niet zou werken?
Geef es wat meer info aub
code:
1
2
3
4
| HWND hwndWinamp = FindWindow("Winamp v1.x",NULL);
if(hwndWinamp!=0){
SendMessage(hwndWinamp,WM_COMMAND,40194,0);
} |
Maar dat venster wordt dus niet actief. Ik heb werkelijk geen idee hoe dit te doen. Heb al wat gezocht op google naar "C set active window" e.d. maar niet iets bruikbaars kunnen vinden. Ik gebruik Borland C++ Builder 6.
[ Voor 5% gewijzigd door Harrie op 07-07-2003 19:49 ]
Kijk eens bij de MSDN voor de W32 api, waar je nu mee bezig bent 
Ik heb er iig nog nooit mee geprogrammeerd, maar als je deze url bekijkt, dan lijkt SwitchToThisWindow te voldoen
Ik heb er iig nog nooit mee geprogrammeerd, maar als je deze url bekijkt, dan lijkt SwitchToThisWindow te voldoen
Jah, die functie zou idd ideaal zijn, maar heeft de volgende opmerking:Glimi schreef op 07 July 2003 @ 20:07:
Kijk eens bij de MSDN voor de W32 api, waar je nu mee bezig bent
Ik heb er iig nog nooit mee geprogrammeerd, maar als je deze url bekijkt, dan lijkt SwitchToThisWindow te voldoen
In die van mij lijkt het niet te werkenIt is recommended that you do not use it in new programs because it might be altered or unavailable in subsequent versions of Windows.
ik ben nu aan het kijken of het wilt lukken met:
code:
1
2
3
| HWND jump=FindWindow(NULL,"Jump to file"); //if minimized ShowWindow(jump,SW_SHOW); |
maar tot op heden nog geen succes.
Probeer het anders eens met SetActiveWindow, SetForegroundWindow of BringWindowToTop. Die bestaan onder alle Windows versies, weet alleen niet of ze ook werken...
SetForegroundWindow haalt idd het window naar voren.SWfreak schreef op 07 July 2003 @ 21:42:
Probeer het anders eens met SetActiveWindow, SetForegroundWindow of BringWindowToTop. Die bestaan onder alle Windows versies, weet alleen niet of ze ook werken...
maar als ik deze code uitvoer:
code:
1
2
3
4
5
6
7
8
| HWND hwndWinamp = FindWindow("Winamp v1.x",NULL);
if(hwndWinamp!=0){
SendMessage(hwndWinamp,WM_COMMAND,40194,0);
}
HWND jump=FindWindow(NULL,"Jump to file");
SetForegroundWindow(jump); |
dan opent hij dus eerst de dialog box, maar gaat pas verder met executen als ik die dialog box van winamp heb gesloten. En dan is het natuurlijk te laat om hem nog naar voren te laten halen.
Gebruik anders PostMessage ipv SendMessage. SendMessage wacht op antwoord voordat ie retourneert, en als er een dialogbox geopend wordt, dan is er dus pas een antwoord nadat de dialogbox gesloten is. PostMessage wacht niet op antwoord. Zo ben je dus op tijd om je window te zoeken en tevoorschijn te toveren. Je moet echter wel opletten dat je niet te vroeg bent, dus dat je het window zoekt, maar dat het window nog geen kans heeft gekregen om wakker te worden. Dan geeft je FindWindow NULL terug en dan krijg je dus troep. Je zult dus (een poosje) moeten wachten totdat het window er is.
philippi14 schreef op 07 July 2003 @ 22:08:
[...]
SetForegroundWindow haalt idd het window naar voren.
maar als ik deze code uitvoer:
code:
1 2 3 4 5 6 7 8HWND hwndWinamp = FindWindow("Winamp v1.x",NULL); if(hwndWinamp!=0){ SendMessage(hwndWinamp,WM_COMMAND,40194,0); } HWND jump=FindWindow(NULL,"Jump to file"); SetForegroundWindow(jump);
dan opent hij dus eerst de dialog box, maar gaat pas verder met executen als ik die dialog box van winamp heb gesloten. En dan is het natuurlijk te laat om hem nog naar voren te laten halen.
Kunt dus beter met SetActiveWindow proberen denk ik.The SetActiveWindow function activates a window, but not if the application is in the background. The window will be brought into the foreground (top of Z order) if the application is in the foreground when it sets the activation.
If the window identified by the hWnd parameter was created by the calling thread, the active window status of the calling thread is set to hWnd. Otherwise, the active window status of the calling thread is set to NULL.
The SetForegroundWindow window function, on the other hand, activates a window and forces it into the foreground. An application should only call SetForegroundWindow if it needs to display critical errors or information that needs the user's immediate attention .
Maar misschien dat dat ook niet werkt omdat je jump window een child is van Winamp.
Dus misschien moet je BringWindowtoTop gebruiken:
Als dat ook niet werkt kan je proberen om eerst je Winamp scherm ForeGroundWindow te maken en daarna die andere ToTop.Use the BringWindowToTop function to uncover any window that is partially or completely obscured by other windows.
Calling this function is similar to calling the SetWindowPos function to change a window's position in the Z order. BringWindowToTop does not make a window a top-level window.
If an application is not in the foreground and wants to be in the foreground, it should call the SetForegroundWindow function.
Kan best zijn dat je het jump venster niet los krijgt van het Winamp scherm omdat het Winamp scherm altijd achter jump venster geplaatst wordt. Maar dan kan je misschien wat proberen met parents of owners aanpassen...
Is moelijk te zeggen wat gaat gebeuren, hangt van de applicatie af...
Steam | SXQncyBhbGwgZ29vZCwgbWFuISDwn5iO
tnx!! Das idd de oplossing!!!SWfreak schreef op 07 July 2003 @ 22:18:
Gebruik anders PostMessage ipv SendMessage. SendMessage wacht op antwoord voordat ie retourneert, en als er een dialogbox geopend wordt, dan is er dus pas een antwoord nadat de dialogbox gesloten is. PostMessage wacht niet op antwoord. Zo ben je dus op tijd om je window te zoeken en tevoorschijn te toveren. Je moet echter wel opletten dat je niet te vroeg bent, dus dat je het window zoekt, maar dat het window nog geen kans heeft gekregen om wakker te worden. Dan geeft je FindWindow NULL terug en dan krijg je dus troep. Je zult dus (een poosje) moeten wachten totdat het window er is.
Pagina: 1