|
Post Reply
Olaf Rabbachin 2006-10-25 20:37
Hi everybody,
I have a MSI-card (Radeon X1600 series) which came with Hydravision and Catalyst. I uninstalled both as they're not of much use as it seems, but will add much unneeded stuff (who the hell needs a Catalyst-menu entry under i.e. the file menu in WinExplorer???). In my laptop (which also runs two monitors when docked) I have an NVidia card which ran NView - only when I unistalled NView the laptop became stable again (NView was giving me a VERY hard time with Visual Studio 2005). But at least it gave me some keyboard shortcuts plus window-memory.
Looking for an alternative, I just downloaded and installed UltraMon. I'm pretty happy to have my keyboard-shortcuts back (Ctrl-Shift F1/F2 for moving windows between my two monitors and Ctrl-Shift F4 for maximizing/restoring a window). However, I'm missing a shortcut for centering a window on a (given or active) monitor. What's more important is that there doesn't seem to be any memory that helps opening dialog-windows on the position (or at least the monitor) they were last opened on. That is, i.e. with a newsgroup-reader such as 40tude Dialog, the main window will be on the right monitor. If I want to post a new message, the popup-window will be placed between both monitors (with 1/3 on the left and 2/3 on the right).
Is there anything I missed concerning the settings and/or the available functions in UltraMon?
Cheers, Olaf
|
Olaf Rabbachin 2006-10-25 21:29
BTW - I forgot to mention that the hotkey for moving a window between monitors won't help at all if the window stretches onto both monitors. However, I just created a little script that'll at least enable me to center the window using a hotkey:
-- 8< --- Const SHOWSTATE_NORMAL = 2
Set wnd = CreateObject("UltraMon.Window") If wnd.GetForegroundWindow() = True Then Set sys = CreateObject("UltraMon.System") 'get the monitor the window is on Set mon = sys.Monitors(wnd.Monitor - 1) 'fit window to the top half of the monitor workspace area wnd.ShowState = SHOWSTATE_NORMAL wnd.Centered = True wnd.ApplyChanges 0 End If -- 8< ---
Cheers, Olaf
|
Olaf Rabbachin 2006-10-25 21:30
Err, I should've removed the comments from the base script, right? :-D
-- 8< --- Const SHOWSTATE_NORMAL = 2
Set wnd = CreateObject("UltraMon.Window") If wnd.GetForegroundWindow() = True Then Set sys = CreateObject("UltraMon.System") 'get the monitor the window is on Set mon = sys.Monitors(wnd.Monitor - 1) 'center the window wnd.ShowState = SHOWSTATE_NORMAL wnd.Centered = True wnd.ApplyChanges 0 End If -- 8< ---
Cheers, the weirdo talking to himself
|
Christian Studer 2006-10-26 04:52
Thanks for sharing the script.
UltraMon currently doesn't support positioning of child/dialog/popup windows, only the application's main window can be positioned when using a customized shortcut.
ZMover might help with this: http://www.basta.com/ProdZMover.htm
Christian Studer - www.realtimesoft.com
|
Olaf Rabbachin 2006-10-26 22:33
Hi Christian,
thanks for the info. ZMover periodically scans the desktop for windows (most probably using the win-enum by title) - that probably won't help much as i.e. NG-reader windows will have a different title each time they're launched. Also, a 1s timer to me (being a developer as well) doesn't really seem promising ... I guess that programs like Hydravision and NView will use the display driver directly - at least that would be the reason why they seem work without a timer - at least there is no visible delay.
Is there any plan to include support for a "window position memory"? With my annotation above I guess that won't be possible as you'd have to dig deep into driver-related stuff ...
Gruezi in die Schweiz, Olaf
Cheers, Olaf
|
Christian Studer 2006-10-27 09:09
Support for this will be considered for UltraMon 3, shouldn't require access to the display driver.
I'm not sure if ZMover supports this, but if you can also identify windows based on the window class, that would fix the problem with windows which don't have a fixed title.
Grüsse,
Christian Studer - www.realtimesoft.com
|
Olaf Rabbachin 2006-10-27 21:10
Hi Christian,
> Support for this will be considered for UltraMon 3
Great!
> shouldn't require access to the display driver.
Maybe you're right. Also, a hook into the Windows message-stream might do the trick instead of a timer. But since that would be a system-wide hook, you'd have to use C/C++ (which I haven't been using anymore for the last 10+ years). The SetWindowsHookEx-API along with WH_CALLWNDPROC would be where I'd start looking. If you're developing with VB, check out Steve's article: http://www.vbaccelerator.com/home/Vb/Code/Libraries/Hooks/vbAccelerator_Hook_Library/article.asp IIRC he also created a library that would enable you to setup a system-wide hook using his library rather than own C/C++-code. What are you developing with anyway? :-)
> if you can also identify windows based on the > window class, that would fix the problem with > windows which don't have a fixed title.
The GetWindowThreadProcessId-API will return the identifier to the thread that created a window, that would be the approach I'd go for.
Cheers, Olaf
|
Christian Studer 2006-10-28 09:23
C++, UltraMon does a lot with hooks (Smart Taskbar, window buttons).
Christian Studer - www.realtimesoft.com
|
Olaf Rabbachin 2006-10-31 22:12
Gruezi Christian,
> C++, UltraMon does a lot with hooks (Smart Taskbar, window buttons).
Ah, so you should be a lot more into that kinda stuff than me and actually storing/retrieving windows-positions as well as supplying a setting that will move a dialog-window to the monitor in which its parent-app is running shouldn't be unfeasible at all. I personally am actually pretty glad that I don't have to untangle pointers to pointers to pointers to pointers anymore ... ;-)
Cheers, Olaf
|
Post Reply
|