LINE在電腦上無法執行,出現 “Windows 無法存取指定的裝置、路徑或檔案,您可能沒也適當的權限,所以無法存取該項目” 該怎麼辦?

錯誤訊息 :







從此錯誤的訊息看來,很明顯的是檔案出問題,可能是檔案被移除、損壞、權限不夠或被封鎖等原因。

Windows的支援網站對此錯誤指出以下原因 :

- 如果您的電腦上存在下列任何一種情況,就可能發生這個問題。

  1. 您沒有檔案或檔案位置的存取權限。
  2. 檔案的所在位置目前無法存取,例如網路位置,或是目前未連接到電腦的外部磁碟機。
  3. 檔案已經移動或遭到刪除。
  4. 檔案或捷徑已損毀。
  5. 檔案可能遭到 Windows 封鎖。
  6. 您的防毒軟體可能封鎖檔案。

解決方法在這個網站上也有詳細的說明,你可以點選這裡前往察看

如果你在經過權限更改、移除、重灌、更新LINE等的程序後,問題還是沒解決,可能的問題就是(大部分都是)被防毒軟體給封鎖了。

如果不想或沒有權限更改防毒軟體的設定,至少有兩個方法可以讓你在電腦上繼續使用LINE:

方法一是使用Microsoft Store(微軟提供的線上商店)所提供的LINE APP。

另一個方法是使用Chrome的擴充能所提供的LINE APP(同樣是上chrome 線上應用程式商店下載即可)。

以方法一為例(使用Microsoft Store所提供的LINE APP):

1. 因為此錯誤我們已無法使用既有的LINE,所以須將它移除,如下圖:


2. 進入以下網址,下載及新安裝LINE :









Read More »

[啟動]資料夾在哪裡? (讓Windows開機後自動執行你的程式)

某些有特定用途的電腦,例如傳真服務、檔案伺服器服務...,一開機後我們就要啟動這些服務的相關的程式和設定;或者我們希望電腦一開機就自動將常用的軟體或程式執行起來。如果有以上需求,我們可將這些程式或設定放在Windows的啟動資料匣,當Windows一啟動時,這些程式就會自動地被執行。

Windows 7 版本,在[程式集]下有一個[啟動]選項,我們很容易就可以找到它,只要將相關程式放到此資料夾就完成了,非常清楚簡單。

從Windows 10以後的版本,[啟動]選項就被隱藏起來了,偶爾要使用時還真不容易找到,以下就是尋找[啟動]資料夾的方法:

  • 系統的[啟動]資料夾(對所有的使用者都有效)
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
⊞ Win+R  > 輸入 shell:Common Startup


  • 個別使用者的[啟動]資料夾
C:\%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
⊞ Win+R  > 輸入 shell:startup
Read More »

如何使用MailKit發送電子郵件?

最近發現有一支程式就唯獨在某台電腦上該程式內的e-mail就發不出去了,所以重新檢視一下收發電子郵件的程式及說明,發現在微軟的smtpClient Class文件中提到 SmtpClient Class 因不支援一些新的協議(protocol),在某些平台上已過時,不推薦在其他平台上使用。並指明改用 MailKit [備註1]或其他 Liberary。但是,如果平台上包含有.NET Standard 2.0(或更高版本)、.NET Framework 4 到 .NET Framework 4.8、.NET Core 仍可使用。[備註3]

所以就試著使用MailKit來收發電子郵件而不使用smtpClient Class,如下:

1. 在 Microsoft Visual Studio上安裝 MailKit

2. 使用 MailKit 發送電子郵件--C#程式範例

3. 相關參考文件

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 在 Microsoft Visual Studio上安裝 MaiKit

第一次使用MailKit前須先安裝此套件[備註5],安裝步驟如下:

1.1 工具 > NuGet 套件管理員(N) > 管理方案的NuGet套件(N)…

1.2 在[瀏覽]下方的格子輸入mailkit > 點選[MailKit…項下載] > 出現右側[專案]名稱及是否[已安裝]資訊 > 勾選[專案] > 點選[安裝]。

1.3 點選[確定]繼續進行安裝。

1.4 [已安裝]訊息變為版本編號,表示安裝完成。


2. 使用 MailKit 發送電子郵件--C#程式範例
internal static bool SendEmailByMailKit(
    string FromName,    string FromAddress,
    string ToName,      string ToAddress,
    string CcName,      string CcAddress,
    string BccName,     string BccAddress,
    string SubjectText, string BodyText,    string AttachedFile)
{
    bool success = false;
    var message = new MimeMessage();
    var bodybuilder = new BodyBuilder();    // Using BodyBuilder for email content            
    //
    try
    {
        message.From.Add(new MailboxAddress(FromName, FromAddress));
        message.To.Add(new MailboxAddress(ToName, ToAddress));
        if(!string.IsNullOrEmpty(CcAddress))
            message.Cc.Add(new MailboxAddress(CcName, CcAddress));
        if (!string.IsNullOrEmpty(BccAddress))
            message.Bcc.Add(new MailboxAddress(BccName, BccAddress));
        message.Subject = "[TEST]" + SubjectText;                

        bodybuilder.TextBody = "[This is a plain text]\n\n" + BodyText;
        //or
        //bodybuilder.HtmlBody = "<b>[This is a html text]</b>" +  BodyText;

        if (!string.IsNullOrEmpty(AttachedFile))
            bodybuilder.Attachments.Add(AttachedFile);
        
        message.Body = bodybuilder.ToMessageBody();

        if(!string.IsNullOrEmpty(FromAddress))
        {
            string[] subs = FromAddress.Split('@');
            string mailhost = subs[1];

            var client = new MailKit.Net.Smtp.SmtpClient();
            client.Connect(mailhost, 587, MailKit.Security.SecureSocketOptions.None);
            // or 
            //client.Connect(mailhost, 25, MailKit.Security.SecureSocketOptions.None);
            client.Send(message);
            client.Disconnect(true);
            success = true;
        }                
    }
    catch (Exception e)
    {
        string errormessage = e.ToString();
        success = false;
    }            
    return success;
}
Read More »

如何操作Windows的文字檔(使用C#來建立、讀取、刪除檔案...)?

  •  如何判斷資料夾是否存在 :

if (System.IO.Directory.Exists(mypath))
    return true;
  • 如何建立一個資料夾:

Directory.CreateDirectory(mypath);

  • 如何建立一個文字檔並寫入一串文字:

if (!File.Exists(myfile))
{
    StreamWriter sw = File.CreateText(myfile);    //建立一個文字檔
    sw.WriteLine("my message...");                //寫入一串文字                      
    sw.Close();
}

  • 如何寫入一串文字到既有的文字檔內:

if (!File.Exists(myfile))
{
    StreamWriter sw = new StreamWriter(myfile, true);    //已存在的文字檔
    sw.WriteLine("my message...");                       //寫入一串文字               
    sw.Close(); }

  • 如何搬移檔案(將檔案搬到另一個資料夾):

File.Move(mySourcePathFile, myTargetPathFile);

  • 如何刪除一個檔案:

File.Delete(myfile);  

  • 如何讀取某一資料夾下的所有檔案:

string[] myfiles = System.IO.Directory.GetFiles(mypath);
foreach (string myfile in myfiles)
    myfilename = Path.GetFileName(myfile);    //myfile contains path & file.

  • 如何讀取檔案的內容(一次讀一行):

foreach (string line in File.ReadLines(myfile))

    string[] substring = line.Split(' ');

  • 如何判斷檔案內容是否為空白?

if (new FileInfo(myfilen).Length == 0)      
  retur true;  

  • 如何合併檔案路徑(資料夾)和檔名 :

string mypath = "...";
string myfile = "...";
string mypathfile = Path.Combine(mypath, myfile);

參考網站 : 檔案系統和登錄-c # 程式設計指南 | Microsoft Docs https://docs.microsoft.com/zh-tw/dotnet/csharp/programming-guide/file-system/



Read More »

SQL語法--如何取得日期及計算日期?

SQL取得日期需要透過特別的table,例如ORACLE資料庫要訪問DUAL table;DB2資料庫要訪問SYSDUMMY1 table。

以下以DB2為例,說明SYSDUMMY1 table及日期取得及計算的方法及範例:

  • SYSDUMMY1說明:
    • SYSDUMMY1是屬於系統內建的table,位於SYSIBM下,提供給SQL語句需要時使用,它的內容並不重要(從以下的例子可以發現)。
    • 我們只要利用SQL指令 SELECT * FROM SYSIBM.SYSDUMMY1 就可以看到它的內容。我們可以發現它的內容只有一筆資料,一個欄位,欄位名稱為IBMREQD其值為Y。
  • 取得各種形式的時間(如DATE, TIME, YEAR...),以目前的時間為例:

SELECT
  -- DATE & TIME
  CURRENT TIMESTAMP AS TIMESTAMP,
  CURRENT date AS DATE,
  CURRENT time AS TIME,
  -- YEAR
  YEAR(CURRENT TIMESTAMP) AS YEAR,
  -- MONTH
  MONTH(CURRENT TIMESTAMP) AS MONTH,
  MONTHNAME(CURRENT TIMESTAMP) AS MONTHNAME,     -- 傳回January, Febuary,...
  -- DAY
  DAY(CURRENT TIMESTAMP) AS DAY,                 -- 傳回本月的第幾天
  DAYS(CURRENT TIMESTAMP) AS DAYS,               -- 傳回自西元0001-1-1至此日期的天數
  DAYOFYEAR(CURRENT TIMESTAMP) AS DAYOFYEAR,     -- 傳回本年度的第幾天
  -- HOUR
  HOUR(CURRENT TIMESTAMP) AS HOUR,
  -- MINUTE
  MINUTE(CURRENT TIMESTAMP) AS MINUTE,
  -- SECOND
  SECOND(CURRENT TIMESTAMP) AS SECOND,
  MIDNIGHT_SECONDS(CURRENT TIMESTAMP) AS MIDNIGHT_SECONDS,-- 傳回當天零時到此時間的總秒數
  MICROSECOND(CURRENT TIMESTAMP) AS MICROSECOND,
  -- WEEK
  DAYNAME(CURRENT TIMESTAMP) AS DAYNAME,               -- 傳回Sunday, Monday,...
  DAYOFWEEK_ISO(CURRENT TIMESTAMP) AS DAYOFWEEK_ISO,   -- 傳回1到7, 週一為1,依此類推.
  DAYOFWEEK(CURRENT TIMESTAMP) AS DAYOFWEEK,           -- 傳回1到7, 週日為1,依此類推.
  WEEK_ISO(CURRENT TIMESTAMP) AS WEEK_ISO,             -- 傳回本年度的第幾週(1~53)
  WEEK(CURRENT TIMESTAMP) AS WEEK                      -- 傳回本年度的第幾週(1~54)
FROM SYSIBM.SYSDUMMY1
    • 取得各種形式的時間,執行結果如下:




  • 將字串轉換為日期的各種形式:
SELECT 
  DATE ('2022-03-15') AS DATE1,
  DATE ('03/15/2022') AS DATE2,
  TIME ('12:15:10') AS TIME1,
  TIME ('12.15.10') AS TIME2, 
  TIMESTAMP ('2022-03-15-12.00.00.000000') AS TIMESTAMP1,
  TIMESTAMP ('2022-03-15 12:00:00') AS TIMESTAMP2
FROM SYSIBM.SYSDUMMY1
    • 將字串轉換為日期,執行結果如下:




  • 日期計算的各種方法:
SELECT
  DAYS (CURRENT DATE) - DAYS (DATE('2022-03-10')) AS DAYS1,
  DATE('2022-03-15') - date('2022-03-10') AS DAYS2,
  DATE('2022-03-15') + 2 YEAR AS ADD_YEAR,
  DATE('2022-03-15') + 2 YEAR + 2 MONTH + 2 DAY AS ADD_YEAR_MONTH_DAY,
  TIME('12:15:10') + 2 HOURS + 2 MINUTES + 2 SECONDS AS ADD_HOUR_MINUTE_SEC
FROM SYSIBM.SYSDUMMY1
    • 日期的計算的各種方法,執行結果如下:




Read More »

如何將Windows 11工作列上的項目靠左?就像Windows 10 一樣...

 Windows 10 和 Windows 11 最明顯的差別是工作列上的所有項目都排在中間,剛使用的人可能會很不習慣,如果您想要把它更改為像 Windows 10 一樣靠左排列也是可以的,請看以下更改方法...

- Windows 11 預設將工作列上的項目都置中 ,如下圖:





- 將工作列上的項目改為置左(像Windows 10 一樣),如下圖:


- 更改方法,只要改一個設定,步驟如下:

  1. 在工作列上按滑鼠右鍵 > 選擇[工作列設定]
  2. 往下找[工作列行為] > [工作列對齊] > 右側欄位將[置中]改為[左] 如下圖即可。

Read More »

SQL教學及學習的參考的網站

 SQL教學及學習的參考的網站:




SQL 教程,含 SQL 簡介、SQL 的歷史、SQL 的使用等等。 
無論您是一位 SQL 的新手,或是一位只是需要對 SQL 複習一下的資料倉儲業界老將,您就來對地方了。這個 SQL 教材網站列出常用的 SQL 指令。
分類方式列出常用的 SQL基礎語法方便讀者入門。
瞭解如何在內部部署和雲端中使用 SQL Server 和 Azure SQL。
將教您如何在 MySQL、SQL Server、MS Access、Oracle、Sybase、Informix、Postgres 和其他數據庫系統中使用 SQL。其特色之一是含有練習題。
提供了成功構建數據庫和編寫 SQL 查詢所需的所有資料。有語法、查詢解釋和利用圖形來讓你更容易的地了解。 除此之外,還有數百個帶有在線編輯器和測驗的練習。因此,您可以在不離開瀏覽器的情況下練習概念和查詢。
將可以學到如何使用 SQL 訪問和處理資料系統中的資料,這類資料庫包括:MySQL、SQL Server、Access、Oracle、Sybase、DB2 等等。 
Db2 for z/OS 的SQL的參考,包括 SQL PL。 除非另有說明,否則本書中對 SQL說明針對及適用於Db2 for z/OS 。 
包含有關以下主題的訊息:資料庫概念、內建函數、內建全域變量、語句和查詢、SQL PL & CL、限制、使用 C,Java,COBOL,REXX 和一般外部例程進行程式撰寫
SQL 傳回碼 (SQLSTATE)、CCSID。

 





 

 

Read More »

MS Outlook 傳送的郵件不見了,怎麼辦?

一般來說郵件傳送後,郵件會先到[寄件匣],寄送出去後就會到 [寄件備份]。如果傳送後在這兩個資料匣沒發現這封郵件,我們可能會懷疑我的郵件是否已寄出,或者會懷疑MS Outlook有問題!如果有此疑問,有關已寄郵件的設定一定要先了解。

因為 MS Outlook 使用 Exchange 通訊協定,Exchange 通訊協定可讓您變更已寄郵件的儲存位置[註一][註二]。

  • 所以如果遇到這樣的問題,我們可以檢查一下 [在[寄件備份]資料夾儲存郵件副本(V)]是否啟用,步驟如下:

選取 MS Outlook的[檔案] >  [選項] >  [郵件] > 勾選在[儲存郵件]下的[在[寄件備份]資料夾儲存郵件副本(V)],如下圖。


  • 或是開啟一封新的郵件 ,裡面的[選項]也有此資訊,我們可以透過以下的步驟及說明查看目前寄出郵件的處置的狀態: 
檢視步驟 :
[新增電子郵件] > [選項] > [儲存寄件備份到] > 如下圖。


以上[儲存寄件備份到]下的各選項說明:
  • [使用預設資料夾(U)]:表示[在[寄件備份]資料夾儲存郵件副本(V)]已開啟,已寄出的郵件將儲存到 [寄件備份]。
  • [不儲存(D)] :表示[在[寄件備份]資料夾儲存郵件副本(V)]未開啟,已寄出的郵件將不會儲存到任何資料夾。
  • [其他資料夾(O)]:透過此選項,可以指定這封郵件寄出後儲存至某一資料匣。

註一 : 也可以參考微軟有關 變更儲存已傳送電子郵件訊息的位置 的說明。
Read More »

MS Outlook的資料夾不見了,怎麼辦?

如果你是MS Outlook的重度使用者,一定會建立很多的資料夾,然後將自己的email分門別類的歸檔。但是如果某天發現重要的資料夾不見了,請先別慌,很可能您不小心把它移到別處。您可以用以下方法找到此資料夾,再將它移回正確位置。

這裡提供兩種方法來找您那不見的資料夾 : 

方法1:透過[資料檔屬性]找到資料夾的位置
例如,我們要找資料夾Vendors,步驟如下:
1.1 在某一[資料檔]上按滑鼠右鍵 > 按[資料檔案屬性] 

1.2 再按[資料夾大小]

 

1.3 [資料夾大小]的視窗會出現這個資料檔內的的所有資料夾,所以我們很容易就發現我們要找的資料夾Vendors,如下圖。 


方法2:利用搜尋(某一封郵件)功能找出資料夾的位置
同上例,我們要找資料夾Vendors,先利用vulnerability找到此資料夾下的一封email,如以下步驟:
2.1 在此以搜尋[vulnerability]為例,搜尋對象改為[所有Outlook項目] 

2.2 將搜尋到的email開啟,如下圖 

2.3 在搜尋到的email上(如上圖)按ctrl+shift+F,就出現這封email的資料夾Vendors,再點選[瀏覽]。 

2.4 即可看到我們要找的資料夾所在的位置,如下如。

Read More »

如何將Google相簿顯示在網頁裡?

要將Google相簿顯示在(嵌入)網頁或部落格裡有很多方法,本篇介紹的方法由網站Public album .org所提供;我們利用Google相簿的分享連結和Public album .org的工具(CREATE EMBED CODE)取得HTML程式碼,再將這段程式碼插入我們的網頁裡即可很容易地將相簿顯示在網頁裡。

以下示範將Google相簿顯示在Google網誌(Spotblog)裡,依照以下步驟即可完成:

1. 登入Google相簿 > 選擇一個相簿(ex, Ab_野柳風景...) > ... > [選項]

2. 關閉[協同合作] > 開啟[透過連結共享] > [複製連結] (本例我們取得此連結 https://photos.app.goo.gl/qX4brJyNjriPbKrLA)


3.進入Public album .org > 找到下圖 > 將以上取得的連結貼在https://欄位 > 點選[CREATE EMBED CODE]

4. 複製相片右側的程式碼,或點選[COPY CODE TO CLIPBOARD]亦可。
    其他欄位可不須修改,當然也可依需求作修改,例如在此我把Background Color改為#1b0d66.

5. 回到編輯網頁畫面,如下圖我們預計將相片置於某一行的下方,然後切換到[HTML檢視]模式。

6. 將所複製的程式碼貼在某一段文字的</p>之後就完成了。

完成後的樣子就如下圖或請瀏覽此網頁"相簿 -- 野柳風景"

Read More »

相簿 -- 野柳風景

幾年前拍攝的野柳風景:

拍攝於2016.02.12

參考網站: 野柳地質公園 

Read More »

如何檢查貨櫃號碼(集裝箱號碼)是否正確?

如何檢查貨櫃號碼(集裝箱號碼)是否正確?除了從資料庫尋找是否有此櫃號外,也可以透過核對校驗碼的方式來檢查該櫃號是否正確。 本篇我們就來研究一下貨櫃號碼的編碼規則和其校驗碼(或稱檢查)的取得方法,另外再提供之前寫的取得校驗碼的這段程式。

  1. 貨櫃號碼(集裝箱號碼)的編碼規則
  2. 校驗碼Value of check digit 的計算方法
  3. 以程式語言C#來取得校驗碼

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. 貨櫃號碼(集裝箱號碼)的編碼規則 :

在 ISO 6346 的第3部分 (3. Identification system and its associated marks) 對貨櫃號碼的編碼有詳細說明:此識別系統(指貨櫃號碼/集裝箱號碼)共11碼,應由以下要素組成:

  • 所有者代碼(3碼):

貨櫃所有人代碼由三碼(三個大寫字母)組成母,是唯一的並應與國際集裝箱局 (BIC - Bureau International des Conteneurs) 註冊。

  • 設備類別(1碼);

設備類別由以下三個拉丁字母大寫字母之一組成,

U :代表所有貨運貨櫃 

J :為可拆卸貨櫃相關設備 

Z :用於拖車和板架

  • 序號(6碼):

由 6 位數字組成,如不足6位則前面補0,由所有者或運營商自行配號。    

  • 校驗碼(1碼): 

只有一個數字,此校驗碼用以驗證上面的所有者代碼、設備類別和序號是否正確。

2. 校驗碼(Value of check digit)的計算方法

    如上可知,一個貨櫃號碼含校驗碼應該是11碼,校驗碼的確定是經由一定的計算程序取得。可以透過以下A.1A.4的說明即可了解其計算方法

  • A.1 等效值(Numerical equivalents ) :˙
貨櫃號碼的1到10碼都將被附於一個值(Equivalent values),各碼的值如表A的A.1 Equivalent values 部分。
  • A.2 加權因子(Weighting factor) :
貨櫃號碼的1到10的每一個位置也被附於一個加權值(Weighting Values)如表A的A.2 Weighting Values 部分。
  • A.3 模數(Modulus):
模數就是一個數除以另一個數的餘數。在此為各個字元的A.1和A.2相乘後加總再除以11的餘數
  • A.4 校驗碼(Value of check digit):
A.3計算後取得的模數(餘數),其個位值(餘數為10時取0)就是我們要的校驗碼(Value of check digit)

歸納以上說明如下表A:

表A

表A.1

以櫃號TCNU4260450為例,其校驗碼為0,將計算過程列於下表:



3. 以程式語言C#來取得校驗碼
private static string getCheckDigitForContainerNo(string ContainerNo, ref string errString)
{
    string checkdigit = "";
    try
    {
        //1. store ContainerNo to array
        char[] ContainerChar = ContainerNo.ToCharArray();
        int[] EquivalentValuePerChar = new int[10];
        int[] WeightValue = new int[10];

        //Assign Weight values
        int value = 2;
        for(int power=0; power<=9; power++)                
            WeightValue[power] = (int)Math.Pow(value, power);    
        
        //Assign Equivalent Values           
        for (int i = 0; i <= 9; i++)
        {
            switch (ContainerChar[i])
            {
                case 'A':
                    if (i < 4) EquivalentValuePerChar[i] = 10;
                    break;
                case 'B':
                    if (i < 4) EquivalentValuePerChar[i] = 12;
                    break;
                case 'C':
                    if (i < 4) EquivalentValuePerChar[i] = 13;
                    break;
                case 'D':
                    if (i < 4) EquivalentValuePerChar[i] = 14;
                    break;
                case 'E':
                    if (i < 4) EquivalentValuePerChar[i] = 15;
                    break;
                case 'F':
                    if (i < 4) EquivalentValuePerChar[i] = 16;
                    break;
                case 'G':
                    if (i < 4) EquivalentValuePerChar[i] = 17;
                    break;
                case 'H':
                    if (i < 4) EquivalentValuePerChar[i] = 18;
                    break;
                case 'I':
                    if (i < 4) EquivalentValuePerChar[i] = 19;
                    break;
                case 'J':
                    if (i < 4) EquivalentValuePerChar[i] = 20;
                    break;
                case 'K':
                    if (i < 4) EquivalentValuePerChar[i] = 21;
                    break;
                case 'L':
                    if (i < 4) EquivalentValuePerChar[i] = 23;
                    break;
                case 'M':
                    if (i < 4) EquivalentValuePerChar[i] = 24;
                    break;
                case 'N':
                    if (i < 4) EquivalentValuePerChar[i] = 25;
                    break;
                case 'O':
                    if (i < 4) EquivalentValuePerChar[i] = 26;
                    break;
                case 'P':
                    if (i < 4) EquivalentValuePerChar[i] = 27;
                    break;
                case 'Q':
                    if (i < 4) EquivalentValuePerChar[i] = 28;
                    break;
                case 'R':
                    if (i < 4) EquivalentValuePerChar[i] = 29;
                    break;
                case 'S':
                    if (i < 4) EquivalentValuePerChar[i] = 30;
                    break;
                case 'T':
                    if (i < 4) EquivalentValuePerChar[i] = 31;
                    break;
                case 'U':
                    if (i < 4) EquivalentValuePerChar[i] = 32;
                    break;
                case 'V':
                    if (i < 4) EquivalentValuePerChar[i] = 34;
                    break;
                case 'W':
                    if (i < 4) EquivalentValuePerChar[i] = 35;
                    break;
                case 'X':
                    if (i < 4) EquivalentValuePerChar[i] = 36;
                    break;
                case 'Y':
                    if (i < 4) EquivalentValuePerChar[i] = 37;
                    break;
                case 'Z':
                    if (i < 4) EquivalentValuePerChar[i] = 38;
                    break;
                default:
                    if (i >= 4 && i <= 9)
                        EquivalentValuePerChar[i] = int.Parse(ContainerChar[i].ToString());
                    break;
            }
        }

        //3. Get Grand TTL
        int GrdTTL = 0;
        int RtvCheckDigitLength = 1;
        for (int i = 0; i <= 9; i++)              
            GrdTTL = GrdTTL + EquivalentValuePerChar[i] * WeightValue[i];                

        //4. Get checkdigit
        string Remainder = (GrdTTL % 11).ToString();                
        checkdigit = Remainder.ToString().Substring(Remainder.ToString().Length - RtvCheckDigitLength, RtvCheckDigitLength);
    }
    catch (Exception ex)
    {
        string err = ex.ToString();
        errString = "The Check digit cannot be calculated because of wrong Container number...!";
    }

    if (checkdigit == "")
        errString = "The Check digit cannot be calculated because of wrong Container number...!";

    return checkdigit;
}
Read More »

如何將Windows 10(或 Windows 11)的帳戶更改為本機帳戶(Local Account)?

Microsoft 希望您在 Windows 10 (或 Windows 11) 中使用微軟帳戶(Microsoft Account),所以當你安裝或使用Windows和Office過程中常常會引導你登入微軟帳戶,導致你的Windows的登入帳戶由"本機帳戶(Local Account)"被改為"微軟帳戶"。

在說明如何將Windows 10(或 Windows 11)的帳戶更改為"本機帳戶"前,我們先了解一下"本機帳戶"和"微軟帳戶"的差異:

  • 本機帳戶(Local Account):

顧名思義該帳戶為本機所有,也就是您的Windows本身的帳號與網路上的帳戶無關。所以從資料安全方面來說相對安全;也因為它沒有和網路或雲端上的帳號綁定,所以在使用上相對單純。

  • 微軟帳戶(Microsoft Account):

顧名思義該帳戶為微軟的帳號,如果你以前曾經申請或用過Outlook, Hotmail...等服務,那你就已經有此帳號了。

當安裝或使用過程中系統會常常提示你輸入此帳號,你輸入以後,你的Windows 10帳戶號就會和此帳號綁在起了。

也就是說你Window 10(或Windows 11)開機後你必須以此帳號登入。

其好處是微軟所有的本機應用程式或雲端的應用都不用再做登入的動作;

壞處是你的個人帳號一直處於連線狀態,可能會有資安問題(包括如果你的電腦會與他人共用,你的個人資訊很容易的被他人瀏覽),

另外,如果網路中斷,你的電腦也可能會變得不能用。

如果你現在使用微軟帳戶卻想改為本機帳戶,請繼續看以下的教學 -- 如何將Windows 10(或 Windows 11)的帳戶更改為"本機帳戶"?

1. 開始>設定>帳戶>[改為使用本機帳戶登入]


2. 點選[下一步]


3. 如果有PIN碼就輸入PIN碼,否則就輸入微軟帳號的密碼。


4. 本機帳號、密碼及密碼提示都要填,再點[下一步]。


5. 點選[登出並完成],Windows就重新開機即可以本機帳號登入。




Read More »

開IE卻自動開啟Edge瀏覽器,如何恢復使用IE?

我的網站上的有一個查詢需使用Microsoft Silverlight外掛,但現在的瀏覽器Edge, Chrome, Firefox等都已不再支援Silverlight,也就是說這個查詢功能在這些瀏覽器上已無法執行。

詳細資訊可瀏覽以下微軟提供的資訊或點此連結 :

Microsoft Silverlight 將于 2021 年 10 月 12 日終止支援。 隨著 2020 年 1 月 31 日即將終止對 Internet Explorer 10 的支援,目前只有在 Internet Explorer 10 和 Internet Explorer 11 上支援 Silverlight 開發架構。 不再支援 Chrome、Firefox 或任何使用 Mac 作業系統的瀏覽器。

以上問題,如果要更改程式需要一些時間,應急的方式就是請使用者重新使用舊版的IE瀏覽器。

但是很多人會發現當我們點選IE來開啟時但系統卻自動改用Edge來開啟網站。

  • 要如何關閉"開IE卻自動開啟Edge瀏覽器"的設定? 方法如下:

Edge > 設定 > 預設瀏覽器 > 將[在 Microsoft Edget 中以 Internet Explorer 開啟網站]改為"永不"或"僅限不相容的網站"。如下圖 : 




 











  • 另一個方式是"在Edge內開啟IE模式",方法如下 :
先進入你要查詢的網站 > 點選...(就是[設定及其他],在Edge瀏覽器右上角) > [在 Internet Explorer 模式中重新載入] ,如下圖 :

再點選[完成],如下圖:

 

如果你的網站處於IE模式,Edge瀏覽器會出現"您目前處於Internet Explorer模式...",如下圖:

 

  • 在Edge內開啟IE模式,進階使用說明 :

如果經常使用某網站,你可以在[完成]前將開啟[下次在Internet Explorer模式中開啟此頁面](如下圖3-1),開啟後Edge會將該網址記錄起來(如下圖3-2),下次再使用該網站時就會自動啟用IE模式。

圖3-1
開啟後Edge會將該網址記錄到 > 設定 > 預設瀏覽器 > [Intenet Explorer 模式頁面] :
        圖3-2




Read More »
>