Thread: Re: [GD-Windows] More multimon
Brought to you by:
vexxed72
From: Rich <leg...@xm...> - 2003-03-31 03:34:10
|
In article <2003330172253.380519@HOOKDELL220>, Brian Hook <bri...@py...> writes: > This is also a good point. I don't mind the multimon hacking= > about, > but the nVidia "I'm just a big wide monitor as far you're= > concerned" > thing is kind of annoying because it's probably the single most > prevalent multimon config out there. Make sure you tell nvidia. NVidia has this annoying habit of trying to "fix things" for the developer that don't need fixing. Like you write code that's incorrect and the driver "fixes" it for you behind your back, leaving you oblivious to the dormant bug hiding in your code. This sort of thing just creates more problems than it solves, IMO, and leads to the creation of more poorly written programs rather than less. -- "The Direct3D Graphics Pipeline"-- code samples, sample chapter, FAQ: <http://www.xmission.com/~legalize/book/> izfree: Open source tools for Windows Installer <http://izfree.sourceforge.net> |
From: Brian H. <bri...@py...> - 2003-03-31 06:15:19
|
I hacked up a quick multimon information extractor (GDI only, no= DX stuff) and ran it on some of my multimon systems to see what interesting information I could glean (or not). These are all Win2K systems, I'm not sure what happens on XP or Win98, but since the APIs are the same I'm assuming that it won't= do anything too out of whack. Win98 is my biggest concern since= it's a different driver model. System #1: GF3/AGP + Rage128/PCI + TNT2/PCI GetSystemMetrics( SM_CMONITORS ) =3D 3 \\.\DISPLAY1 - "NVIDIA GeForce3", attached, primary - \\.\DISPLAY1\Monitor0, "Plug and Play Monitor" - attached, 181 video modes \\.\DISPLAY2 - "Xpert 128", attached - \\.\DISPLAY2\Monitor0, "Default Monitor" - attached, 210 video modes \\.\DISPLAY3 - NVIDIA RIVA TNT2 Mode 64/Model 64 Pro, attached - \\.\DISPLAY3\Monitor0, "Default Monitor" - attached, 336 video modes \\.\DISPLAY5 - NetMeeting driver That is a pretty sane system. System #2a: GF4 Ti4200, single virtual desktop GetSystemMetrics( SM_CMONITORS ) =3D 1 \\.\DISPLAY1 - "NVIDIA GeForce4 Ti 4200", attached, primary - \\.\DISPLAY1\Monitor0, "Plug and Play Monitor" - NOT attached, 217 video modes, 2560x1024 \\.\DISPLAY3 - "NetMeeting Driver" Pretty bizarre all the way around. Only a single monitor, only a= single adapter found, and the monitor on DISPLAY1 is listed as "unattached", which is either a bug or clearly something I don't= understand. Next I configured it the same as above, but turned off one of the= desktops, which _should_ make it seem like a complete single= monitor system. System #2b: GF4 Ti4200, second monitor not enabled GetSystemMetrics( SM_CMONITORS ) =3D 1 \\.\DISPLAY1 - "NVIDIA GeForce4 Ti 4200", attached, primary - \\.\DISPLAY1\Monitor0, "Default Monitor" - \\.\DISPLAY1\Monitor1, "Default Monitor" - \\.\DISPLAY1\Monitor2, "Plug and Play Monitor" - \\.\DISPLAY2\Monitor3, "Plug and Play Monitor" - attached, 181 video modes \\.\DISPLAY2 - "NVIDIA Dualview", not attached - \\.\DISPLAY1\Monitor0, "Default Monitor" - \\.\DISPLAY1\Monitor1, "Default Monitor" - \\.\DISPLAY1\Monitor2, "Plug and Play Monitor" - attached, 275 video modes - \\.\DISPLAY2\Monitor3, "Plug and Play Monitor" \\.\DISPLAY4 - "NetMeeting Driver" Well, this is a lot weirder than I was expecting. The first big= thing is that there are four monitors enumerated. The second= thing is that it looks like there are two adapters in the system, when= there's only one. So long as the code observes "primary only adapters and attached monitors", it should be okay. Finally I turned on the checkbox for "Treat each output as a= separate video device" (or whatever it's called). System #2c: GF4 Ti4200, "independent" outputs, dual head GetSystemMetrics( SM_CMONITORS ) =3D 2 \\.\DISPLAY1 - "NVIDIA GeForce4 Ti 4200", attached, primary - \\.\DISPLAY1\Monitor0, "Default Monitor" - \\.\DISPLAY1\Monitor1, "Default Monitor" - \\.\DISPLAY1\Monitor2, "Plug and Play Monitor" - \\.\DISPLAY2\Monitor3, "Plug and Play Monitor" - attached, 181 video modes \\.\DISPLAY2 - "NVIDIA Dualview", attached - \\.\DISPLAY1\Monitor0, "Default Monitor" - \\.\DISPLAY1\Monitor1, "Default Monitor" - \\.\DISPLAY1\Monitor2, "Plug and Play Monitor" - attached, 275 video modes - \\.\DISPLAY2\Monitor3, "Plug and Play Monitor" Finally, a little bit of sanity -- this works just like #2b,= except the second display is marked as attached. So the heuristic that I'll probably use: if more than one monitor reported enumerate monitors get primary get attached else if aspect ratio is > 2:1 assume single virtual desktop multimon system else treat as a regular old single head system The major thing is that you just have to let the user choose to= run windowed for the SVD configuration or let them select "Don't= change video modes" or something similar. That's just a shitty= situation to be in unfortunately. Brian |
From: Brian H. <bri...@py...> - 2003-04-01 04:00:24
|
Here's another sample point submitted by someone else for an ATI= Radeon 8500 dual head. GetSystemMetrics( SM_CMONITORS ) reports 2 monitors \\.\DISPLAY1, "RADEON 8500 SERIES", attached, primary \\.\DISPLAY1\Monitor0, "Plug and Play Monitor" - attached \\.\DISPLAY1\Monitor1, "Plug and Play Monitor" - attached, multidriver \\.\DISPLAY2, "RADEON 8500 SERIES", attached \\.\DISPLAY2\Monitor0, "Plug and Play Monitor" - attached, multidriver \\.\DISPLAY2\Monitor1, "Plug and Play Monitor" - attached This is fairly alarming, because to a naive multimon inspection= it looks like there are two adapters, each with two monitors. Both= adapters are marked as attached, and each has two attached= monitors. The only difference is that the "multidriver" bit is set in the= flags field, which NVidia does not set anywhere that I'm aware of. This isn't a documented bit for the DISPLAY_DEVICE::StateFlags structure, so I'm not even sure what it means other than it's= related to multihead adapters somehow? Brian |
From: Brian H. <ho...@py...> - 2003-08-19 01:51:27
|
I have a feeling this can't be done, but I figured I'd ask the list anyways just in case. Say I want to write a plug-in for random application XYZ. XYZ, however, may not have a plug-in API or it may be broken. Use Notepad as an example. If I wanted to add a plug-in, it seems like it would be pretty much impossible unless my plug-in didn't require any of the application's other data. I swore there were a few plug-ins I've seen that have forced their way into an application, but I can't think of what they might be now. The obvious ones are like Visual Assist, Max plug-ins, Maya plug-ins, Photoshop plug-ins, VS plug-ins, etc. but those all have registered APIs. I've seen screenshots of people that have retrofitted a new menu into Notepad just to prove it can be done, but I'm not sure what the point of that is. The typical way you do this is a pretty convoluted process involving subclassing and message hooks, but even then you can only trap new menu items and maybe a couple of key messages like WM_DESTROY. You obviously can't grab application data and do anything meaningful with it. Brian |
From: Kent Q. <ken...@co...> - 2003-08-19 04:17:56
|
Well, under Windows, if you can get the window handle, there's a lot you can hook, and you can inspect most of the standard windows components and extract the data they display. There are QA "robot" types of applications that can record and play back all sorts of things, and then examine the contents of the various components to see if they contain what they should. But the more an app uses nonstandard controls, the less you can do with it. And if there's graphics or internal data that doesn't show up readily in the UI, it's pretty tough to imagine how you'd get in by other than explicit reverse-engineering. Kent At 09:51 PM 8/18/2003 -0400, you wrote: >I have a feeling this can't be done, but I figured I'd ask the list >anyways just in case. > >Say I want to write a plug-in for random application XYZ. XYZ, >however, may not have a plug-in API or it may be broken. Use Notepad >as an example. > >If I wanted to add a plug-in, it seems like it would be pretty much >impossible unless my plug-in didn't require any of the application's >other data. > >I swore there were a few plug-ins I've seen that have forced their way >into an application, but I can't think of what they might be now. The >obvious ones are like Visual Assist, Max plug-ins, Maya plug-ins, >Photoshop plug-ins, VS plug-ins, etc. but those all have registered >APIs. I've seen screenshots of people that have retrofitted a new >menu into Notepad just to prove it can be done, but I'm not sure what >the point of that is. > >The typical way you do this is a pretty convoluted process involving >subclassing and message hooks, but even then you can only trap new >menu items and maybe a couple of key messages like WM_DESTROY. You >obviously can't grab application data and do anything meaningful with >it. > >Brian > > > > >------------------------------------------------------- >This SF.Net email sponsored by: Free pre-built ASP.NET sites including >Data Reports, E-commerce, Portals, and Forums are available now. >Download today and enter to win an XBOX or Visual Studio .NET. >http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01 >_______________________________________________ >Gamedevlists-windows mailing list >Gam...@li... >https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows >Archives: >http://sourceforge.net/mailarchive/forum.php?forum_idU5 Kent Quirk, CTO, CogniToy ken...@co... http://www.cognitoy.com |