<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; HTA Окно, размеры, координаты]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5932&amp;type=atom" />
	<updated>2011-06-30T03:15:51Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5932</id>
		<entry>
			<title type="html"><![CDATA[Re: HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49546#p49546" />
			<content type="html"><![CDATA[<p>Вот такое получилось.<br />Если кто надумает потестить, выдумывайте разные комбинации, полный экран/не полный экран. Оказалось не так всё просто.<br />Или предлагайте свои варианты, раз микрософт такую дырку оставил.</p><br /><div class="codebox"><pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;
&lt;title&gt;   Размеры и Координаты окна.&lt;/title&gt;
&lt;hta:application applicationname=&quot;nameHTA&quot; id=&quot;maxHTA&quot; border=&quot;thick&quot; contexmenu=&quot;yes&quot; scroll=&quot;no&quot; selection=&quot;yes&quot; singleinstance=&quot;yes&quot; windowstate=&quot;maximize&quot;&gt;&lt;/hta:application&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Windows-1251&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;okno5.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;width:55%; height:233px; margin:33px auto 0 auto;&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
text
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre></div><div class="codebox"><pre><code>//ширина, высота, лево, верх, смещение лево, смещение верх, флаг max=1/min=0
var winS=[500, 400, 156, 123, 0, 0, 0];
var addr=&quot;HKCU\\Software\\CoordSizesDispl\\data&quot;;



onload=function(){
var obj, t, l;
obj=new ActiveXObject(&quot;WScript.Shell&quot;);
//пробуем прочесть, если записи в реестре нет, получаем ошибку
try{obj.RegRead(addr);};
//если нет, пишем новую запись
catch(er){obj.RegWrite(addr, winS.join(&quot; &quot;));};
//теперь прочтётся обязательно
winS=obj.RegRead(addr).split(&quot; &quot;);
if(winS[6]==0){//если windowstate=&quot;normal&quot;
window.resizeTo(winS[0], winS[1]);//размеры окна
window.moveTo(winS[2], winS[3]);//координаты окна
t=window.screenTop-winS[3];//получить разницу
l=window.screenLeft-winS[2];
if(t!=winS[5]||l!=winS[4]){
//высота заголовка зависит от темы используемой пользователем
winS[5]=t;//смещение необходимо учитывать при сохранении
winS[4]=l;//иначе окно будет скакать по экрану
//если есть изменения, сохранить. изменения могут образоваться при изменении темы в винде, заголовок и бордюр изменятся
obj.RegWrite(addr, winS.join(&quot; &quot;));}};//сохранить смещение
 };//
//
onbeforeunload=function(){
var w1, w2, w3, h1, h2, h3, f;
w1=document.documentElement.clientWidth+(winS[4]*3);
h1=document.documentElement.clientHeight+(+winS[5]+(winS[4]*2));
w2=window.screen.availWidth;
h2=window.screen.availHeight;//отбрасывает высоту панели задач
w3=window.screenLeft-winS[4];
h3=window.screenTop-winS[5];
//если полный экран f=true; иначе f=false;
if(w1&gt;w2&amp;&amp;h1&gt;h2&amp;&amp;w3&lt;0&amp;&amp;h3&lt;0){f=true;}else{f=false;};
//пишем если, полное окно и флаг не полное  f=true; и winS[6]=0
//пишем если, не полное окно и флаг полное f=false; и winS[6]=1
//если ни так ни эдак, значит окно не изменилось
if((winS[6]==0&amp;&amp;f)||(winS[6]==1&amp;&amp;!f)){maxNormal();}
else{//сохранить если окно не полное и есть изменения
if(winS[6]==0&amp;&amp;(w1!=winS[0]||h1!=winS[1]||w3!=winS[2]||h3!=winS[3])){
saveData(w1, h1, w3, h3)}};
 };//
//
onresize=function(){
var w1, w2, w3, h1, h2, h3;
w1=document.documentElement.clientWidth+(winS[4]*3);
h1=document.documentElement.clientHeight+(+winS[5]+(winS[4]*2));
w2=window.screen.availWidth;
h2=window.screen.availHeight;//отбрасывает высоту панели задач
w3=window.screenLeft-winS[4];
h3=window.screenTop-winS[5];
if(winS[6]==1&amp;&amp;(w1&lt;w2&amp;&amp;h1&lt;h2&amp;&amp;w3&gt;=0&amp;&amp;h3&gt;=0)){
//сначала надо заменить в файле &quot;maximize&quot; на &quot;normal&quot;, иначе ошибка
maxNormal();
//теперь можно менять
window.resizeTo(winS[0], winS[1]);
window.moveTo(winS[2], winS[3]);}
else{
//не пишем если развернулось в полный экран
if(!(w1&gt;w2&amp;&amp;h1&gt;h2&amp;&amp;w3&lt;0&amp;&amp;h3&lt;0)){
//пишем если есть изменения
if(w1!=winS[0]||h1!=winS[1]||w3!=winS[2]||h3!=winS[3]){
saveData(w1, h1, w3, h3)}}};
 };//
//
function saveData(w1, h1, w3, h3){
winS[0]=w1;
winS[1]=h1;
winS[2]=w3;
winS[3]=h3;
new ActiveXObject(&quot;WScript.Shell&quot;).RegWrite(addr, winS.join(&quot; &quot;));
 };//
//
function maxNormal(){
var w1, w2, w3, h1, h2, h3;
w1=maxHTA.commandLine;//читаем путь к файлу
w1=w1.slice(1, w1.length-2);//удалить кавычки
h1=readFile(w1);//читаем файл в массив
h2=h1.length;
h3=0;
while(h2--){//ищем в файле строку с windowstate
if(h1[h2].toLocaleLowerCase().indexOf(&quot;windowstate&quot;)&gt;=0){h3=1; break;}};
if(h3==1){//пишем только если в файле нашлась строка windowstate
if(winS[6]==0){w2=/normal/; w3=&quot;maximize&quot;; winS[6]=1;}
else{w2=/maximize/; w3=&quot;normal&quot;; winS[6]=0;};
h1[h2]=h1[h2].replace(w2, w3);
writeFile(w1, h1);
new ActiveXObject(&quot;WScript.Shell&quot;).RegWrite(addr, winS.join(&quot; &quot;));}
 };//
//
function readFile(way){//чтение файла в массив
var f=&quot;&quot;, c=&quot;&quot;, m=[];
f=new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
c=f.FileExists(way);
if(!c){return null;};//если нет файла на диске
c=f.OpenTextFile(way, 1);
f=0;
while(!c.AtEndOfStream){m[f]=c.ReadLine(); f++;};
c.Close();
return m;
 };//
//
function writeFile(w, m){//принимает путь к файлу и массив
var i, fso, f, a, b, c, l=m.length;
fso=new ActiveXObject(&quot;Scripting.FileSystemObject&quot;);
f=fso.FileExists(w);
if(f){//если файла нет на диске, сразу пишем новый файл
f=fso.GetFile(w);
a=f.Attributes;
a=a.toString(2);//перегоняем в двоичное
b=a.length-1;//взять младший бит чтение/запись
if(a.charAt(b)==1){f.Attributes=32;}};//сбросить бит чтение/запись
c=fso.CreateTextFile(w, true);
for(i=0; i!=l; i++){c.WriteLine(m[i]);};//цикл записи файла
c.Close();
 };//</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-06-30T03:15:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49546#p49546</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49422#p49422" />
			<content type="html"><![CDATA[<p>Пока не очень удачно получилось с полностью открытым окном, с этим буду разбираться, для меня это сейчас актуально, игра готова, подбираю по мелочи.</p><p>Пока такая версия.</p><p>HTML<br /></p><div class="codebox"><pre><code>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;
&lt;title&gt;   Размеры и Координаты окна.&lt;/title&gt;
&lt;hta:application applicationname=&quot;nameHTA&quot; id=&quot;gameP&quot; border=&quot;thick&quot; contexmenu=&quot;yes&quot; icon=&quot;service/ornament.ico&quot; scroll=&quot;no&quot; selection=&quot;yes&quot; singleinstance=&quot;yes&quot; windowstate=&quot;normal&quot;&gt;&lt;/hta:application&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=Windows-1251&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;okno2.js&quot;&gt;&lt;/script&gt;

&lt;/head&gt;

&lt;body&gt;

&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; style=&quot;width:55%; height:233px; margin:33px auto 0 auto;&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
text
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>JS<br /></p><div class="codebox"><pre><code>var arr=[];
//ширина, высота, лево, верх, смещение лево, смещение верх
arr[0]=[500, 400, 156, 123, 0, 0];
arr[1]=&quot;HKCU\\Software\\CoordSizesDispl\\data&quot;;

onload=function(){
var obj, t, l;
obj=new ActiveXObject(&quot;WScript.Shell&quot;);
//пробуем прочесть, если записи в реестре нет, получаем ошибку
try{obj.RegRead(arr[1]);};
//если нет, пишем новую запись
catch(er){obj.RegWrite(arr[1], arr[0].join(&quot; &quot;));};
//теперь прочтётся обязательно
arr[0]=obj.RegRead(arr[1]).split(&quot; &quot;);
window.resizeTo(arr[0][0], arr[0][1]);//размеры окна
window.moveTo(arr[0][2], arr[0][3]);//координаты окна
t=window.screenTop-arr[0][3];//получить разницу
l=window.screenLeft-arr[0][2];
if(t!=arr[0][5]||l!=arr[0][4]){
//высота заголовка зависит от темы используемой пользователем
arr[0][5]=t;//смещение необходимо учитывать при сохранении
arr[0][4]=l;//иначе окно будет скакать по экрану
//если есть изменения, сохранить. изменения могут образоваться при изменении темы в винде, заголовок и бордюр изменятся
obj.RegWrite(arr[1], arr[0].join(&quot; &quot;));};//сохранить смещение
 };//


//
onbeforeunload=function(){
arr[0][0]=document.documentElement.clientWidth+(arr[0][4]*3);
arr[0][1]=document.documentElement.clientHeight+(+arr[0][5]+(arr[0][4]*2));
arr[0][3]=window.screenTop-arr[0][5]*1;
arr[0][2]=window.screenLeft-arr[0][4]*1;
//пишем новое
new ActiveXObject(&quot;WScript.Shell&quot;).RegWrite(arr[1], arr[0].join(&quot; &quot;));
 };//</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-06-25T10:24:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49422#p49422</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49402#p49402" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>window.screnX; window.screenY</code></pre></div><p>. По-мoeмy тaк.</p>]]></content>
			<author>
				<name><![CDATA[Ottiwell_Wood]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26902</uri>
			</author>
			<updated>2011-06-24T14:36:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49402#p49402</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49357#p49357" />
			<content type="html"><![CDATA[<p>Это я всё знаю, только это не то.<br />Неужели ни кто ни когда не пытался сохранить координаты и размеры окна, чтобы на следующем старте окно поставить в тоже самое место и с теми же размерами, что были при закрытии окна?<br />Или это только меня бесит, что окно прыгает по всему экрану с ненужными мне размерами?</p><p>Сегодня целый день убил на решение, вроде получилось.<br />Наверно нужно сделать тестовый файлик и выложить, или не надо?</p><br /><br /><p>А что гуглить?, я только за.</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-06-23T17:07:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49357#p49357</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49333#p49333" />
			<content type="html"><![CDATA[<p>А фик его знает как 8)<br />Вот о чем я ведаю:</p><div class="codebox"><pre><code>screen.width
screen.height

document.body.offsetWidth
document.body.offsetHeight

document.body.clientWidth
document.body.clientHeight

document.body.scrollWidth
document.body.scrollHeight</code></pre></div><p>Дальше погуглите пожалуйста сами, что да как.</p>]]></content>
			<author>
				<name><![CDATA[DnsIs]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26282</uri>
			</author>
			<updated>2011-06-23T05:28:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49333#p49333</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[HTA Окно, размеры, координаты]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=49319#p49319" />
			<content type="html"><![CDATA[<p>Как узнать внешние размеры окна, с заголовком, бордюрами?<br />Как узнать координаты окна, опять же внешние?<br />Как узнать размеры заголовка, бордюра?</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-06-22T16:08:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=49319#p49319</id>
		</entry>
</feed>
