Usuário com melhor resposta
Ajuda com Java Script

Pergunta
-
Pessoal, boa tarde!
Eu fiz esse java script abaixo para abrir meu sistema maximizado e para caso a configuração de vídeo do usuário não for 1280 para enviar uma mensagem, no entanto eu gostaria de melhora-lo inserindo o seguinte. Depois da mensagem gostaria que viesse a seguinte pergunta. "Deseja ajustar sua configuração de vídeo agora?" e por dois botôes um de sim e outro de não.
Caso o usuário clique em sim eu modifico a configuração de vídeo para a que meu sistema mais se adequa, em caso negativo abre normalmente o sistema.
Alguem saberia me ajudar?
Grato desde já
Gustavo
Code Snippet<script language="JavaScript1.2">
top.window.moveTo(0,0);
if (document.all)
{ top.window.resizeTo(screen.availWidth,screen.availHeight); }
else if
(document.layers || document.getElementById)
{
if
(top.window.outerHeight < screen.availHeight || top.window.outerWidth <
screen.availWidth)
{ top.window.outerHeight = top.screen.availHeight;
top.window.outerWidth = top.screen.availWidth; }
}
if(screen.width != "1280") {
alert('Esse site será melhor visualizado na seguinte configuração de vídeo: 1280X1024. Outras configurações podem gerar discrepâncias no layout!')
}</script>
Respostas
-
Usando apenas JavaScript é impossivel Gustavo, mas você pode usar o próprio C# para fazer isso. Para tal, crie uma classe chamada Resolution.cs no seu projeto, e cole o código abaixo:
Code Snippetusing
System;using
System.Windows.Forms;using
System.Runtime.InteropServices;[
StructLayout(LayoutKind.Sequential)]public
struct DEVMODE1{
[
MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public short dmOrientation; public short dmPaperSize; public short dmPaperLength; public short dmPaperWidth; public short dmScale; public short dmCopies; public short dmDefaultSource; public short dmPrintQuality; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate;[
MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; public short dmLogPixels; public short dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight;};
class
User_32{
[
DllImport("user32.dll")] public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);[
DllImport("user32.dll")] public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); public const int ENUM_CURRENT_SETTINGS = -1; public const int CDS_UPDATEREGISTRY = 0x01; public const int CDS_TEST = 0x02; public const int DISP_CHANGE_SUCCESSFUL = 0; public const int DISP_CHANGE_RESTART = 1; public const int DISP_CHANGE_FAILED = -1;}
namespace
Resolution{
public class CResolution{
public CResolution(int a, int b){
Screen screen = Screen.PrimaryScreen;dm.dmDeviceName =
new String(new char[32]);dm.dmFormName =
new String(new char[32]);dm.dmSize = (
short)Marshal.SizeOf(dm); if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)){
dm.dmPelsWidth = iWidth;
dm.dmPelsHeight = iHeight;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); if (iRet == User_32.DISP_CHANGE_FAILED){
MessageBox.Show("Unable to process your request"); MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);}
else{
iRet =
User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); switch (iRet){
case User_32.DISP_CHANGE_SUCCESSFUL:{
break; //successfull change}
case User_32.DISP_CHANGE_RESTART:{
MessageBox.Show("Description: You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); break; //windows 9x series you have to restart}
default:{
MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); break; //failed to change}
}
}
}
}
}
}
Feito isso, quando quiser mudar a resolução do sistema, é só instanciar a classe. Para o seu caso, basta usar o seguinte código:
Code Snippetusing
System;using
System.Configuration;using
System.Data;using
System.Linq;using
System.Web;using
System.Web.Security;using
System.Web.UI;using
System.Web.UI.HtmlControls;using
System.Web.UI.WebControls;using
System.Web.UI.WebControls.WebParts;using
System.Xml.Linq;using
System.Windows.Forms;public
partial class _Default : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
int ScreenWidth, ScreenHeight;ScreenWidth =
Screen.PrimaryScreen.Bounds.Width;ScreenHeight =
Screen.PrimaryScreen.Bounds.Height; if ((ScreenWidth != 1280) && (ScreenHeight != 1024)){
if (MessageBox.Show("Esse site ser melhor visualizado na seguinte configura‡Æo de v¡deo: 1280X1024. Outras configura‡äes podem gerar discrepƒncias no layout!\nDeseja alterar a resolu‡Æo?", "Confirma", MessageBoxButtons.YesNo) == DialogResult.Yes){
Resolution.
CResolution CR = new Resolution.CResolution(1280, 1024);}
}
}
}
Testei aqui e funcionou...
Espero que de certo no seu site.
Todas as Respostas
-
Cara, pelo que eu sei, não tem como redimensionar a resolução do usuário usando JavaScript....
Geralmente, o sistema que se adequa ao usuário, e não o usuário que se adequa ao sistema...
Leve em consideração que a resolução 1280x1024 não é a preferida entre os usuários, e ela não é compativel com muitos computadores por ai...
-
Olá Gustavo,
Seria isso que você precisa?
<script language="JavaScript1.2">
top.window.moveTo(0,0);
if (document.all)
{ top.window.resizeTo(screen.availWidth,screen.availHeight); }
else if
(document.layers || document.getElementById)
{
if
(top.window.outerHeight < screen.availHeight || top.window.outerWidth <
screen.availWidth)
{ top.window.outerHeight = top.screen.availHeight;
top.window.outerWidth = top.screen.availWidth; }
}
if(screen.width != "1280") {
alert('Esse site será melhor visualizado na seguinte configuração de vídeo: 1280X1024. Outras configurações podem gerar discrepâncias no layout!')var r=confirm("Deseja ajustar sua configuração de vídeo agora?");
if (r==true)
{//Aqui estará o códgo para o ajuste das configurações de vídeo
document.write(" OK foi pressionado");
}
else
{
document.write("Cancelar foi pressionado");
}
}</script>
-
Olá Gustavo,
Estava pesquisando na internet (http://forum.imasters.uol.com.br/index.php?showtopic=221329) e vi que não é possível alterar a reolução. Conforme o Guilherme tinha comentado...
Desculpas pelo meu post anterior, estou começando a desenvolver agora.
Abraços -
Impossível? acho que não, pois eu ja entrei em alguns sites que tem essa funcionalidade....e hoje em dia na informática é praticamente tudo possível rsrs.
Mas muitissimo obrigado pela ajuda!
Vou continuar pesquisando e se alguem souber a solução por favor faça um post .
Grato desde já
Gustavo
-
Existe como eu adaptar esse VBScript no java Script ou no código do meu sistema em C#??
Esse script abaixo modifica a resolução de tela.
Code SnippetWshShell.RegWrite "HKEY_CURRENT_CONFIG\System\CurrentControlSet\SERVICES\LMIMIRR\DEVICE0\DefaultSettings.XResolution","1024","REG_DWORD"
WshShell.RegWrite "HKEY_CURRENT_CONFIG\System\CurrentControlSet\SERVICES\LMIMIRR\DEVICE0\DefaultSettings.YResolution" ,"768","REG_DWORD"
Att
Gustavo
-
Outra maneira de fazer isso, mas agora usando a api do windows...precisa fazer isso via meu sistema...
Code Snippet#include <windows.h>
int main()
{
DEVMODE dm;
ZeroMemory( &dm, sizeof( DEVMODE ) );
dm.dmSize = sizeof( DEVMODE );
dm.dmBitsPerPel = 32;
dm.dmPelsWidth = 1024;
dm.dmPelsHeight = 768;
dm.dmDisplayFrequency = 60;
dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY;
ChangeDisplaySettings( &dm, 0 );
return 0;
}
-
Usando apenas JavaScript é impossivel Gustavo, mas você pode usar o próprio C# para fazer isso. Para tal, crie uma classe chamada Resolution.cs no seu projeto, e cole o código abaixo:
Code Snippetusing
System;using
System.Windows.Forms;using
System.Runtime.InteropServices;[
StructLayout(LayoutKind.Sequential)]public
struct DEVMODE1{
[
MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmDeviceName; public short dmSpecVersion; public short dmDriverVersion; public short dmSize; public short dmDriverExtra; public int dmFields; public short dmOrientation; public short dmPaperSize; public short dmPaperLength; public short dmPaperWidth; public short dmScale; public short dmCopies; public short dmDefaultSource; public short dmPrintQuality; public short dmColor; public short dmDuplex; public short dmYResolution; public short dmTTOption; public short dmCollate;[
MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string dmFormName; public short dmLogPixels; public short dmBitsPerPel; public int dmPelsWidth; public int dmPelsHeight; public int dmDisplayFlags; public int dmDisplayFrequency; public int dmICMMethod; public int dmICMIntent; public int dmMediaType; public int dmDitherType; public int dmReserved1; public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight;};
class
User_32{
[
DllImport("user32.dll")] public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);[
DllImport("user32.dll")] public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags); public const int ENUM_CURRENT_SETTINGS = -1; public const int CDS_UPDATEREGISTRY = 0x01; public const int CDS_TEST = 0x02; public const int DISP_CHANGE_SUCCESSFUL = 0; public const int DISP_CHANGE_RESTART = 1; public const int DISP_CHANGE_FAILED = -1;}
namespace
Resolution{
public class CResolution{
public CResolution(int a, int b){
Screen screen = Screen.PrimaryScreen;dm.dmDeviceName =
new String(new char[32]);dm.dmFormName =
new String(new char[32]);dm.dmSize = (
short)Marshal.SizeOf(dm); if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm)){
dm.dmPelsWidth = iWidth;
dm.dmPelsHeight = iHeight;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST); if (iRet == User_32.DISP_CHANGE_FAILED){
MessageBox.Show("Unable to process your request"); MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);}
else{
iRet =
User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY); switch (iRet){
case User_32.DISP_CHANGE_SUCCESSFUL:{
break; //successfull change}
case User_32.DISP_CHANGE_RESTART:{
MessageBox.Show("Description: You Need To Reboot For The Change To Happen.\n If You Feel Any Problem After Rebooting Your Machine\nThen Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); break; //windows 9x series you have to restart}
default:{
MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); break; //failed to change}
}
}
}
}
}
}
Feito isso, quando quiser mudar a resolução do sistema, é só instanciar a classe. Para o seu caso, basta usar o seguinte código:
Code Snippetusing
System;using
System.Configuration;using
System.Data;using
System.Linq;using
System.Web;using
System.Web.Security;using
System.Web.UI;using
System.Web.UI.HtmlControls;using
System.Web.UI.WebControls;using
System.Web.UI.WebControls.WebParts;using
System.Xml.Linq;using
System.Windows.Forms;public
partial class _Default : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
int ScreenWidth, ScreenHeight;ScreenWidth =
Screen.PrimaryScreen.Bounds.Width;ScreenHeight =
Screen.PrimaryScreen.Bounds.Height; if ((ScreenWidth != 1280) && (ScreenHeight != 1024)){
if (MessageBox.Show("Esse site ser melhor visualizado na seguinte configura‡Æo de v¡deo: 1280X1024. Outras configura‡äes podem gerar discrepƒncias no layout!\nDeseja alterar a resolu‡Æo?", "Confirma", MessageBoxButtons.YesNo) == DialogResult.Yes){
Resolution.
CResolution CR = new Resolution.CResolution(1280, 1024);}
}
}
}
Testei aqui e funcionou...
Espero que de certo no seu site.
-
-
Guilherne, olha o que aconteceu.
Primeiro que apesar de eu setar minha configuração para 1024X768 o programa sempre atribui as va´riáveis screenwidth e screenheigth os valores 1280 e 800 respectivamente, e como o if tem a codição && e não || acaba não entrando no if.
Mas mesmo forçando ele tentar modificar da erro e não modifica.
Porque será?
Att
Gustavo
-
-
-
Cara, muito cedo para comemorar...funcionou localmente, mas remotamente quando acesso servidor não...segue abixo o erro:
Server Error in '/BSHInfo' Application.
Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.
Source Error:
Line 29: { Line 30: Line 31: if (MessageBox.Show("Esse site ser melhor visualizado na seguinte configura‡Æo de v¡deo: 1280X1024. Outras configura‡äes podem gerar discrepƒncias no layout!\nDeseja alterar a resolu‡Æo?", "Confirma", MessageBoxButtons.YesNo) == DialogResult.Yes) Line 32: { Line 33:
Source File: e:\Recursos\inetpub\wwwroot\Intranet\Intranet.bsh\sistemas\sig\BSHInfo\Index.aspx.cs Line: 31
Stack Trace:
[InvalidOperationException: Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation. Specify the ServiceNotification or DefaultDesktopOnly style to display a notification from a service application.] System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp) +1799842 System.Windows.Forms.MessageBox.Show(String text, String caption, MessageBoxButtons buttons) +21 Index.Page_Load(Object sender, EventArgs e) in e:\Recursos\inetpub\wwwroot\Intranet\Intranet.bsh\sistemas\sig\BSHInfo\Index.aspx.cs:31 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +33 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +47 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1436
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
-
Alguem sabe como resolver esse problema?
eu poderia utilizar js (comando alert) no evento onclick de um button por exemplo, mas essa messagem não esta vinculada a nenhum objeto, ela simplismente deve aparecer na hora que o usuário entra na pagina.
Alguem sugere alguma coisa??
Grato desde já
Gustavo
-
Eu até sei como executar um javascript sem o vincular a nenhum objeto, mas usando o modo que eu conheço não daria pra pegar o valor do confirm e poder usar a condição...
Vou dar uma olhada no MessageBox, já usei ele em um servidor remoto, só não lembro se tive que configurar algo...
-
Ok, tente mudar aquele if para esse daqui:
Code Snippetprotected void Page_Load(object sender, EventArgs e)
{
int ScreenWidth, ScreenHeight;
ScreenWidth = Screen.PrimaryScreen.Bounds.Width;
ScreenHeight = Screen.PrimaryScreen.Bounds.Height;
if ((ScreenWidth != 1280) && (ScreenHeight != 1024))
{
if (MessageBox.Show("Esse site ser melhor visualizado na seguinte configura‡Æo de v¡deo: 1280X1024. Outras configura‡äes podem gerar discrepƒncias no layout!\nDeseja alterar a resolu‡Æo?", "Confirma", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) == DialogResult.Yes)
{
Resolution.CResolution CR = new Resolution.CResolution(1280, 1024);
}
}
}
-
-
-
-
-
-
-
-
-