Kuni/JA1UZGのもろもろブログを最新の情報に更新

色々チャレンジしていますが、記載内容は無保証です。各自の責任でお願いします。    . .
前月 << August 2017 | 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 >>翌月
 
ENTRIES

RECENT COMMENT
RECENT TRACKBACK
ARCHIVES
 
ダブルクォートって要らなくなったんですね 今更ながら知りました
いまさらながら知りました

今までは、ファイル名やフォルダ名に半角スペースが有る場合、「"ダブルクォートでくくれ"」ってのがおまじないでしたが、必要なくなったみたい。
今更ながら知りました。

コマンドプロンプトで試したけれどOK。

OSも日々進化している様です。
カトーレック便の追跡
路肩花

ゆうパック、クロネコ、佐川さんの宅配は、追跡番号でググってそのURLをお気に入りに入れてます。
(追跡番号のハイフンを除いて、数字だけ入れます。)
そうすれば、いつでも追跡出来るので便利です。

Googleで荷物番号検索

しかし、カトーレックは、Googleで検索出来ません。
アマゾンで買い物をするとカトーレックの事が多々有るし、
追跡する度に荷物番号を入力するのは億劫で・・・

てなわけで、追跡用のVBSを作ってみました。

以下VBSの荷物番号を書き換えてお試し下さい。

rem ktr.vbs-------------

Option Explicit
Dim obj, WSHShell
Const ErrMsgTxt = "カトーレック荷物番号検索エラー"
Const pageURL = "http://www6.katolec.com/tracking/amzn/tracking.aspx"

Const no_ = "000000000000" 'ここに荷物番号を入れる

REM ===
REM WScript IE 開始
REM ===
Set WSHShell=CreateObject("WScript.Shell")
Set obj = WScript.CreateObject("InternetExplorer.Application")
WScript.Sleep(200)
obj.Navigate pageURL
WScript.Sleep(200)
obj.Visible = True
S_IE_Wait obj
WScript.Sleep(200)
S_IE_Activate
WScript.Sleep(200)
obj.document.forms("trackingForm").elements("inputDenpyo").value = no_
WScript.Sleep(200)
obj.document.forms("trackingForm").elements("post").Click
WScript.Sleep(200)
Set obj = Nothing

REM ======== IEが安定するまで待機 =======================
Private Sub S_IE_Wait ( ByRef objIE_ )
Const TimeOut = 30000 'ミリ秒単位
Const CheckTime_ = 200
Dim t_

t_ = 0
Do While objIE_.busy
t_ = t_ + CheckTime_
If t_ > TimeOut Then
MsgBox "IE Time Out error. [IE.busy]", _
vbSystemModal + vbCritical, ErrMsgTxt & " [IE.busy]"
WScript.Quit ' メインプログラム終了
End If
WScript.Sleep(CheckTime_)
Loop
t_ = 0
Do While objIE_.Document.readyState <> "complete"
t_ = t_ + CheckTime_
If t_ > TimeOut Then
MsgBox "IE Time Out error. [complete]", _
vbSystemModal + vbCritical, ErrMsgTxt & " [complete]"
WScript.Quit ' メインプログラム終了
End If
WScript.Sleep(CheckTime_) :
Loop
End Sub

REM ======== iexplore.exe をアクティブに ============
Private Sub S_IE_Activate
Dim Lt__, Sv__, En__, Sh__, It__

WScript.Sleep(200)
Set Sh__ = CreateObject("WScript.Shell")
'起動中のプロセスの一覧から iexplore.exe を検索
Set Lt__ = CreateObject("WbemScripting.SWbemLocator")
Set Sv__ = Lt__.ConnectServer
Set En__ = Sv__.InstancesOf("Win32_Process")
For Each It__ In En__
If Not IsEmpty(It__.ProcessID) Then
If InStr(It__.Description, "iexplore.exe") Then
Sh__.AppActivate(It__.ProcessID)
' Exit For
End If
End If
Next
WScript.Sleep(200)
Set Sh__ = Nothing
Set En__ = Nothing
Set Lt__ = Nothing
End Sub

rem ここまで--------------
Outlookアカウントの移行・バックアップ メモ
路肩の花

Windows XP から 8.1 に移行して困った事の筆頭がメール。
POPでアクセス出来なくなり、メールの受信・送信が出来なくなりました。
MS社は唐突に方針を変更するので困りものです。
(HELPファイルでも苦労したし・・・)

てなわけでOffice付属のOutlookでメールのやりとりをする事にしたのですが、
メールアカウントのバックアップ・復旧方法が無い

セキュリティかどうかは不明ですが、XP(Outlook Express)からOutlookへはシコシコと1アカウントずつ設定する羽目になりました。

メールアカウントだけで20以上使用している身としてはとても辛い。 (;_;)

色々調べると
  HKEY_CURRENT_USER¥Software¥Microsoft¥Windows NT¥CurrentVersion¥Windows Messaging Subsystem¥Profiles
このレジストリに保管されているとの事。
しかし私のPCにはこんなレジストリ設定されてませんでした。

さらに調べると、2013ではレジストリが変更されているとの情報が。 (^_^)
  HKEY_CURRENT_USER¥Software¥Microsoft¥Office¥15.0¥Outlook¥Profiles

ここらしい!

一応!regeditでレジストリをバックアップしました。
なんとかなりそうです。 (^_^)
クロームで複数のURLを別タブで同時に開く メモ
路肩の花

IEで複数のURLを開くスクリプトにコメントがあったので、それに気をよくして・・・hi

今度は、クロームです。

下の緑の部分を CTEST.VBS として保存、クリックして下さい。

Dim Shell
Set Shell = WScript.CreateObject ("WSCript.shell")
Shell.run """C:¥Program Files (x86)¥Google¥Chrome¥Application¥chrome.exe"" ""http://bakw.sub.jp/"" ""http://blog1.bakw.sub.jp/"""
Set Shell = Nothing


クロームの場合は、2つ以上のURLが指定出来るので、だらだらと複数のURLを入れればOKです。
IE 複数のURLを別タブで同時に開く その2 メモ
路肩の花

先日はCMDスクリプトでIEを開く記事を書きましたが、今回はVBSによるものです。

CMDスクリプトは簡単なのですが、コマンドライン引数の文字数制限があり「猛烈に長いURL」は指定出来ません。
その点は、VBスクリプトを利用すれば容易に解決出来ます。

下がそのスクリプトですが、見本は短いURLで記載しています・・・長くてもOK。
URLを二重や三重の「"」で囲うのがコツです。「」の数は下を参考にして下さい。
sleepは5秒に指定してますが、コンピューターやネット回線の速度に応じて調整して下さい。
うまく動いたら、URLはお好みに。
3つ以上のURLも開けますので行を追加して下さい。

REM 以下を TEST.VBS としてデスクトップに保管・してクリック-----------
Dim Shell
Set Shell = WScript.CreateObject ("WSCript.shell")
Shell.run """C:¥Program Files¥Internet Explorer¥iexplore.exe"" ""http://bakw.sub.jp/"""
WScript.Sleep 5000
Shell.run """http://hp.vector.co.jp/authors/VA006041/"""
Shell.run """http://blog1.bakw.sub.jp/"""
REM 追加する場合はここに
Set Shell = Nothing

REM ここまで----

蛇足
猛烈に長いURLや等の特殊記号を含む場合は、コマンドスクリプト HOGEHOGE.CMD は使いにくいです。
VBSだと容易に利用出来ます。
Dim Shell
Set Shell = WScript.CreateObject ("WSCript.shell")
Shell.run """C:¥Program Files¥Internet Explorer¥iexplore.exe"" ""http://bakw.sub.jp/"""
WScript.Sleep 5000
Shell.run """http://hp.vector.co.jp/authors/VA006041/"""
Shell.run """http://blog1.bakw.sub.jp/"""
Shell.run """https://www.google.co.jp/search?hl=ja&q=%EF%BC%AB%EF%BD%95%EF%BD%8E%EF%BD%89%E3%81%AE%E3%82%82%E3%82%8D%E3%82%82%E3%82%8D%E3%83%96%E3%83%AD%E3%82%B0&lr=lang_ja&gws_rd=ssl"""
REM 追加する場合はここに
Set Shell = Nothing
IE 複数のURLを別タブで同時に開く メモ
路肩の花

IEの複数タブを同時に開くスクリプトで悪戦苦闘してました。
(別ウインドウで開いちゃうので・・・)
やっと成功!

REM --- 以下を切り取り HOGEHOGE.CMD としてデスクトップに保存してからクリック
@echo off
start http://bakw.sub.jp/
timeout 5
start http://hp.vector.co.jp/authors/VA006041/
start http://blog1.bakw.sub.jp/

REM --- ここまで

成功したら、URLはお好みに変更して下さい。
エクセルのエラー
エクセルのエラー
最近、上画像の様なメッセージが頻繁に表示される様になりました。
数分待てば回復するのですが、ハテ?

・OSのサポートが打ち切られる
・OSを最新版にする
・オフィスソフトの入れ替えを迫られる
・新しいOSやソフトは、安定する迄時間がかかる。
・ユーザーは、テスト用員になる。 (;_;)
VBスクリプトで遊んでます メモ
VBスクリプトでIEを起動するのを多用しているのですが、 ・WindowsXp・・・起動したIEはアクティブ ・Windows8.1・・起動したIEは非アクティブ アクティブでないと、スクリプトで使いにくい。 (;_;) で、いいかげんに作成したのが下 このサブルーチンを起動すると、IEがアクティブになります。 複数のIEを起動した場合、最後のIEがアクティブになる??? REM ======== iexplore.exe をアクティブに ============ Private Sub S_IE_Activate Dim Lt__, Sv__, En__, Sh__, It__ WScript.Sleep(200) Set Sh__ = CreateObject("WScript.Shell") '起動中のプロセスの一覧から iexplore.exe を検索 Set Lt__ = CreateObject("WbemScripting.SWbemLocator") Set Sv__ = Lt__.ConnectServer Set En__ = Sv__.InstancesOf("Win32_Process") For Each It__ In En__ If Not IsEmpty(It__.ProcessID) Then If InStr(It__.Description, "iexplore.exe") Then Sh__.AppActivate(It__.ProcessID) REM Exit For End If End If Next WScript.Sleep(200) Set Sh__ = Nothing Set En__ = Nothing Set Lt__ = Nothing End Sub
CMDスクリプトのSleep処理 メモ
路肩の花

意外と不自由するのが、CMDやBATでSleep/Wait/Timeoutの処理が出来ない事。
Pingを使って疑似Sleepを作製する事も考えたのですが、使ってみるとチョット不便。
で、、、作っちゃいました。
皆さんはどんな方法を利用しているのでしょうか?
機種依存はありませんが、WindowsのCMD.EXE上で動作します。
--- TIMEOUT.C --- #include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h> int main(int argc, char *argv[]) { int flg=0; int TimeOut; if (argc < 2) { puts("usage¥n" " TIMEOUT 10 -- 10秒 表示無し¥n" " TIMEOUT 20 /D -- 20秒 表示有り"); return 0; } if (argc == 3) if(0==stricmp("/D", argv[2])) flg=1; TimeOut = strtol(argv[1], NULL, 10); if (TimeOut > 0) { if(flg == 0) { Sleep(TimeOut * 1000); } else { while(TimeOut > 0) { printf("%d ¥r", TimeOut); fflush(stdout); Sleep(1000); TimeOut--; } puts("0 "); } } return 0; }

●追記
 表示がおかしかったので、>等を書き直しました。
自作ロジックアナライザ RSANA.C ソースコード 差し替え版 メモ
普段は、ソースコードを公開しないのですが、、、、、
空白の処理を &nbsp; にするなど工夫しました。
ペーストすればそのままコンパイル出来ると思います。

/*===============================================================================
 *                           RSアナライザ (c)Kuni 2013/04/04
 * RS232CのDSR/CTSを利用したデジタルアナライザテストプログラム
 *
 * 本プログラムは、UP-12C の DSR,CTS ポート利用を想定している。
 *
 * コマンドラインオプション
 * /f,/F ex /fAB.csv 出力ファイル名を AB.csv にする (デフォルト RSANA.CSV)
 * /d,/D             出力ファイルのデータを  DSR 0.55/1.45 , CTS 1.55/2.45 にする。
 *                   (エクセルグラフ時に、ディュアルスキャン風になる)
 *===============================================================================
 *
 * ---------- WATCOM Win CharMode 32bit ----------
 * /WW32T/FIL/  * /SETWNT/
 * /WW32T/USE/ WCL386 #c /dWARGV /l=nt /bt=nt /k5000000
 * /WW32T/END/
 */

#include <windows.h>
#include <stdio.h>
#include <conio.h>

char   OUTFILENAME[64] = "RSANA.CSV";
int    LOOP            = 60000; /* 分解能1mSec で1分 */

int    DUALMODE        = 0;
int    RS232CTXPORT    = 9999;
HANDLE hRS232CTXPorte  = INVALID_HANDLE_VALUE;
int    EVENT_COUNT     = 0;
FILE  *FP;
unsigned int MSEC      = 9999;  // タイムイベント間隔

int opnport(void)
    {
    char sbuf[128];
    sprintf(sbuf, "¥¥¥¥.¥¥COM%d", RS232CTXPORT);
    hRS232CTXPorte = CreateFile(sbuf, 0 , 0 , 0 , OPEN_EXISTING , 0 , 0 );
    if(hRS232CTXPorte == INVALID_HANDLE_VALUE)   return FALSE;
    return TRUE;
    }

void closeport(void)
   {
   CloseHandle(hRS232CTXPorte);
   Sleep(500);
   hRS232CTXPorte = INVALID_HANDLE_VALUE;
   }

// タイムイベントとして呼び出されるコールバック関数
static void CALLBACK callback(unsigned int timerID, unsigned int msg, unsigned int usrParam,
 unsigned int dw1, unsigned int dw2)
   {
   DWORD fdwModemStats; /*コントロールレジスタ値のアドレス*/
   GetCommModemStatus(hRS232CTXPorte, &fdwModemStats);
   if(MSEC > 20)
      {
      printf("%s,%s¥n",
            (fdwModemStats & MS_DSR_ON)?"00001":"    0",
            (fdwModemStats & MS_CTS_ON)?"00001":"    0");
      }
   if(DUALMODE)
      fprintf(FP, "%s,%s¥n",
            (fdwModemStats & MS_DSR_ON)?"1.45":"0.55",
            (fdwModemStats & MS_CTS_ON)?"2.45":"1.55");
   else
      fprintf(FP, "%s,%s¥n",
            (fdwModemStats & MS_DSR_ON)?"00001":"    0",
            (fdwModemStats & MS_CTS_ON)?"00001":"    0");
   EVENT_COUNT++;
   }

int main(int argc, char **argv)
   {
   unsigned int timer;
   SYSTEMTIME stime;
   int ii;
   
   for(ii=1; ii<argc; ii++)
      {
      if(argv[ii][0] == '/')
         {
         if((argv[ii][1] == 'F') || (argv[ii][1] == 'f'))
            {
            if(argv[ii][2] != (char)0)
               strcpy(OUTFILENAME, argv[ii]+2);
            }
         else if((argv[ii][1] == 'D') || (argv[ii][1] == 'd'))
            {
            DUALMODE = 1;
            }
         }
      }

   puts("動作開始後、左が DSR、右が CTS ポートの状態を示します。");
   puts("使用するポート番号入力");
   scanf("%d", &RS232CTXPORT);
   if((RS232CTXPORT < 1) || ( 99 < RS232CTXPORT))
      {
      printf("Port No. Error = %d¥n", RS232CTXPORT);
      return 0;
      }
   if(FALSE == opnport())
      {
      printf("Port Open Error = %d¥n", RS232CTXPORT);
      return 0;
      }
   puts("時間間隔入力(1-1000 ms)");
   scanf("%u", &MSEC);
   if((MSEC < 1) || (1000 < MSEC))
      {
      printf("時間間隔異常 = %u¥n", MSEC);
      closeport();
      return 0;
      }
   if(MSEC <= 20)
      {
      printf("時間間隔 %u では、画面表示無しになります。¥n", MSEC);
      }
   puts("・何かキーを押すと、取込を開始します。");
   printf("・動作開始後、何かキーを押すか、約 %d 回後に停止します。¥n", LOOP);
   while(1)
      {
      Sleep(100); // 0.1 秒間休み。
      if(kbhit()) { getch(); break; }
      }
   puts("動作を開始しました。何かキーを押すと終了します。");

   if(NULL == (FP = fopen( OUTFILENAME, "wt")))
      {
      printf("ファイルを作成出来ません。¥n", OUTFILENAME);
      closeport();
      return 0;
      }

   GetLocalTime(&stime);
   fprintf(FP, "%4.4d/%2.2d/%2.2d,%2.2d:%2.2d¥n", stime.wYear, stime.wMonth,
   stime.wDay, stime.wHour, stime.wMinute);
   fprintf(FP, "¥"ポート番号¥",%d¥n", RS232CTXPORT);
   fprintf(FP, "¥"時間間隔¥",%u,¥"ms¥"¥n", MSEC);
   fprintf(FP, "¥"DSR¥",¥"CTS¥"¥n");

   // タイムイベントの開始
   timer = timeSetEvent(MSEC, 1, (LPTIMECALLBACK) callback, (DWORD) NULL, TIME_PERIODIC);
   if(timer == 0)
      {
      printf("タイムイベントの生成に失敗しました。¥n");
      closeport();
      fprintf(FP, "タイムイベントの生成に失敗しました。¥n");
      fclose(FP);
      return 0;
      }
   // ループ
   while(1)
      {
      Sleep(100); // 0.1秒間休み。
      if(EVENT_COUNT >= LOOP) break;
      if(kbhit()) { getch(); break; }
      }
   // タイムイベントの終了
   timeKillEvent(timer);
   closeport();
   fclose(FP);
   
   return 0;
   }