アクセスカウンタ

プロフィール

Author:croissant3

カテゴリー

最近の記事

月別アーカイブ(タブ)

最近のコメント

最近のトラックバック

月別アーカイブ

ブロとも申請フォーム

この人とブロともになる

月別アーカイブ

カレンダー

11 | 2016/12 | 01
- - - - 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

小さな天気予報


-天気予報コム- -FC2-

全ての記事を表示する

全ての記事を表示する

PCノンセクションの10♪
PCに関することを色々と。っつうか最近VBネタばっかorz
スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
↑参考になったら拍手よろろ
VB6.0でEXIF取得(その3)ツール公開

以前、自分が使う為に自作したEXIFを使ったJPEGのリネームソフト、
公開して欲しいというリクエストが時々来るので思い切ってWEBに上げてみました。

ここから

公開するにあたって使用するライブラリの著作権の話もありリネーム機能のみに削ってます。
はっきり言って機能的な所は他のツールの方が賢いです。。

あえて売り文句を出すならば・・・・もし取得できたら
撮影時間にコンマ何秒の値までリネームの要素に入れる事ですかね。
1秒間に何枚も撮影するデジイチの連射の場合、こんなのが良いのかも知れません。

[メイン画面]
メイン

[オプション]
オプション

[確認画面]
確認



↑参考になったら拍手よろろ

テーマ:ソフトウェア - ジャンル:コンピュータ

VB6.0でEXIF取得(その2)

EXIF情報を取得するなら ExifReader.clsの利用が私としてはお勧め。

自宅ではデジカメのJPEGファイルを撮影時間でリネーム、
更にVGAサイズに縮小するツールを作成してWEB用に加工してます。

JpegRenamer


ポイッとファイルを投げ込むだけで加工するのでお気軽極楽です。

↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VB6.0でEXIF取得(その1)

デジカメで撮影したJPEGには撮影時間やシャッタースピードやら
様々なデータが埋め込まれている。いわゆるEXIF情報というやつ。

.NETのプラットフォームならば比較的簡単にEXIF情報が取り出せるのだけど
VB6.0でEXIF情報を取り扱うにはどうすれば良いのか?という話です。

★★★EXIF情報の取得に関して★★★

(1)Jhead.exeの利用
   海外製のコマンドラインツールにJhead.exeというのがある。
   これをDOS窓から使えばEXIF情報が標準出力されるという寸法。
   Wsh経由でJhead.exe xxx.jpg とでもすればOK。

   http://www.sentex.net/~mwandel/jhead/

(2)ExifReader.clsの利用
   上記Jhead.exeは単に標準出力で垂れ流されるEXIF情報をとっ捕まえる方法ですが、
   海外製クラスライブラリ、ExifReader.clsはJPEGファイルにバイナリアクセスして
   必要なEXIF情報を取得します。関数化されているので結構便利。
   例えば撮影時間を取り出すならこんな感じ。

   Dim ExifObj As New ExifReader
   ExifObj.Load "C:\test.JPG"
   MsgBox ExifObj.Tag(DateTimeOriginal)

   http://sourceforge.net/project/showfiles.php?group_id=56110

   ExifReader.clsはソース配布な為、自分でいくらでも手直しが出来るのが良いです。

(3)シェアウェアの利用
   お金を払ってシェアウェアのライブラリを購入する方法もあり。

★★★EXIF情報の削除に関して★★★

   JPEGに埋め込まれているEXIF情報を手っ取り早く削除するなら
   Jhead.exe のオプションが利用できます。

   prompt> Jhead.exe -du C:\test.JPG

★★★EXIF情報の書き込みに関して★★★

   JPEGファイルを生成する関係上、
   VCを動員してlibjpeg.libをリンクしてdllを作ったりと結構めんどい感じ。
   今のところExif情報の修正をする要望がないので保留。

こんな感じですかね。

↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VBでmht保存(おまけ)

ちなみにクラムメディアの問題集はマウスでコピペが出来ないよう
JavaScriptで細工しています。

mht保存したファイルに記載されているJavaScriptの一部、
実際には1行をコメントアウトするだけで
コピペガードは外せます。

私はコピペガードを外した上で
OutLookにHTML形式でペタペタ貼り付けて
自分だけの問題集を作りました。
↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VBでmht保存(その2)

とりあえずこんな感じで作ってみました。

CRAM



WebBrowserでWebを表示、保存ボタンを押すと
「Webページを保存」画面で
ファイル名、保存形式を自動入力し
mht保存を行います。

もうちょい時間があれば1問1問自分でWEBを巡回して
勝手にmht保存する形にしたかったのですが
そこまで作っている時間がなかった。orz


今回もmht保存する関数のソースを載せてみます。


Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const LB_SETTOPINDEX = &H197
Private Const GW_HWNDNEXT = 2
Private Const GW_CHILD = 5
Private Const WM_ACTIVATE = &H6
Private Const WM_CLOSE = &H10
Private Const WM_COMMAND = &H111
Private Const WM_COPY = &H301
Private Const WM_GETTEXT = &HD
Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_PASTE = &H302
Private Const WM_QUIT = &H12
Private Const WM_SETTEXT = &HC
Private Const WM_CLEAR = &H303
Private Const EM_SETSEL = &HB1
Private Const EM_REPLACESEL = &HC2
Private Const BN_CLICKED = 0
Private Const BM_CLICK = &HF5
Private Const CB_SETCURSEL = &H14E



Public Sub SaveAs_Input()

'名前を付けて保存ダイアログを検索、
'ファイル名を入力し、mht形式をSendKeysで選択、
'保存ボタンを押すだけ


Const WINDOW_NAME As String = "Web ページの保存"
Const BUTTON_NAME As String = "保存(&S)"

Dim hwnd As Long    '親   Dialog
Dim hChild As Long   '子供  ComboBoxEx32
Dim hhChild As Long   '孫   ComboBox
Dim hhhChild As Long  'ひ孫  Edit


'名前を付けて保存ウィンドウの検索
hwnd = FindWindow(vbNullString, WINDOW_NAME)


'ファイル名入力用のエディットボックスの検索
'ダイアログ-->ComboBoxEx32-->ComboBox-->Editの
'3段になっていることに注意。


If hwnd = 0 Then
  MsgBox "WEBページの保存画面が見つかりません"
  Exit Sub
End If

'エディットボックスの検索
hChild = SearchHandle(hwnd, "ComboBoxEx32")
If hChild = 0 Then
  MsgBox "WEBページの保存:ComboBoxEx32 が見つかりません"
  Exit Sub
End If

hhChild = SearchHandle(hChild, "ComboBox")
If hhChild = 0 Then
  MsgBox "WEBページの保存:ComboBox が見つかりません"
  Exit Sub
End If

hhhChild = SearchHandle(hhChild, "Edit")
If hhhChild = 0 Then
  MsgBox "WEBページの保存:Edit が見つかりません"
  Exit Sub
End If


'---- 保存ファイル名の入力 ----
'見つかったEditボックス(hhhChild)に SendMessage

Call SetForegroundWindow(hwnd)
SendMessage hwnd, WM_ACTIVATE, 1, ByVal 0&
SendMessage hhhChild, WM_ACTIVATE, 1, ByVal 0&
SendMessage hhhChild, WM_CLEAR, 0, ByVal 0&
SendMessage hhhChild, WM_SETTEXT, 0, ByVal "C: emp est.mht"


'---- コンボボックスからmhtを指定する ----
Dim tmpStr As String
Dim tmpCls As String
Dim tmpl As Long
Dim combownd As Long
Dim buf As String * 1024

'とりあえずダイアログの中の子供を一つ取得
combownd = GetWindow(hwnd, GW_CHILD)

Do While combownd <> 0
  '子供のクラス名を取得
  tmpCls = String(255, Chr(0))
  tmpl = GetClassName(combownd, tmpCls, Len(tmpCls))
  tmpStr = Left(tmpCls, tmpl)

  'クラス名がComboBoxならコンボボックスの中の文字列を取得する
  If tmpStr = "ComboBox" Then
    buf = String(1024, Chr(0))
    SendMessage combownd, WM_GETTEXT, 1024, ByVal buf

    Dim a As String
    a = Left(buf, InStr(1, buf, Chr(0), vbTextCompare) - 1)

    Select Case a
      Case "Web ページ、完全 (*.htm;*.html)"
          '---- TAB,DOWN,DOWN,TAB ----
          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          DoEvents

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{DOWN}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{DOWN}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Exit Do

      Case "Web アーカイブ、単一のファイル (*.mht)"
          '---- TAB,TAB ----
          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          DoEvents

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Exit Do

      Case "Web ページ、HTML のみ (*.htm;*.html)"
          '---- TAB,DOWN,UP,TAB
          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          DoEvents

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{DOWN}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{UP}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Exit Do

      Case "テキスト ファイル (*.txt)"
          '---- TAB DOWN,UP,UP,TAB
          'MsgBox "txt"
          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          DoEvents

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{DOWN}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{UP}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{UP}", True
          DoEvents
          Sleep 300

          Call SetForegroundWindow(hwnd)
          SendMessage combownd, WM_ACTIVATE, 1, ByVal 0&
          SendKeys "{TAB}", True
          DoEvents
          Sleep 300

          Exit Do

    End Select
  End If
  combownd = GetWindow(combownd, GW_HWNDNEXT)
Loop

'---- 保存ボタンを検索してクリック
hChild = FindWindowEx(hwnd, 0, vbNullString, BUTTON_NAME)
If hChild = 0 Then
  MsgBox "WEBページの保存:保存ボタンが見つかりません"
  Exit Sub
End If
Call SetForegroundWindow(hwnd)
SendMessage hwnd, WM_ACTIVATE, 1, ByVal 0&
SendMessage hChild, WM_ACTIVATE, 1, ByVal 0&
SendMessage hChild, BM_CLICK, 0, ByVal 0&

End Sub





Public Function SearchHandle(hwnd As Long, ClsName As String) As Long
'hwndウィンドウから指定したクラスの部品を検索、
'ウィンドウハンドルを返すだけ


SearchHandle = 0

Dim hChild As Long

'とりあえずダイアログ画面の子供を1個取得
hChild = GetWindow(hwnd, GW_CHILD)

Dim tmpStr As String
Dim tmpCls As String
Dim tmpl As Long

Do While hChild <> 0
'クラス名を取得
  tmpCls = String(255, Chr(0))
  tmpl = GetClassName(hChild, tmpCls, Len(tmpCls))
  tmpStr = Left(tmpCls, tmpl)
  If tmpStr = ClsName Then
    'MsgBox ClsName & "見つけた!"
    SearchHandle = hChild
    Exit Function
  End If
  hChild = GetWindow(hChild, GW_HWNDNEXT)
Loop

'MsgBox ClsName & "みつからんかった"

End Function

↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VBでmht保存(その1)

先日資格取得の為にクラムメディア(www.crammedia.com)の問題集を購入。
WEBで表示される問題と解答を保存したいと思い
ちまちまとローカルのHDDにmht形式で保存していたのだが、
結構めんどい。

フリーソフトの「Webよ止まれ ?EternalWeb?」というツールの使用もあるがファイル名の指定に困ってしまう。orz

仕方がないのでまたいつもの様に家内制手工業(自作)です。



とりあえずmht保存の方法を調べてみる

(1) CDO.Message オブジェクトで直接URLを指定して保存

  Set CDO=WScript.CreateObject("CDO.Message")
  Const adSaveCreateOverWrite = 2
  CDO.CreateMHTMLBody "http://www.yahoo.co.jp"
  CDO.GetStream.SaveToFile "C:\test.mht",adSaveCreateOverWrite

  この方法が一番簡単。
  CreateMHTLBodyの引数でユーザ、パスワードの指定は可能。
  しかしこの単純な認証作業で突破できないサイトは結構あるため
  クラムメディアでは試してないがおそらくこの方法は×。orz
  


(2) 「名前を付けて保存」を利用

  VBの画面にWebBrowserコントロールを貼り付けて、ページを表示して
  Me.WebBrowser.ExecWB を叩けば保存が出来る。

  Me.WebBrowserMain.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER
  ※引数は適当に弄って下さい。

  しかしExecWBでは画像付きのhtmlファイルで保存することは出来たが
  mhtで保存出来ない様子。orz



(3) (2)を改良、ExecWBを利用して「名前を付けて保存」ダイアログを表示、
  入力部分はSendMessageなどで自動化。

  この方法だと
  保存ファイル名の入力はSendMessageでWM_SETTEXTを飛ばせばOK!

  コンボボックスでファイル形式にmhtを指定する事は
  SendMessageで出来たが・・mht形式で保存されず。orz
  コンボボックスを変更しただけではリストビューまで変更されないせいか?

  結局コンボボックスの変更を
  原始的にSendKeysを使ったところうまく出来ました。


保存方法についてはこれでOK。 ↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VirtualComPort

最近私用でシリアル通信のプログラムを製作中。。。。

シリアルっつうても最近のPCにはくっついてなかったりする。orz
そんな事情も考えてUSB接続のUSB-Serialコンバータという製品が
色々なメーカから発売されているわけで・・・
試しにノートPCのUSBポート2つにそれぞれコンバータを接続して
クロスケーブルでつないで通信させてみた。

はっきり言って邪魔くさい。orz


なんとかならんか?とソフトを漁っていたら
ベクターでVirtualComPortなるソフトを見つけた。(^^;

https://www.ise-ics.co.jp/ics/system/virtualcomportcontents.htm

自分のPC内に仮想COMポートを2個作り出してクロスケーブルで
接続した(ような)環境を作ってくれるソフト。
しかも他のPCとネットワーク接続させて
Serial Over TCP/IP を実現させてくれるそうな。(^^;

試しに使ってみたら確かにつながった。他のPCとのネットワーク接続もOK。

しかし・・・体験版は5分間しか使えない。orz
5分じゃソフトの評価もできんよ。

まったく製造元は何を考えているのやら・・・・

せめて5?6時間使える方法はないか?と色々試行錯誤してみた。 ↑参考になったら拍手よろろ
■ 続きを読む。 ■

テーマ:プログラミング - ジャンル:コンピュータ

VB6でのサービスアプリケーションあれこれ

とりあえずVB6でのWindowsサービス(NTサービス)の実現方法を
色々調べてみました。

(1) NTSVC.OCX
  海外にソースとビルド済みのOCX、ヘルプなどが
  一式パックになって転がっています。(URL忘れた)

(2) リソースキット(instsrv.exe srvany.exe)
  NTだけでなくWindows 2003 Server のリソースキットにも含まれています。

  http://tooljp.com/qa/6E78397646A8C77949256A970045BA6C.html

(3) sexe
  フリーソフト。VECTORなどにも転がっています。

どれも試してみたのですが完全なCUIプログラムでないと
Windows 2003 Server では無理っぽいです。
XPだと動いたりするんですけどね。

CUIプログラムで作ろうとするとタイマーコントロールが使えない。orz
無限ループ作って無理やりやるとCPUの使用率がすんごい事に。orz
なんか良い方法はないものか・・・orz
↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

VB6でのWindowsサービス(NTサービス)

VB6でサービスアプリケーションを作りたいと前々から思っていましたが、
"NTSVC.OCX" というActiveXで実現出来る様子。

ただこのNTSVC.OCXってマイクロソフトが
このOCXのソース(VC製)を公開していて
既にサポート対象外だそうな。orz


どこまで使えるか判らないけどちょっと試してみますか。(^^;


↑参考になったら拍手よろろ

テーマ:プログラミング - ジャンル:コンピュータ

カテゴリ追加

新たにカテゴリに「PCメンテ」を追加。 ↑参考になったら拍手よろろ

テーマ:雑記 - ジャンル:日記

パケットダンプ

ユーザコントロールを使ったダウンローダを作った際、
URLのリストを自作しなきゃあかんって話で。

そのときのお話。

よくホームページに置いてあるファイルをツール使ってポコポコと
ダウンロードされないように右クリック禁止にしたり、
認証を必要とさせたり、はたまたダウンローダのクセを見抜いて対策したりと
色々とあの手この手でサーバ側は対策をしてきます。

それをかいくぐって落とすのをネトラン風に言えば
ぶっこぬきとか言うらしいですが。(苦笑)


ちなみに私の場合、解析の最後の手段は
TCP/IPのパケットダンプです。

いくらHTMLソースを見せなくしたりどっか別の場所に置いてあったとしても
パケットダンプすればバレバレ。(笑)

今はEtherRealとか色々ありますが、当時はvigilを使ってました。
↑参考になったら拍手よろろ
■ 続きを読む。 ■

テーマ:インターネット関連 - ジャンル:コンピュータ

まぁいいや。

エラーの詳細が取れないのはちょっと痛かったけど長所も色々あるし。

んで色々とこねくり回した結果こんなのが出来ました。

↑参考になったら拍手よろろ
■ 続きを読む。 ■

テーマ:インターネット関連 - ジャンル:コンピュータ

うぐ。

あ・このユーザコントロール、というか・・
ユーザコントロールを使ったダウンロード方法・・・
失敗したか成功したかはわかるけど
エラーの詳細がわからないみたい。orz

HTTP 404 エラーなのか 403 エラーなのかも判らない
ってのは致命的。orz

どうするよ?
↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

んでこんなコントロールを

VBScriptでバックグラウンドコピーをするのふまえて
ユーザコントロールを作りました。

UserControl.jpg


[画面イメージ]
左上テキストボックス = ダウンロードファイル名
左中テキストボックス = 受信バイト数 / ファイルサイズ
左下プログレスバー = 全体で何%受信したかの目安
右リストボックス = ログ表示

[各種プロパティ]
(1) DownLoadStatus (Get/Let)
ダウンロード状況(Enum)
(2) DownLoadUrl (Get/Let)
ダウンロードURL
(3) SaveDir (Let)
ダウンロードしたファイルの保存先
(4) SaveFileName (Get/Let)
保存ファイル名
(5) Enabled (Get/Let)
コントロール自体のEnable/Disable
(6) RetryCount (Let)
ダウンロード失敗時にリトライする回数
(7) RetryInterval (Let)
ダウンロード失敗時にリトライするまでのインターバル時間
(8) vbsName (Let)
コピー処理を実行するVbScript名

[Public メソッド]
(1) Public Function DownLoadStart() As Boolean
ダウンロード開始メソッド
(2) Public Function DownloadCancel() As String
ダウンロード中止メソッド
(3) Public Sub msgClear()
ログ消去
(4) Public Sub msgSave(SaveFile As String)
ログ保存

このユーザコントロールを使う側は落とすURLやファイル名を指定し、
ダウンロード開始メソッドを呼ぶ程度。

あとはこの砲台を画面上にいっぱい並べて制御すればOK?

↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

非同期コピーの件

色々考えてみたけど、コピーするためだけに
別プロセスを用意するのもなんだし。
一般のダウンローダなんかどうしているんでしょうね。

結局コピー処理を実行するVBScriptを
プログラム内部でリアルタイムに生成して
それを実行するようにしました。orz
ウチではノートン先生を動かしてないから
怒られることもないですし。(爆)

こういう場合の常套手段ってどうするんだろ。orz

誰か教えてぷりーず。
↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

AsyncRead成功♪でも・・・

いつものようにエンジン部分だけを作ってとりあえずテスト。
うん。ダウンロードは出来た。でも一つ問題が。

ユーザコントロールの中でダウンロード処理をさせるわけですが
この落としたファイルって、Windowsのテンポラリ領域に落ちてくる仕様なので、ダウンロードが終わったら自分で(プログラム内で)自分が指定する場所にファイルを移動させなきゃいけない。

でもこのファイルの移動処理って同期処理なんですよ。orz
落としたファイルサイズが何百メガもあると移動している間はプログラムが止まっちゃう。ユーザコントロールをたくさん実装して
パラレルにドカドカやりたいのにこれじゃ話にならない。

色々調べてみると非同期にコピーを行いたいなら
別プロセスに分けないとダメらしい。

ファイルの移動処理だけを行う別プロセスを作る?
でもその別プロセスも複数のユーザコントロールからリクエストきたら
同じように同期処理をしちゃうから別プロセスに分けた意味ないし。
別プロセスを複数起動して行う?
なんかそれも・・・

また方式を考えましょ。
↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

新たなダウンロード方法の検討

単にファイルをダウンロードする方法はいくつもあるけど
同期式だと落としている最中は処理が止まっちゃう。
パラレルにドカドカ落とす・・・・
VBじゃマルチスレッドでブンブンまわすのは無理だし・・・
なんか方法はないか?と色々とググっていたら
ユーザコントロールに付属のAsyncReadという方法が見つかった。
これは非同期型でダウンロード中の状況もイベントを上げてくれるらしい。

ユーザコントロールを1個作って、Propertyで落とすファイルや色々設定して、
ダウンロード開始のメソッドを用意して、完了時やエラー時にイベントを上げさせれば・・・・
処理を完全にユーザコントロール内で閉じることが出来ますね。

んでこのユーザコントロールをいくつも並べてこいつらに
「君はこのファイルを落としてね」
「終わったの?んじゃ次のファイルはこれね」
と制御してあげれば・・・・良いかも知れない。

これなら勝てる!(by尾崎)(年がばれるかも)

という前にASyncReadで落ちてくるか?検証が先ですな。
話によるとIEコンポーネントらしいから落ちてくると思いますけど。。 ↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

田代砲とGUIダウンローダの合作

GUIダウンローダの自動画面入力機能と田代砲のマシンガン機能を
合作させたツールをVBで組んでみました。

同時ダウンロード数を制御してないから画面だらけ。orz
確かに早いですが変に固まったりするし
中途半端なのでヤンピ。ボツにしたツールです。

Main.jpg


この辺りからVBを使った色々なダウンロード方法を検証し始めました。(笑) ↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

田代砲との出会い(笑)

GUIダウンローダを作ってしばらくすると
使ってくれていたユーザさんから「パラレルにドカドカ落とせません?」と
要望が出てきた。

パラレルに落とすとなると画面の自動入力する際に
どのリクエストに対する画面なのか判断が難しいのよ。
全く別の方式で1から考えないとダメです。
なんて言って断っていたら・・
田代砲を改造したスクリプトを紹介された。
そのスクリプトはなんと!GUIダウンローダを使うサイトで使えると言う。
ただし画面入力は手作業なので「保存」ボタンを連打する必要があるとの事。

その手のダウンロードツールはサーバ対策を施されているけど
IEからの直リンなら落とせるんだ。へぇ。

なんかパラレルにGOできるのが悔しくて
別のダウンロードツールを作ることにしました。(笑)
↑参考になったら拍手よろろ

テーマ:インターネット関連 - ジャンル:コンピュータ

GUI ダウンローダ(その3)

さて自動入力のエンジン部分はとりあえず動いたので
本格的に小道具作りに入りますか。

とりあえずWEBから落とすファイルは1ページ当り20?30個。
これが多いと100ページにもなる。
確かにこんなの手作業でダウンロードなんかやってられない。(笑)

とりあえず・・・・内容を考える。
1.どのページに何のファイルがあるのか把握する必要あり。
2.どのファイルを落としたかも把握(ダウンロード済みならスキップ)
3.1つのファイルがダウンロード完了した時の判断基準?
4.その他色々。

う?む。

画面構成としては・・・・
Form上にWebBrowserオブジェクトを貼り付けて
実際にForm上にWEBを表示させるでしょ。それに対して
ダウンロードの開始イベント(クリックイベント)を発生せていけばいいか。

あとどのページに何のファイルがあるかって情報もつかむって考えたら
最初のページから最後のページまで順番に巡回させて
INIファイルにファイルのリストを作るでしょ・・・
リストを作ったら、ページ単位にダウンロード作業を行う形にして・・
↑参考になったら拍手よろろ
■ 続きを読む。 ■
GUI ダウンローダ(その2)

落とすファイルの管理うんぬんの話もありますが
とりあえず自動入力部分を簡単に作りこんでみる。

処理する画面単位に関数を用意してタイマー関数を使って
定期的に画面を検索させながら見つかったら処理をさせる形。

Select Case TimerSW
Case 1: 'ダウンロード完了画面の処理

Case 2: '名前を付けて保存画面の処理

Case 3: 'ファイルのダウンロード画面の処理

Case 4: 'ネットワークパスワード画面の入力

Case 5: 'JavaScript画面でDownloadボタン押下

Case 6: 'JavaScript画面のサーバエラーの検出(検出したらFLAGをON)

Case Else
'何もしない
End Select

If (TimerSW Mod 6) = 0 Then
TimerSW = 1
Else
TimerSW = TimerSW + 1
End If ↑参考になったら拍手よろろ
■ 続きを読む。 ■

テーマ:インターネット - ジャンル:コンピュータ

GUI ダウンローダ(その1)

ある日、知り合いがどこぞのサイトから必死にファイルを落としていた。
話を聞くとそのサイトはダウンロードツールの対策が施してあって
そのサイトのポリシーとしては頑張って手作業で落としてちょ♪
という所。

なんとかダウンロード作業を自動化できないか?と相談を持ちかけられた。

どうやら感じとしては
1.サイトにログイン
2.目的のページに移って
3.落としたいファイルをクリック
4.ポップアップされるJavaScriptの画面でボタンを押すと
5.Windows側の認証画面がでてユーザとパスワードを入力、OKボタンをクリック。
6.名前をつけて保存画面で保存先を選んでダウンロード開始、終了。

この作業のうち2?6までを延々と繰り返すそうな。

とりあえずやってみますか。
↑参考になったら拍手よろろ
■ 続きを読む。 ■

テーマ:インターネット関連 - ジャンル:コンピュータ


ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

メールフォーム

名前:
メール:
件名:
本文:



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。