2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« 2010年7月 | トップページ | 2010年9月 »

2010年8月26日 (木)

IEで表示中のアクティブなHTMLソース

「ソースの表示」や「名前を付けて保存」で得られるのは、オリジナルなHTMLソースで、IEで表示中のアクティブなHTMLソースはどうしたら得られるか?

「印刷プレビュー」します。このとき、

保護モード無効のページなら、

%Temp%

保護モード有効のページなら、

%Temp%\Low

に、2OE67IIM.htm のような 英大文字数字8桁.htm のファイルが一時的に出来ます。

これを開いて、「完全」や「アーカイブ」で保存したり、メモ帳で開くなり、コピーするなりします。

2010年8月25日 (水)

Webページが「完全」や「アーカイブ」で保存できないとき(その2)

Web ページの保存
!この Web ページは、正しく保存されない可能性があります。保存する場合、ファイルに目的の情報が含まれていることを確認してください。
 ページを保存しますか?

Webページによりけりと思いますが、以下の方法で保存できることがあります。

「印刷プレビュー」します。このとき、

保護モード無効のページなら、

%Temp%

保護モード有効のページなら、

%Temp%\Low

に、2OE67IIM.htm のような 英大文字数字8桁.htm のファイルが一時的に出来ます。

これを開いて、「完全」や「アーカイブ」で保存します。

2010年8月22日 (日)

VistaやWindows7で、XPの頃にNTFS代替streamに格納された「概要」を表示する。

cscript SummaryInfo.vbs ファイル...

Option Explicit
Dim Item
Dim oSum
Set oSum=New SummaryInfo
For Each Item In WScript.Arguments
  WScript.StdOut.WriteLine Item
  Call oSum.GetSummaryInfo(Item)
  WScript.Echo "Title:",oSum.GetProperty("Title")
  WScript.Echo "Author:",oSum.GetProperty("Author")
  WScript.Echo "Subject:",oSum.GetProperty("Subject")
  WScript.Echo "Keywords:",oSum.GetProperty("Keywords")
  WScript.Echo "Comments:",oSum.GetProperty("Comments")
  WScript.Echo "Revision Number:",oSum.GetProperty("Revision Number")
Next
Set oSum=Nothing

Class SummaryInfo
Private Buf, Stream, Props

Public Property Get GetProperty(Name)
Select Case LCase(Name)
Case "title" GetProperty=Props.Item(2)
Case "subject" GetProperty=Props.Item(3)
Case "author" GetProperty=Props.Item(4)
Case "keywords" GetProperty=Props.Item(5)
Case "comments" GetProperty=Props.Item(6)
Case "revision number" GetProperty=Props.Item(9)
Case Else GetProperty=Props.Item(Name)
End Select
End Property

Public Default Property Get Properties
Set Properties=Props
End Property

Public Function GetSummaryInfo(sPath)
Dim pPropSet, pPropId, pPropType
Dim PropCnt, PropId, PropType
Set Props=CreateObject("Scripting.Dictionary")
Set GetSummaryInfo=Props
Set Stream=CreateObject("ADODB.Stream")
Stream.Open
Stream.Type=1
Stream.LoadFromFile sPath & ":" & Chr(5) & "SummaryInformation"
If Stream.Size=0 Then Exit Function
Buf=Stream.Read(-1)
pPropSet=LongAt(44)
PropCnt=LongAt(pPropSet+4)
For pPropId=pPropSet+8 To pPropSet+8*PropCnt Step 8
  PropId=LongAt(pPropId)
  pPropType=pPropSet+LongAt(pPropId+4)
  PropType=LongAt(pPropType)
'  wscript.echo PropId,PropType
  Select Case PropType
  Case 30
    Props.Add PropId,StringAt(pPropType+8,LongAt(pPropType+4)-1)
  Case 2,3,19
    Props.Add PropId,LongAt(pPropType+4)
  Case Else
  End Select
Next
End Function

Private Function LongAt(Offset)
LongAt=AscB(MidB(Buf,Offset+1,1))+AscB(MidB(Buf,Offset+2,1))*256+AscB(MidB(Buf,Offset+3,1))*256*256+AscB(MidB(Buf,Offset+4,1))*256*256*256
End Function

Private Function StringAt(Offset,Length)
Dim dst
Set dst=CreateObject("ADODB.Stream")
dst.Open
dst.Type=1
Stream.Position=Offset
Stream.CopyTo dst,Length
dst.Position=0
dst.Type=2
dst.Charset="shift_jis"
StringAt=dst.ReadText(-1)
End Function

End Class

2010年8月14日 (土)

about:home アドレスバーからホームページに移動する。

IE8では、about:homeが使えません。

もし、インターネットゾーンでスクリプトが有効なら、

about:home

の代わりに、

javascript:'<body style="behavior:url(\'#default#homePage\')" id=x onload="x.navigateHomePage()">GoHome</body>'

あるいは、

c:\~~~\gohome.htm

<!-- saved from url=(0014)about:internet -->
<html><body style="behavior:url('#default#homePage')" id=x onload="x.navigateHomePage()">GoHome</body></html>

を作って、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AboutURLs

の文字列値 Home の内容を c:\~~~\gohome.htm に変える。

これで about:home が使えます。

もし、インターネットゾーンでスクリプトが無効なら、イントラネットゾーンで、

c:\~~~\gohome.htm

<html><body style="behavior:url('#default#homePage')" id=x onload="x.navigateHomePage()">GoHome</body></html>

を作って、

notepad.exe "c:\~~~\gohome.htm:Zone.Identifier"

[ZoneTransfer]
ZoneId=1

このファイルのZoneIDをメモ帳などで変える。以下、同様。

2010年8月 8日 (日)

「ソースの表示」ウィンドウがIEの後ろに隠れる。(その3)

PowerShellスクリプトで新規の「ソースの表示」ウィンドウを監視して、3秒以内に隠れたら前に出します。

Excelがない環境もあるので、PowerShellを使います。

view-source-focus.ps1

Add-Type -Language VisualBasic @"
Public Class Shell32
Declare Auto Function FindWindow Lib "user32" (lpClassName As String, lpWindowName As Integer) As Integer
Declare Auto Function GetWindowText Lib "user32" (hwnd As Integer, lpString As System.Text.StringBuilder, cch As Integer) As Integer
Declare Function SetForegroundWindow Lib "user32" (hwnd As Integer) As Integer
End Class
"@
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualBasic")
$dic=@{}
while($true){
  $hwnd = [Shell32]::FindWindow([ref]"HTMLSOURCEVIEW",0)
  $hwnd
  if($hwnd -eq 0){
    foreach($hwnd in $dic.Keys){
      "$hwnd End " + $dic.Item($hwnd)
    }
    $dic.Clear()
  }elseif(! $dic.Contains($hwnd)){
    $lpString = new-object System.Text.StringBuilder 128
    $nCount = [Shell32]::GetWindowText($hwnd,$lpString,$lpString.Capacity)
    $dic.Add($hwnd,$lpString.ToString())
    "$hwnd" + " New " + $lpString.ToString()
    for($k = 0; $k -lt 3; $k++){
      $r = [Shell32]::SetForegroundWindow($hwnd)
      "$r"
      if($r -eq 0){
        $nCount = [Shell32]::GetWindowText($hwnd,$lpString,$lpString.Capacity)
        if($lpString.ToString() -ne $dic.Item($hwnd)){break;}
        [Windows.Forms.SendKeys]::SendWait("%{tab}")
        [Microsoft.VisualBasic.Interaction]::AppActivate($lpString.ToString())
      }
      start-sleep -m 1000
    }
  }
  $keys = @()
  foreach($hwnd in $dic.Keys){
    $lpString = new-object System.Text.StringBuilder 128
    $nCount = [Shell32]::GetWindowText($hwnd,$lpString,$lpString.Capacity)
    if($lpString.ToString() -ne $dic.Item($hwnd)){
      "$hwnd End " + $dic.Item($hwnd)
      $keys +=$hwnd
    }
  }
  foreach($hwnd in $keys){
      $dic.Remove($hwnd)
  }
  start-sleep -m 1000
}

監視状況をコンソールに表示します。監視スクリプトはCTRL+Cで終了します。

2010年8月 7日 (土)

「ソースの表示」ウィンドウがIEの後ろに隠れる。(その2)

スクリプトで新規の「ソースの表示」ウィンドウを監視して、3秒以内に隠れたら前に出します。

Win32APIを呼ぶために、Excelを使用します。

view-source-focus.vbs

Set ie=CreateObject("InternetExplorer.Application")
ie.ToolBar=False
ie.Visible=True
ie.Navigate "about:blank"
Set dic=CreateObject("Scripting.Dictionary")
Set wShell=CreateObject("WScript.Shell")
Set ExcelApplication=CreateObject("Excel.Application")
Do
  hwnd=ExcelApplication.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCJ"",""HTMLSOURCEVIEW"",0)")
  ie.Document.body.insertAdjacentText "beforeEnd",hwnd & vbCrLf
  If hwnd=0 Then
    dic.RemoveAll
  ElseIf Not dic.Exists(hwnd) Then
    dic.Add hwnd,Empty
    For k=1 To 3
      r=ExcelApplication.ExecuteExcel4Macro("CALL(""user32"",""SetForegroundWindow"",""JJ""," & hwnd & ")")
      ie.Document.body.insertAdjacentText "beforeEnd",r & vbCrLf
      If r=0 Then
        wShell.SendKeys "%{tab}"
        wShell.AppActivate " - 元のソース"
      End If
      WScript.Sleep 1000
    Next
  End If
  WScript.Sleep 1000
Loop

監視状況をIEウィンドウに表示します。これを閉じると監視スクリプトも終了します。

2010年8月 6日 (金)

「ソースの表示」ウィンドウがIEの後ろに隠れる。(障害)

この現象は、「保護モード:有効」のページで発生するので、

IEを「管理者として実行」する。
インターネットゾーンを「保護モード:無効」にする。
サイトを「信頼済みサイト」に登録する。

などで回避できますが、いずれもセキュリティを弱めるので非推奨です。

IEウィンドウをデスクトップ右寄りに置けば、「ソースの表示」ウィンドウは左寄りに出るので、隠れにくくなります。

2010年8月 4日 (水)

IE8で「名前を付けて画像を保存する」フォルダが記憶されない。

<a href="画像ファイル" target="_blank">リンク</>

このようなリンクをクリックすると、新しいウィンドウやタブで画像ファイルが表示されます。

IE8で保護モード有効のサイトの画像ファイルを新しいウィンドウやタブで表示した場合、「名前を付けて画像を保存する」ときのフォルダが記憶されず、毎回デフォルトフォルダに戻ってしまいます。

これを回避するには、同じIEに表示して、保存すればよい。

そのためには、保存用のIEを別にひとつ用意して、画像ファイルを新しいウィンドウやタブで表示したら、そのIEのアドレスバーからアイコンを保存用のIEのタイトルバーなどにドロップします。

あるいは、その画像ファイルへのリンクを右クリックして「対象をファイルに保存」します。これなら同じIEなので同じフォルダが開きます。

あるいは、

リンクを右クリックして「同じウィンドウで開く」 IEのコンテキストメニュー拡張
http://scripting.cocolog-nifty.com/blog/2011/03/ie-b88d.html

を使って、同じウィンドウに開いて保存して、戻って、また、同じウィンドウに開いて保存すれば、同じフォルダが開きます。

« 2010年7月 | トップページ | 2010年9月 »