2015-01-05 4 views
0

간단한 Windows 사이드 바 가젯을 작성하여 간단한 메모로 사용합니다 (textarea).Windows 가젯이 데이터를 저장할 수 있습니까?

enter image description here

나는 평소와 같이 gadget.xml 매니페스트 파일과 .html 파일은 아래를 참조했다.

일부 데이터를 읽거나 가제트에서 일부 데이터를 저장하는 방법은 무엇입니까?

내가이는 자바 스크립트 일반적으로 불가능 알고 (참고 : 나는 데이터의 지속성을 원하기 때문에 localstorage 수없는 사용), 그래서 어떻게 저장/A Windows Gadget 내에서 데이터를 읽어?


<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=Unicode" /> 
     <title>NeverForget</title> 
     <style type="text/css"> 
     body 
     { 
      margin: 0; 
      width: 300px; 
      height: 200px;    
      background-color: transparent; 
     } 
     #gadgetContent 
     { 
      width: 100%; 
      height: 100%; 
      overflow: hidden; 
      border: none; 
      background-color: transparent; 
     } 
     </style> 
     <script type="text/jscript" language="jscript"> 
      function init() { 
       // how to load notes from a file here on startup? 
      } 
      window.onkeydown = function() { 
       // how to save data to file? 
      } 
     </script> 
    </head> 

    <body onload="init()"> 
      <textarea id="gadgetContent">Bonjour</textarea> 
    </body> 
</html> 

답변

1

이들 중 하나를 시도해보십시오

C에 저장된 Settings.ini 파일 (에서 읽기/쓰기로하는 데 사용할 수있는 붙박이 methods of the System.Gadget.Settings object 있습니다
  1. : \ 사용자 \ [user] \ AppData \ Local \ Microsoft \ Windows Sidebar) 가제트를 닫거나 제거하면이 정보가 손실됩니다.

  2. 을 사용하면 어디에서나 폴더/파일을 만들거나 읽거나 쓸 수 있습니다. 제한 : 파일은 유니 코드 또는 ASCII로만 저장할 수 있습니다.

  3. ADO Stream object을 사용하여 파일을 만들거나 읽거나 쓸 수 있습니다. 제한 : 폴더를 만들 수 없습니다. FileSystemObject와 함께 사용해야합니다. 장점 : 컴퓨터에있는 코드 페이지를 사용할 수 있습니다.

utf-8을 사용하여 텍스트 파일을 저장하는 것이 좋기 때문에 아래 예제에서는 세 번째 방법을 사용하지만 일부 오류 처리 방법을 사용하지 않을 수도 있습니다. 다행히 사이드 바는 knownfoldersknownfolderpaths 그래서 예를 들어 문서 폴더의 경로를 찾는 데 사용할 수 있습니다

- (NB이 예는 script published by Andrew Urquhart을 기반으로)

var docs = System.Shell.knownFolderPath("Documents"); 

백 슬래시 기억 한 쉽게입니다 자바 스크립트에서 이스케이프 문자이므로 문자열의 경로에 백 슬래시가 두 배로 있어야합니다.

<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
<title>NeverForget</title> 
 
<style type="text/css"> 
 
<!-- 
 
body {margin:0;width:300px;height:200px;background-color:transparent;padding:10px;} 
 
#gadgetContent {width:280px;height:144px;overflow:auto;border:1px solid black;background-color:#eee;} 
 
button {margin-left:66px;margin-top:10px;} 
 
#message {display:none;width:280px;height:180px;position:absolute;top:10px;left:10px;background-color:#eee;border:1px solid red;} 
 
#messageContent {width:278px;height:144px;word-wrap:break-word;overflow-y:auto;} 
 
#newButton {position:absolute;bottom:10px;left:54px;} 
 
--> 
 
</style> 
 
<script type="text/jscript"> 
 
//globals 
 
var myFolderPath=System.Shell.knownFolderPath("Documents")+"\\myFiles"; 
 
//end globals 
 
function showMessage(msg){ 
 
message.style.display="block"; 
 
messageContent.innerText=msg; 
 
} 
 
function closeMessage(){ 
 
message.style.display="none"; 
 
messageContent.innerText=""; 
 
} 
 
function loadFile(strAbsoluteFilePath, strCharSet){ 
 
var adReadAll=-1, adReadLine=-2, strFileContents="", objStream=new ActiveXObject("ADODB.Stream"), fso=new ActiveXObject("Scripting.FileSystemObject"); 
 
try{ 
 
    if(!strAbsoluteFilePath){ 
 
    throw new Error(1, "Required parameter \"strAbsoluteFilePath\" was not defined"); 
 
    } 
 
    if(!strCharSet){ 
 
    throw new Error(2, "Required parameter \"strCharSet\" was not defined"); 
 
    } 
 
    if(!fso.FolderExists(myFolderPath)){ 
 
    throw new Error(3, "Folder \""+myFolderPath+"\" does not exist"); 
 
    } 
 
    objStream.Open(); 
 
    try{ 
 
    objStream.CharSet=strCharSet; 
 
    objStream.LoadFromFile(strAbsoluteFilePath); 
 
    strFileContents=objStream.ReadText(adReadAll); 
 
    gadgetContent.innerText=strFileContents; 
 
    } 
 
    catch(err){ 
 
    throw new Error(err.number, "Loading failed:\r\n" + err.description); 
 
    } 
 
    finally{ 
 
    objStream.Close(); // Always close the stream regardless of what happens 
 
    objStream=null; 
 
    fso=null; 
 
    } 
 
} 
 
catch(err){ 
 
    showMessage("Function loadFile() failed with parameters strAbsoluteFilePath=\"" + strAbsoluteFilePath + "\", strCharSet=\"" + strCharSet + "\". Message=\r\n" + err.description+"\r\nError Number: "+err.number); 
 
} 
 
} 
 
function saveFile(strAbsoluteFilePath, strCharSet, strFileContents, blnOverwrite){ 
 
var adSaveCreateNotExist=1, adSaveCreateOverWrite=2, objStream = new ActiveXObject("ADODB.Stream"), fso=new ActiveXObject("Scripting.FileSystemObject"); 
 
try{ 
 
    if(!strAbsoluteFilePath){ 
 
    throw new Error(1, "Required parameter \"strAbsoluteFilePath\" was not defined"); 
 
    } 
 
    if(!strCharSet){ 
 
    throw new Error(2, "Required parameter \"strCharSet\" was not defined"); 
 
    } 
 
    if(typeof strFileContents != "string"){ 
 
    throw new Error(3, "Required parameter \"strFileContents\" was not a string"); 
 
    } 
 
    if(!fso.FolderExists(myFolderPath)){ 
 
    fso.CreateFolder(myFolderPath); 
 
    } 
 
    objStream.Open(); 
 
    try{ 
 
    objStream.CharSet=strCharSet; 
 
    objStream.WriteText(strFileContents); 
 
    objStream.SaveToFile(strAbsoluteFilePath, (blnOverwrite ? adSaveCreateOverWrite : adSaveCreateNotExist)); 
 
    return true; 
 
    } 
 
    catch(err){ 
 
    throw new Error(err.number, "SaveToFile failed:\r\n" + err.description); 
 
    } 
 
    finally{ 
 
    objStream.Close(); // Always close the stream regardless of what happens 
 
    objStream=null; 
 
    fso=null; 
 
    } 
 
    return false; 
 
} 
 
catch(err){ 
 
    showMessage("Function saveFile() failed with parameters strAbsoluteFilePath=\"" + strAbsoluteFilePath + "\", strCharSet=\"" + strCharSet + "\", strFileContents=\"" + strFileContents + "\", blnOverwrite=\"" + blnOverwrite + "\". Message=\r\n" + err.description+"\r\nError Number: "+err.number); 
 
} 
 
} 
 
function init(){ 
 
loadButton.onclick=function(){loadFile(myFolderPath+"\\myFile.txt","utf-8");}; 
 
saveButton.onclick=function(){saveFile(myFolderPath+"\\myFile.txt", "utf-8", gadgetContent.innerText, true);}; 
 
closeButton.onclick=closeMessage; 
 
} 
 
</script> 
 
</head> 
 
<body onload="init()"> 
 
<textarea id="gadgetContent">Bonjour</textarea> 
 
<div id="message"> 
 
    <div id="messageContent"></div> 
 
    <div id="newButton"><button id="closeButton">Close</button></div> 
 
</div> 
 
<button id="loadButton">Load</button><button id="saveButton">Save</button> 
 
</body> 
 
</html>

+0

와우 덕분에 너무 많은 @mystifeid! 이것은 정말 대단합니다! 마지막으로, 텍스트 상자와 본문을 완전히 투명하게 만드는 방법은 무엇입니까? 우리는 바탕 화면을 텍스트 아래에 표시하고 흰색/회색 배경은 볼 수 없습니다. – Basj

+0

html로 선언하는 방법은 1px x 1px 투명 PNG를 ag : background (보십시오 참고 [here] (http://msdn.microsoft.com/en-us/library/ff486136.aspx) 참조) 크기를 사용하여보십시오 (예 : imgBackground.style.width = "100 %"; imgBackground.style.height = "100 %";) – mystifeid

+0

검은 색 텍스트가 html 또는 html로 추가되었습니다. 일반 자바 스크립트 메서드는 투명 g : 배경을 사용할 때 색상이 마젠타로 나타납니다. 추가/g : 텍스트 개체로 텍스트를 제거하여이 문제를 해결할 수 있습니다 (http://msdn.microsoft.com/ko-kr/library/ff486146.aspx). 이것은, btw, 귀하의 원래 질문의 범위를 벗어납니다. 독서를 시도하고 괜찮은 시도를 해보십시오. 며칠 후 더 이상 진전이 없으면 다른 질문을하고 CSS/스크립트/HTML을 제공하십시오. – mystifeid