Jump to content











Photo
- - - - -

[app script] SetResolution


  • Please log in to reply
126 replies to this topic

#101 Zerojinny

Zerojinny

    Newbie

  • Members
  • 22 posts

Posted 12 July 2010 - 11:27 AM

I appreciate your woks.

I used delay option 5, and it works for me.

You are my hero, Galapo! :cheers:

#102 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 29 July 2010 - 07:38 PM

Version 5.6
[2010-07-29--21:25:00] Resolutions for "Mobile Intel® 945 Express Chipset Family (cdd)" device are:
\\.\DISPLAY1 : 320x200, 8bits, @40 Hz
\\.\DISPLAY1 : 320x200, 8bits, @40 Hz

......

\\.\DISPLAY1 : 1024x768, 8bits, @40 Hz
\\.\DISPLAY1 : 1024x768, 8bits, @50 Hz
\\.\DISPLAY1 : 1024x768, 16bits, @40 Hz
\\.\DISPLAY1 : 1024x768, 16bits, @50 Hz
\\.\DISPLAY1 : 1024x768, 32bits, @40 Hz
\\.\DISPLAY1 : 1024x768, 32bits, @50 Hz
\\.\DISPLAY1 : 1024x768, 32bits, @50 Hz
\\.\DISPLAYV2[not attached to desktop] : 0x0, 0bits, @0 Hz
\\.\DISPLAYV3[not attached to desktop] : 0x0, 0bits, @0 Hz
Best Low Res function successfully set to: 640x480, 32bits.
Native Machine detected
Error: BestRes function could not be set to 1024x768, 32bits on \\.\DISPLAY1. Current res is: 640x480, 32bits, @50Hz.
*** ***

thats the (cut off) log from my ibm x60s

system: win7

dllcall to ChangeDisplaySettings trows -2 , but arguments for _ChangeScreenRes() where fine (1024,768,32,50).

setres from Ian Sharpe does work, changes where applied.

bad displaydriver? or hardwarebug?

#103 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 29 July 2010 - 11:07 PM

I assume this is a Win7 PE?

Not sure what could be the problem and it's interesting that setres works. Do you know what function it calls to set resolution, or if it does something additional like in the current case where ChangeDisplaySettings isn't working properly?

Thanks,
Galapo.

#104 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 31 July 2010 - 02:15 PM

I assume this is a Win7 PE?

no, native on laptop.

... and it's interesting that setres works. Do you know what function it calls to set resolution, or if it does something additional like in the current case where ChangeDisplaySettings isn't working properly?


/*------------------------------------------------------------------------------------------	SETRES SINGLE MONITOR	Windows command line program to set display resolution / colour depth / refresh frequency	© 2010 Ian Sharpe (www.iansharpe.com)	This program is free software. You can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation, either version 3 of the License, or	any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	The GNU General Public License can be viewed at [url="http://www.gnu.org/licenses/"]http://www.gnu.org/licenses/[/url]COMPATIBILITY	Windows 98, Windows 2000 & laterCOMPILATION	This version compiles without alteration using GCC in conjunction with the	Bloodshed Dev-C++ IDE. Modification to work with other compilers is usually	just a matter of getting the correct #INCLUDEs.VERSION HISTORY	30 April 2010		v2.3	:  Initial GPL3 open source release	Prior to v2.3				:  Closed sourceMULTIPLE DISPLAYS	SETRES SINGLE MONITOR works with the primary display only.	A closed-source	multi-monitor edition is available at www.iansharpe.com------------------------------------------------------------------------------------------*///----------------------------------------------------------------------------------------// INCLUDES// Compilers other than GCC may require different/additional include libraries.#include <stdio.h>#include <windows.h>#include <conio.h>//----------------------------------------------------------------------------------------// FORWARD DECLARATIONS//void ExitWithHelp(char *);void waitkey(void);//----------------------------------------------------------------------------------------// GLOBALS//const char* APP_VERSION = "v2.3 - 30 Apr 2010";	// Application version & dateBOOL bNoWait;   								// TRUE if user specifies not to wait for keypress on error//----------------------------------------------------------------------------------------// APP ENTRY POINT//int main( int argc, char* argv[] ){	DEVMODE DevMode;		// Device mode structure - see Windows API documentation	DWORD	dwNewHres,		// User-specified new horizontal resolution			dwNewVres,		// User-specified new vertical resolution			dwNewBitDepth,	// User-specified new colour (bit) depth			dwNewFreq;		// User-specified new frequency	// Parse command line parameters	dwNewHres = dwNewVres = dwNewBitDepth = dwNewFreq = 0;	bNoWait = FALSE;	for ( int i = 1; i < argc; i++ )	{		_strupr(argv[i]);		switch(argv[i][0])		{			case &#39;H&#39;:		// Horizontal res				dwNewHres = atoi(&argv[i][1]);				break;			case &#39;V&#39;:		// Vertical res				dwNewVres = atoi(&argv[i][1]);				break;			case &#39;B&#39;:		// Bit depth				dwNewBitDepth = atoi(&argv[i][1]);				break;			case &#39;F&#39;:		// Frequency				dwNewFreq = atoi(&argv[i][1]);				break;			case &#39;N&#39;:		// No wait for keypress on error				bNoWait = TRUE;				break;			default:				ExitWithHelp("Unrecognised parameter supplied");		}	}	// Parameter count check - after parsing in case user specified N = no wait parameter	if ( argc < 3 || argc > 6 )		ExitWithHelp("Wrong number of command line parameters supplied.");	// Uncomment for debugging	/* printf("dwNewHres=%d\ndwNewVres=%d\ndwNewBitDepth=%d\ndwNewFreq=%d", dwNewHres, dwNewVres, dwNewBitDepth, dwNewFreq);	getchar(0);	exit(0); */	// Check we have sufficient information	if( dwNewHres < 640 || dwNewVres < 480 )		ExitWithHelp("Valid horizontal and/or vertical size not specified. 640x480 minimum.");	// Obtain current display settings	if( ! EnumDisplaySettings(NULL,ENUM_CURRENT_SETTINGS, &DevMode) )	{		puts("FATAL ERROR: EnumDisplaySettings function failed.\nSomething went badly wrong. I don&#39;t know what. Sorry.");		puts("PRESS A KEY");		waitkey();		exit(EXIT_FAILURE);	}	// Overwrite with user-specified settings	DevMode.dmPelsWidth = dwNewHres;	DevMode.dmPelsHeight = dwNewVres;	DevMode.dmFields = DM_PELSWIDTH+DM_PELSHEIGHT;	if( dwNewBitDepth)	{		DevMode.dmBitsPerPel = dwNewBitDepth;		DevMode.dmFields += DM_BITSPERPEL;	}	if (dwNewFreq)	{		DevMode.dmDisplayFrequency = dwNewFreq;		DevMode.dmFields += DM_DISPLAYFREQUENCY;	}	// Execute resolution change, interpret API return code & exit	puts ("Display mode change requested and Windows replied...\t");	switch (ChangeDisplaySettings(&DevMode, CDS_UPDATEREGISTRY))	{		case DISP_CHANGE_SUCCESSFUL:			puts("The settings change was successful");			exit(EXIT_SUCCESS);		case DISP_CHANGE_RESTART:			puts("The computer must be restarted in order for the graphics mode to work");			puts("PRESS A KEY");			waitkey();			exit(EXIT_SUCCESS);		case DISP_CHANGE_BADFLAGS:			puts("An invalid set of flags was passed in");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);		case DISP_CHANGE_BADPARAM:			puts("An invalid parameter was passed in. This can include an invalid flag or combination of flags");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);		case DISP_CHANGE_FAILED:			puts("The display driver failed the specified graphics mode");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);		case DISP_CHANGE_BADMODE:			puts("The graphics mode is not supported");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);		case DISP_CHANGE_NOTUPDATED:			puts("Windows NT: Unable to write settings to the registry");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);		default:			puts("with an unknown return code (possibly an error)");			puts("PRESS A KEY");			waitkey();			exit(EXIT_FAILURE);	}}//----------------------------------------------------------------------------------------// Exit app with help message//// ARGUMENTS//  char* pszSpecialMessage	:   Pointer to special message string// RETURN//  Does not return - exits app with failure code//void ExitWithHelp(char* pszSpecialMessage){	printf("\nSETRES SINGLE MONITOR - %s © Ian Sharpe - www.iansharpe.com \n", APP_VERSION);	puts("Open source software released under GPLv3 or greater (www.gnu.org/licenses/)");	puts("===============================================================================");	puts("Change screen resolution, colour depth and refresh frequency in Windows\n");	puts("\tSETRES hXXXX vXXXX [bXX] [fXX] [n]\n");	puts("hXXXX = Horizontal size of screen in pixels		  Not optional. 640 minimum");	puts("vXXXX = Vertical size of screen in pixels			Not optional. 480 minimum");	puts("  bXX = Bit (colour) depth such as 8, 16 24, 32	  Optional");	puts("  fXX = Refresh frequncy in Hertz, e.g. 60, 75, 85   Optional");	puts("	n = No &#39;Press a key&#39; wait in error report		Optional");	puts("\nEXAMPLES:");	puts("\tSETRES h1024 v768");	puts("\tSETRES h800 v600 b24");	puts("\tSETRES h1280 v1024 b32 f75");	puts("\tSETRES h1024 v768 n\n");	puts("\nWARNING: SETRES does not check the capabilities of your hardware. Windows");	puts("\tis supposed to reject unsupported settings but do not rely on this.");	puts("\tIf you specify unsupported settings, I WILL NOT ACCEPT RESPONSIBILITY.\n");	printf("***  ERROR: %s  ***\n", pszSpecialMessage);	Beep(300, 200);	waitkey();	exit(EXIT_FAILURE);}//----------------------------------------------------------------------------------------// Wait for keypress//void waitkey(void){	if ( bNoWait )			// Return immediately if bNoWait flag set		return;	int iCountDown;		  // Remaining seconds to timeout		for( iCountDown = 15; ! kbhit() && iCountDown; iCountDown-- ) // 15 and Sleep(1000) = 15 seconds	{		printf("  PRESS A KEY - TIMEOUT IN %2d SECONDS - SEE SETRES.TXT FOR HELP\r", iCountDown);		Sleep(1000);		// Delay in loop cuts processor usage	}	if (iCountDown)		getch();			// Throw character away	Beep(300, 200);}//----------------------------------------------------------------------------------------// END//----------------------------------------------------------------------------------------

"ChangeDisplaySettings" is called for changes.

possibly autoit-bug, triggered only in rare cases?
i am investigating all values step by step at the moment.

#105 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 01 August 2010 - 04:02 AM

Check a few things:

1. Whether passing just the values 1024x768 works.
2. Whether passing a slightly smaller setting works, say 800x600.

I see SetRes does something a little differently. SetResolution first does a ChangeDisplaySettings call with CDS_TEST and then if that was successful another call with CDS_UPDATEREGISTRY, while SetRes only does a call with CDS_UPDATEREGISTRY. I don't know whether that is significant or not.

Regards,
Galapo.

#106 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 02 August 2010 - 07:43 PM

MSDN ChangeDisplaySettings
The dmSize member of DEVMODE must be initialized to the size, in bytes, of the DEVMODE structure.
The dmDriverExtra member of DEVMODE must be initialized to indicate the number of bytes of private driver data following the DEVMODE structure.

could this be the problem?
if i switch from 800x600 to 1024x768, i get the error.

what does help for me:
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", 0, "ptr", DllStructGetPtr($DEVMODE))
Local $B = DllCall("user32.dll", "int", "EnumDisplaySettings", "ptr", 0, "long", $ENUM_REGISTRY_SETTINGS, "ptr", DllStructGetPtr($DEVMODE))

DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_UPDATEREGISTRY)
DllCall("user32.dll", "int", "ChangeDisplaySettings", "ptr", DllStructGetPtr($DEVMODE), "int", $CDS_RESET)

another idea:

$regKey = "HKLM\System\CurrentControlSet\Hardware Profiles\UnitedVideo\CONTROL\VIDEO\"
$regKey &= RegEnumKey($regKey,1) & "\0000\"
RegWrite($regKey,"DefaultSettings.XResolution","REG_DWORD",$i_Width)
RegWrite($regKey,"DefaultSettings.YResolution","REG_DWORD",$i_Height)
RegWrite($regKey,"DefaultSettings.BitsPerPel","REG_DWORD",$i_BitsPP)
RegWrite($regKey,"DefaultSettings.VRefresh","REG_DWORD",$i_RefreshRate)
$regKey &= RegEnumKey($regKey,1)
RegWrite($regKey,"DefaultSettings.XResolution","REG_DWORD",$i_Width)
RegWrite($regKey,"DefaultSettings.YResolution","REG_DWORD",$i_Height)
RegWrite($regKey,"DefaultSettings.BitsPerPel","REG_DWORD",$i_BitsPP)
RegWrite($regKey,"DefaultSettings.VRefresh","REG_DWORD",$i_RefreshRate)

then reload settings with $CDS_RESET possibly ?

#107 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 03 August 2010 - 07:09 AM

I've made an alteration. Can you test the version I've uploaded here: http://galapo.boot-l...tResolution.exe

Thanks,
Galapo.

#108 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 03 August 2010 - 12:41 PM

I've made an alteration. Can you test the version I've uploaded here: http://galapo.boot-l...tResolution.exe

Thanks,
Galapo.

no, does not work.
by the way: how do i stop it from evaluating resolutions again and again, switching between 640x480 and 800x600 (after i closed the helpwindow)?
whats the commandline, to switch resolution and exit without further actions?

#109 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 03 August 2010 - 11:51 PM

no, does not work.

Hmm, I wonder why. I'm a little reluctant to do this the way SetRes does by calling with CDS_UPDATEREGISTRY without a prior CDS_TEST.

Can you please test this more full code and see what happens:

_ScreenSetting&#40;1024, 768, 32, 50&#41;



;===============================================================================

=====

;

;Function Name&#58;	 _ScreenSetting&#40;&#41;

;Description&#58;	   Changes the screen resolution, color dept and refresh rate

;Version&#58;		   1.0

;Parameters&#58;		$iWidth   - Width of the desktop screen in pixels. &#40;horizontal resolution&#41;

;				   $iHeight  - Height of the desktop screen in pixels. &#40;vertical resolution&#41;

;				   $iDepth   - Depth of the desktop screen in bits per pixel.

;				   $iRefresh - Refresh rate of the desktop screen in hertz.

;Return Value&#40;s&#41;&#58;   On Success - Screen is adjusted

;				   On failure - Message with error description

;Requirement&#40;s&#41;&#58;	Tested on AutoIt 3.2.10.0

;Autor&#40;s&#41;&#58;		  R.Gilman &#40;a.k.a rasim&#41;; special thanks to amel27

;

;===============================================================================

=====

Func _ScreenSetting&#40;$iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh&#41;

	Local Const $DISP_CHANGE_SUCCESSFUL = 0

	Local Const $DISP_CHANGE_RESTART	= 1

	Local Const $DISP_CHANGE_FAILED	 = -1

	Local Const $DISP_CHANGE_BADMODE	= -2

	Local Const $DISP_CHANGE_NOTUPDATED = -3

	Local Const $DISP_CHANGE_BADFLAGS   = -4

	Local Const $DISP_CHANGE_BADPARAM   = -5

	

	Local Const $CDS_TEST		   = 0x4

	Local Const $CDS_UPDATEREGISTRY = 0x1

	

	Local Const $DM_PELSWIDTH		= 0x80000

	Local Const $DM_PELSHEIGHT	   = 0x100000

	Local Const $DM_BITSPERPEL	   = 0x40000

	Local Const $DM_DISPLAYFREQUENCY = 0x400000

	

	Local Const $ENUM_CURRENT_SETTINGS   = -1

	Local Const $WM_DISPLAYCHANGE		= 0x007E

	Local Const $HWND_BROADCAST		  = 0xFFFF

	Local Const $SPI_SETNONCLIENTMETRICS = 0x2A

	

	Local $DEVMODE, $DllRet

	

	$DEVMODE = DllStructCreate&#40;&#34;char dmDeviceName&#91;32&#93;;ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;&#34; & _

							   &#34;ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;&#34; & _

							   &#34;short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;&#34; & _

							   &#34;short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;&#34; & _

							   &#34;byte dmFormName&#91;32&#93;;dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;&#34; & _

							   &#34;dword dmDisplayFlags;dword dmDisplayFrequency&#34;&#41;

							   

	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;EnumDisplaySettings&#34;, &#34;ptr&#34;, 0, &#34;dword&#34;, $ENUM_CURRENT_SETTINGS, _

					  &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;&#41;

	$DllRet = $DllRet&#91;0&#93;

	

	If $DllRet = 0 Then

		MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to get graphic mode&#34;&#41;

		Return False

	EndIf

	

	$VGA_MAP_KEY = RegRead&#40;&#34;HKLM\HARDWARE\DEVICEMAP\VIDEO&#34;, &#34;\Device\Video0&#34;&#41;

	$VGA_KEY = StringReplace&#40;$VGA_MAP_KEY, &#34;\Registry\Machine&#34;, &#34;HKLM&#34;&#41;

	

	RegWrite&#40;$VGA_KEY, &#34;PruningMode&#34;, &#34;REG_DWORD&#34;, 0&#41;

	

	DllStructSetData&#40;$DEVMODE, &#34;dmSize&#34;, DllStructGetSize&#40;$DEVMODE&#41;&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmPelsWidth&#34;, $iWidth&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmPelsHeight&#34;, $iHeight&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmBitsPerPel&#34;, $iDepth&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmDisplayFrequency&#34;, $iRefresh&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmFields&#34;, BitOR&#40;$DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY&#41;&#41;



	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_TEST&#41;

	$DllRet = $DllRet&#91;0&#93;

	

	If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then

		Switch $DllRet

			Case $DISP_CHANGE_RESTART

				MsgBox&#40;48, &#34;Warning&#34;, &#34;Restart your computer for change display settings&#34;&#41;

			Case $DISP_CHANGE_FAILED

				MsgBox&#40;16, &#34;Error&#34;, &#34;The video driver not set a new mode&#34;&#41;

				Return False

			Case $DISP_CHANGE_BADMODE

				MsgBox&#40;16, &#34;Error&#34;, &#34;Video mode not supported&#34;&#41;

				Return False

			Case $DISP_CHANGE_NOTUPDATED

				MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to write in registry&#34;&#41;

				Return False

			Case $DISP_CHANGE_BADFLAGS

				MsgBox&#40;16, &#34;Error&#34;, &#34;Bad flags&#34;&#41;

				Return False

			Case $DISP_CHANGE_BADPARAM

				MsgBox&#40;16, &#34;Error&#34;, &#34;Bad parameters&#34;&#41;

				Return False

		EndSwitch

	EndIf



	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_UPDATEREGISTRY&#41;

	$DllRet = $DllRet&#91;0&#93;



	DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;SendMessage&#34;, &#34;hwnd&#34;, $HWND_BROADCAST, &#34;int&#34;, $WM_DISPLAYCHANGE, _

			&#34;int&#34;, $SPI_SETNONCLIENTMETRICS, &#34;int&#34;, 0&#41;



	RegWrite&#40;$VGA_KEY, &#34;PruningMode&#34;, &#34;REG_DWORD&#34;, 1&#41;



	$DEVMODE = &#34;&#34;

	$DllRet  = &#34;&#34;

EndFunc

by the way: how do i stop it from evaluating resolutions again and again, switching between 640x480 and 800x600 (after i closed the helpwindow)?

Sorry, I'm not sure what you're meaning. Please describe a bit more of what's happening.

whats the commandline, to switch resolution and exit without further actions?


Some examples:

SetResolution.exe -hide -exit -r1024x768
SetResolution.exe -hide -exit -r1024x768x32
SetResolution.exe -hide -exit -r-1x-1x32

Note: a different refresh rate cannot be set from the commandline. If someone wants this feature added, it should be too difficult to implement.

Regards,
Galapo.

#110 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 11 August 2010 - 05:22 PM

Can you please test this more full code and see what happens:

works :mellow:
whats the difference? "PruningMode"?

Sorry, I'm not sure what you're meaning. Please describe a bit more of what's happening.

if i simply start setresolution.exe and close the help-dialog, it evaluates resolutions again and again (switching between them), but does not succeed with 1024x768. only 800x600 and 640x480 where set.

#111 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 12 August 2010 - 06:47 AM

Hi fagoranch,

Thanks for the report. Glad that works -- just have to work out why. It could be the setting of PruningMode, or else the more complete function.

boot-land.net subdomains are still down, so I'll have to attach the file to this post rather than updating the test link already give. Can you test this version for me:

[Attachment removed as test complete; see below]

Regarding the repeated changing after closing the gui, it's definitely not supposed to do that and I can't see a reason why it is. I can't reproduce on my hardware.

Regards,
Galapo.

#112 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 13 August 2010 - 08:17 PM

verified again: your testscript works. but the new setresolution.exe does not.

PS: works without "pruningmode" too for me.

#113 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 16 August 2010 - 07:03 AM

Hi fagoranch,

Thanks again for testing.

I guess the result means that it is the more complete function that makes the difference. I've added this and am hoping that this next test version will work for you.

Regards,
Galapo.

[Attachment removed as test complete]

#114 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 16 August 2010 - 07:38 AM

yes,works.
but should
DllCall("user32.dll", "int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_DISPLAYCHANGE, _
"int", $SPI_SETNONCLIENTMETRICS, "int", 0)
not resize all windows to its old state?
maximised windows will stay after 1024x768 > 800x600 and back to 1024x768 on 800x600 with attribute "maximised". the should expand back to 1024x768.

PS:
"SetResolution -hide -exit -r800x600" does set resolution to 800x600 AND BACK TO 1024x768 :smiling9:

#115 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 16 August 2010 - 09:06 AM

It works for me. But I changed the HWND_BROADCAST dll call to what the previous function used, namely
DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;SendMessage&#34;, &#34;hwnd&#34;, $HWND_BROADCAST, &#34;int&#34;, $WM_DISPLAYCHANGE, _

&#34;int&#34;, $iDepth, &#34;int&#34;, $iHeight * 2 ^ 16 + $iWidth&#41;

Hopefully this will work for you.

Regards,
Galapo.

[Attachment removed as test complete]

#116 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 19 August 2010 - 06:58 PM

did not resize the (bevore to maximised) windows back to fullscreen. :smiling9:

#117 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 19 August 2010 - 09:21 PM

Sorry, I'm not sure what you meant.

Do you mean that resolution was at 1024x768 then you ran "SetResolution.exe -hide -exit -r800x600" and it sized to 800x600 without reverting back to 1024x768?

Thanks,
Galapo.

#118 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 20 August 2010 - 10:32 PM

it does revert back to 1024x768. :(

and the windows, maximised under 1024x768 stay in maximised state, but with windowsize 800x600. i have to click the maximisebutton twice, to unmaximise and then remaximise to windowsize 1024x768.

if you like, send me the source via pm and i will debug this for you.

#119 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 21 August 2010 - 12:46 AM

it does revert back to 1024x768. :(

Thanks for the report. I found the bug -- it was happening when running from the commandline only without SetResolution already running.

and the windows, maximised under 1024x768 stay in maximised state, but with windowsize 800x600. i have to click the maximisebutton twice, to unmaximise and then remaximise to windowsize 1024x768.

I see what you mean. When using DisplayProperties and clicking 'Apply', then maximised state windows are sized correctly and other windows that would have been off the screen are moved into view. I'm not sure how to do this. I'll send you the sourcecode for you to have a try.

Thanks,
Galapo.

#120 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 24 August 2010 - 06:59 PM

have found that your testscript does work fine! :)
this code does even resize all windows fine:
;===============================================================================

;Function Name&#58;	 _ScreenSetting&#40;&#41;

;Description&#58;	   Changes the screen resolution, color dept and refresh rate

;Version&#58;		   1.0

;Parameters&#58;		$iWidth   - Width of the desktop screen in pixels. &#40;horizontal resolution&#41;

;				   $iHeight  - Height of the desktop screen in pixels. &#40;vertical resolution&#41;

;				   $iDepth   - Depth of the desktop screen in bits per pixel.

;				   $iRefresh - Refresh rate of the desktop screen in hertz.

;Return Value&#40;s&#41;&#58;   On Success - Screen is adjusted

;				   On failure - Message with error description

;Requirement&#40;s&#41;&#58;	Tested on AutoIt 3.2.10.0

;Autor&#40;s&#41;&#58;		  R.Gilman &#40;a.k.a rasim&#41;; special thanks to amel27

;

;============================================================================

===

 Func _ScreenSetting&#40;$i_Width = @DesktopWidth, $i_Height = @DesktopHeight, $i_Depth = @DesktopDepth, $i_Refresh = @DesktopRefresh&#41;

	 Local Const $DM_PELSWIDTH		= 0x80000

	 Local Const $DM_PELSHEIGHT	   = 0x100000

	 Local Const $DM_BITSPERPEL	   = 0x40000

	 Local Const $DM_DISPLAYFREQUENCY = 0x400000

	 

	 Local Const $ENUM_CURRENT_SETTINGS   = -1

	 Local Const $WM_DISPLAYCHANGE		= 0x007E

	 Local Const $HWND_BROADCAST		  = 0xFFFF

	 Local Const $SPI_SETNONCLIENTMETRICS = 0x2A

	 

	 Local $DEVMODE, $DllRet

	 Local Const $DISP_CHANGE_SUCCESSFUL = 0

	 Local Const $DISP_CHANGE_RESTART	= 1

	 Local Const $DISP_CHANGE_FAILED	 = -1

	 Local Const $DISP_CHANGE_BADMODE	= -2

	 Local Const $DISP_CHANGE_NOTUPDATED = -3

 

	 Local Const $DISP_CHANGE_BADFLAGS   = -4

	 Local Const $DISP_CHANGE_BADPARAM   = -5

	 

	 Local Const $CDS_TEST		   = 0x4

	 Local Const $CDS_UPDATEREGISTRY = 0x1

	 

	 $DEVMODE = DllStructCreate&#40;&#34;char dmDeviceName&#91;32&#93;;ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;&#34; & _

								&#34;ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;&#34; & _

								&#34;short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;&#34; & _

								&#34;short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;&#34; & _

								&#34;byte dmFormName&#91;32&#93;;dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;&#34; & _

								&#34;dword dmDisplayFlags;dword dmDisplayFrequency&#34;&#41;

							   

	 $DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;EnumDisplaySettings&#34;, &#34;ptr&#34;, 0, &#34;dword&#34;, $ENUM_CURRENT_SETTINGS, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;&#41;

	 $DllRet = $DllRet&#91;0&#93;

	 

	 If $DllRet = 0 Then

		 MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to get graphic mode&#34;&#41;

		 Return False

	 EndIf

	   

	 DllStructSetData&#40;$DEVMODE, &#34;dmSize&#34;, DllStructGetSize&#40;$DEVMODE&#41;&#41;

	 DllStructSetData&#40;$DEVMODE, &#34;dmPelsWidth&#34;, $iWidth&#41;

	 DllStructSetData&#40;$DEVMODE, &#34;dmPelsHeight&#34;, $iHeight&#41;

	 DllStructSetData&#40;$DEVMODE, &#34;dmBitsPerPel&#34;, $iDepth&#41;

	 DllStructSetData&#40;$DEVMODE, &#34;dmDisplayFrequency&#34;, $iRefresh&#41;

	 DllStructSetData&#40;$DEVMODE, &#34;dmFields&#34;, BitOR&#40;$DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY&#41;&#41;

 

	 $DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_TEST&#41;

	 $DllRet = $DllRet&#91;0&#93;

	 

	 If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then

		 Switch $DllRet

			 Case $DISP_CHANGE_RESTART

				 MsgBox&#40;48, &#34;Warning&#34;, &#34;Restart your computer for change display settings&#34;&#41;

			 Case $DISP_CHANGE_FAILED

				 MsgBox&#40;16, &#34;Error&#34;, &#34;The video driver not set a new mode&#34;&#41;

				 Return False

			 Case $DISP_CHANGE_BADMODE

				 MsgBox&#40;16, &#34;Error&#34;, &#34;Video mode not supported&#34;&#41;

				 Return False

			 Case $DISP_CHANGE_NOTUPDATED

				 MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to write in registry&#34;&#41;

				 Return False

			 Case $DISP_CHANGE_BADFLAGS

				 MsgBox&#40;16, &#34;Error&#34;, &#34;Bad flags&#34;&#41;

				 Return False

			 Case $DISP_CHANGE_BADPARAM

				 MsgBox&#40;16, &#34;Error&#34;, &#34;Bad parameters&#34;&#41;

				 Return False

		 EndSwitch

	 EndIf

 

	 $DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_UPDATEREGISTRY&#41;

	 $DllRet = $DllRet&#91;0&#93;

 

	 DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;SendMessage&#34;, &#34;hwnd&#34;, $HWND_BROADCAST, &#34;int&#34;, $WM_DISPLAYCHANGE, &#34;int&#34;, $i_BitsPP, &#34;int&#34;, $i_Height * 2 ^ 16 + $i_Width&#41;

 

	 $DEVMODE = &#34;&#34;

	 $DllRet  = &#34;&#34;

 EndFunc

need some time to understand the source, because it is comprehensive.
if you see the difference (find the bug), please leave me a note.

#121 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 25 August 2010 - 03:48 AM

Hi fagoranch,

Thanks for that. It made another idea come into my head and I've coded a new version which is working well for me (resizing windows if too large etc like what DisplayProperties does).

See if this works for you.

Regards,
Galapo.

Attached Files



#122 Gostep

Gostep

    Member

  • Members
  • 77 posts
  • Location:TT Hue- Viet Nam
  •  
    Vietnam

Posted 25 August 2010 - 07:54 AM

finaly works as expected! :) :)
now i see; the second moment, when the screen goes black is the resizing of the windows. :)

we have got it! :)
hopefully it will work for all other situations too now.

can you tell me, what you have changed?

#123 Galapo

Galapo

    Platinum Member

  • .script developer
  • 3841 posts
  •  
    Australia

Posted 25 August 2010 - 11:06 AM

Sure, here's the modified function:

;===============================================================================

;

;Function Name&#58;	 _ScreenSetting&#40;&#41;

;Description&#58;	   Changes the screen resolution, color dept and refresh rate

;Version&#58;		   1.1

;Parameters&#58;		$iWidth   - Width of the desktop screen in pixels. &#40;horizontal resolution&#41;

;				   $iHeight  - Height of the desktop screen in pixels. &#40;vertical resolution&#41;

;				   $iDepth   - Depth of the desktop screen in bits per pixel.

;				   $iRefresh - Refresh rate of the desktop screen in hertz.

;Return Value&#40;s&#41;&#58;   On Success - Screen is adjusted

;				   On failure - Message with error description

;Requirement&#40;s&#41;&#58;	Tested on AutoIt 3.2.10.0

;Autor&#40;s&#41;&#58;		  R.Gilman &#40;a.k.a rasim&#41;; special thanks to amel27

;					1.1 Galapo updated function to resize windows in line with resolution change

;

;===============================================================================

#include <WinAPI.au3>



Func _ChangeScreenRes&#40;$iWidth = @DesktopWidth, $iHeight = @DesktopHeight, $iDepth = @DesktopDepth, $iRefresh = @DesktopRefresh&#41;

	

	If $iWidth = &#34;&#34; Or $iWidth = -1 Or $iWidth = Default Then $iWidth = @DesktopWidth

	If $iHeight = &#34;&#34; Or $iHeight = -1 Or $iHeight = Default Then $iHeight = @DesktopHeight

	If $iDepth = &#34;&#34; Or $iDepth = -1 Or $iDepth = Default Then $iDepth = @DesktopDepth

	If $iRefresh = &#34;&#34; Or $iRefresh = -1 Or $iRefresh = Default Then $iRefresh = @DesktopRefresh

	

	Local Const $DISP_CHANGE_SUCCESSFUL = 0

	Local Const $DISP_CHANGE_RESTART	= 1

	Local Const $DISP_CHANGE_FAILED	 = -1

	Local Const $DISP_CHANGE_BADMODE	= -2

	Local Const $DISP_CHANGE_NOTUPDATED = -3

	Local Const $DISP_CHANGE_BADFLAGS   = -4

	Local Const $DISP_CHANGE_BADPARAM   = -5

	

	Local Const $CDS_TEST		   = 0x4

	Local Const $CDS_UPDATEREGISTRY = 0x1

	Local Const $CDS_GLOBAL		 = 0x8

	

	Local Const $DM_PELSWIDTH		= 0x80000

	Local Const $DM_PELSHEIGHT	   = 0x100000

	Local Const $DM_BITSPERPEL	   = 0x40000

	Local Const $DM_DISPLAYFREQUENCY = 0x400000

	

	Local Const $ENUM_CURRENT_SETTINGS   = -1

	Local Const $WM_DISPLAYCHANGE		= 0x007E

	Local Const $HWND_BROADCAST		  = 0xFFFF

	Local Const $SPI_SETNONCLIENTMETRICS = 0x2A

	

	Local Const $SPI_GETWORKAREA = 0x0030

	Local $tRECT, $pRECT

	local $aRet

	

	Local $DEVMODE, $DllRet

	

	$DEVMODE = DllStructCreate&#40;&#34;char dmDeviceName&#91;32&#93;;ushort dmSpecVersion;ushort dmDriverVersion;short dmSize;&#34; & _

							   &#34;ushort dmDriverExtra;dword dmFields;short dmOrientation;short dmPaperSize;short dmPaperLength;&#34; & _

							   &#34;short dmPaperWidth;short dmScale;short dmCopies;short dmDefaultSource;short dmPrintQuality;&#34; & _

							   &#34;short dmColor;short dmDuplex;short dmYResolution;short dmTTOption;short dmCollate;&#34; & _

							   &#34;byte dmFormName&#91;32&#93;;dword dmBitsPerPel;int dmPelsWidth;dword dmPelsHeight;&#34; & _

							   &#34;dword dmDisplayFlags;dword dmDisplayFrequency&#34;&#41;

							  

	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;EnumDisplaySettings&#34;, &#34;ptr&#34;, 0, &#34;dword&#34;, $ENUM_CURRENT_SETTINGS, _

					  &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;&#41;

	$DllRet = $DllRet&#91;0&#93;

	

	If $DllRet = 0 Then

		MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to get graphic mode&#34;&#41;

		SetError&#40;1&#41;

		Return False

	EndIf

	

	$VGA_MAP_KEY = RegRead&#40;&#34;HKLM\HARDWARE\DEVICEMAP\VIDEO&#34;, &#34;\Device\Video0&#34;&#41;

	$VGA_KEY = StringReplace&#40;$VGA_MAP_KEY, &#34;\Registry\Machine&#34;, &#34;HKLM&#34;&#41;

	

	RegWrite&#40;$VGA_KEY, &#34;PruningMode&#34;, &#34;REG_DWORD&#34;, 0&#41;

	

	DllStructSetData&#40;$DEVMODE, &#34;dmSize&#34;, DllStructGetSize&#40;$DEVMODE&#41;&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmPelsWidth&#34;, $iWidth&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmPelsHeight&#34;, $iHeight&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmBitsPerPel&#34;, $iDepth&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmDisplayFrequency&#34;, $iRefresh&#41;

	DllStructSetData&#40;$DEVMODE, &#34;dmFields&#34;, BitOR&#40;$DM_PELSWIDTH, $DM_PELSHEIGHT, $DM_BITSPERPEL, $DM_DISPLAYFREQUENCY&#41;&#41;



	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_TEST&#41;

	$DllRet = $DllRet&#91;0&#93;

	

	If $DllRet <> $DISP_CHANGE_SUCCESSFUL Then

		Switch $DllRet

			Case $DISP_CHANGE_RESTART

				MsgBox&#40;48, &#34;Warning&#34;, &#34;Restart your computer for change display settings&#34;&#41;

				SetError&#40;2&#41;

			Case $DISP_CHANGE_FAILED

				MsgBox&#40;16, &#34;Error&#34;, &#34;The video driver not set a new mode&#34;&#41;

				SetError&#40;1&#41;

				Return False

			Case $DISP_CHANGE_BADMODE

				MsgBox&#40;16, &#34;Error&#34;, &#34;Video mode not supported&#34;&#41;

				SetError&#40;1&#41;

				Return False

			Case $DISP_CHANGE_NOTUPDATED

				MsgBox&#40;16, &#34;Error&#34;, &#34;Unable to write in registry&#34;&#41;

				SetError&#40;1&#41;

				Return False

			Case $DISP_CHANGE_BADFLAGS

				MsgBox&#40;16, &#34;Error&#34;, &#34;Bad flags&#34;&#41;

				SetError&#40;1&#41;

				Return False

			Case $DISP_CHANGE_BADPARAM

				MsgBox&#40;16, &#34;Error&#34;, &#34;Bad parameters&#34;&#41;

				SetError&#40;1&#41;

				Return False

		EndSwitch

	EndIf



	$DllRet = DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;ChangeDisplaySettings&#34;, &#34;ptr&#34;, DllStructGetPtr&#40;$DEVMODE&#41;, &#34;int&#34;, $CDS_UPDATEREGISTRY&#41;

	$DllRet = $DllRet&#91;0&#93;



&#59;DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;SendMessage&#34;, &#34;hwnd&#34;, $HWND_BROADCAST, &#34;int&#34;, $WM_DISPLAYCHANGE, _

   &#59;		&#34;int&#34;, $SPI_SETNONCLIENTMETRICS, &#34;int&#34;, 0&#41;

	

	DllCall&#40;&#34;user32.dll&#34;, &#34;int&#34;, &#34;SendMessage&#34;, &#34;hwnd&#34;, $HWND_BROADCAST, &#34;int&#34;, $WM_DISPLAYCHANGE, _

						&#34;int&#34;, $iDepth, &#34;int&#34;, $iHeight * 2 ^ 16 + $iWidth&#41;



	RegWrite&#40;$VGA_KEY, &#34;PruningMode&#34;, &#34;REG_DWORD&#34;, 1&#41;

	

	$winlist = WinList&#40;&#41;

	For $i = 1 to $winlist&#91;0&#93;&#91;0&#93;

		If $winlist&#91;$i&#93;&#91;0&#93; <> &#34;&#34; AND IsVisible&#40;$winlist&#91;$i&#93;&#91;1&#93;&#41; Then

			If BitAnd&#40;WinGetState&#40;$winlist&#91;$i&#93;&#91;1&#93;&#41;, 32&#41; Then

				WinMove&#40;$winlist&#91;$i&#93;&#91;1&#93;,&#34;&#34;,0,0,@DesktopWidth,@DesktopHeight&#41;

			Else

				$winsize = WinGetPos&#40;$winlist&#91;$i&#93;&#91;1&#93;&#41;

				$tRECT = DllStructCreate&#40;$tagRECT&#41;

				$pRECT = DllStructGetPtr&#40;$tRECT&#41;

				$aRet = DllCall&#40;&#39;user32.dll&#39;, &#39;int&#39;, &#39;SystemParametersInfo&#39;, &#39;uint&#39;, $SPI_GETWORKAREA, &#39;uint&#39;, 0, &#39;ptr&#39;, $pRECT, &#39;uint&#39;, 0&#41;

				If Not @error And $aRet&#91;0&#93; Then

					$workarea_height = DllStructGetData&#40;$tRECT, &#39;Bottom&#39;&#41;

				Else

					$workarea_height = @DesktopHeight

				EndIf

				If $winsize&#91;0&#93;+$winsize&#91;2&#93; > @DesktopWidth Then 

					If $winsize&#91;2&#93; > @DesktopWidth - 10 Then 

						WinMove&#40;$winlist&#91;$i&#93;&#91;1&#93;,&#34;&#34;,10,default,@DesktopWidth - 20&#41;

					Else

						WinMove&#40;$winlist&#91;$i&#93;&#91;1&#93;,&#34;&#34;,10,default&#41;

					EndIf

				EndIf

				If $winsize&#91;1&#93;+$winsize&#91;3&#93; > $workarea_height Then 

					If $winsize&#91;3&#93; > $workarea_height - 10 Then 

						WinMove&#40;$winlist&#91;$i&#93;&#91;1&#93;,&#34;&#34;,default,10,default,$workarea_height - 20&#41;

					Else

						WinMove&#40;$winlist&#91;$i&#93;&#91;1&#93;,&#34;&#34;,default,10&#41;

					EndIf

				EndIf

			EndIf

		EndIf

	Next



	$DEVMODE = &#34;&#34;

	$DllRet  = &#34;&#34;



EndFunc



Func IsVisible&#40;$handle&#41;

  If BitAnd&#40;WinGetState&#40;$handle&#41;, 2&#41; Then 

	Return 1

  Else

	Return 0

  EndIf

EndFunc

Whether we want to extend that to minimised windows. But that's going to be a bit tricky as WinMove function doesn't work on minimised windows.

Regards,
Galapo.

#124 Tripredacus

Tripredacus

    Frequent Member

  • Expert
  • 234 posts
  • Interests:K-Mart-ian Legend
  •  
    United States

Posted 08 August 2012 - 08:35 PM

Necro bump!

Galapo, I point users to your program for the Gimagex HTA x64 build:
http://www.msfn.org/...post__p__885861

I am building the WinPE 4.0 x64 version of this and the SetResolution-x64.exe does not work. Not testing on a VM, so no screenshot. Here is the error:

AutoItv3 - SetResolution-x64.exe - Application Error
The instruction at 0x021ca3a0 referenced memory at 0x021ca3a0. The memory could not be written


Just an FYI in case this project is still active or not. Apparently, WinPE 4 seems to not need this as previous versions, since it defaulted to the native resolution of the display I am using.

#125 Brito

Brito

    Platinum Member

  • .script developer
  • 10616 posts
  • Location:boot.wim
  • Interests:I'm just a quiet simple person with a very quiet simple life living one day at a time..
  •  
    European Union

Posted 17 September 2012 - 12:35 PM

I updated the first post with a link to the version from 2010.

:cheers:




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users