<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>工具與開發環境 on kenji.blog</title><link>http://kenji.blog/zh-tw/categories/%E5%B7%A5%E5%85%B7%E8%88%87%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83/</link><description>Recent content in 工具與開發環境 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-tw</language><copyright>kenjinote</copyright><lastBuildDate>Mon, 14 Jul 2025 23:40:15 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-tw/categories/%E5%B7%A5%E5%85%B7%E8%88%87%E9%96%8B%E7%99%BC%E7%92%B0%E5%A2%83/index.xml" rel="self" type="application/rss+xml"/><item><title>如何從 C++ 向 Microsoft Teams 發佈訊息（WinHTTP + Graph API）</title><link>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%BE%9E-c-%E5%90%91-microsoft-teams-%E7%99%BC%E4%BD%88%E8%A8%8A%E6%81%AFwinhttp--graph-api/</link><pubDate>Mon, 14 Jul 2025 23:40:15 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%BE%9E-c-%E5%90%91-microsoft-teams-%E7%99%BC%E4%BD%88%E8%A8%8A%E6%81%AFwinhttp--graph-api/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%8B%E3%82%89-microsoft-teams-%E3%81%AB%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E6%8A%95%E7%A8%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95winhttp--graph-api/img.png" alt="Featured image of post 如何從 C++ 向 Microsoft Teams 發佈訊息（WinHTTP + Graph API）" />&lt;h1 id="如何從-c-向-microsoft-teams-發佈訊息winhttp--graph-api">如何從 C++ 向 Microsoft Teams 發佈訊息（WinHTTP + Graph API）
&lt;/h1>&lt;p>想自動發佈訊息到 Microsoft Teams 聊天室中嗎？&lt;br>
這時候可以使用的就是 &lt;strong>Microsoft Graph API&lt;/strong> 。&lt;br>
在本文中，我們將透過步驟介紹 &lt;strong>使用 WinHTTP 的 C++ 程式碼範例&lt;/strong> 以及 &lt;strong>必要的 API 認證步驟&lt;/strong> 。&lt;/p>
&lt;hr>
&lt;h2 id="-必要的準備microsoft-graph-api-認證設定">🔧 必要的準備（Microsoft Graph API 認證設定）
&lt;/h2>&lt;h3 id="1-在-azure-入口網站註冊應用程式">1. 在 Azure 入口網站註冊應用程式
&lt;/h3>&lt;p>首先，要使用 Microsoft Graph API，必須在 Azure 註冊應用程式。&lt;/p>
&lt;ol>
&lt;li>前往 &lt;a class="link" href="https://portal.azure.com" target="_blank" rel="noopener"
>Azure Portal&lt;/a>&lt;/li>
&lt;li>&lt;strong>「Microsoft Entra ID」&lt;/strong> &amp;gt; &lt;strong>「＋新增」&lt;/strong> &amp;gt; &lt;strong>「應用程式註冊」&lt;/strong> &amp;gt; &lt;strong>「新增註冊」&lt;/strong>&lt;/li>
&lt;li>輸入任意應用程式名稱後點擊「註冊」&lt;/li>
&lt;/ol>
&lt;h3 id="2-新增-api-權限">2. 新增 API 權限
&lt;/h3>&lt;ol>
&lt;li>前往左側選單的「API 權限」&lt;/li>
&lt;li>在 &lt;strong>「Microsoft Graph」&lt;/strong> &amp;gt; &lt;strong>「新增權限」&lt;/strong> 中搜尋以下範圍，然後點擊 &lt;strong>「更新權限」&lt;/strong>&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>Chat.ReadWrite&lt;/li>
&lt;li>User.Read&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>※ 若想要發佈到頻道，則還需要 &lt;code>ChannelMessage.Send&lt;/code>&lt;/p>
&lt;/blockquote>
&lt;h3 id="3-記下用戶端識別碼與租用戶識別碼">3. 記下用戶端識別碼與租用戶識別碼
&lt;/h3>&lt;p>記下顯示在「概觀」索引標籤中的以下兩項：&lt;/p>
&lt;ul>
&lt;li>應用程式 (用戶端) 識別碼&lt;/li>
&lt;li>目錄 (租用戶) 識別碼&lt;/li>
&lt;/ul>
&lt;h3 id="4-建立用戶端密碼">4. 建立用戶端密碼
&lt;/h3>&lt;ol>
&lt;li>前往「憑證與密碼」索引標籤&lt;/li>
&lt;li>點擊「新增用戶端密碼」 &amp;gt; 設定到期日後，點擊「新增」&lt;/li>
&lt;li>顯示的值（密碼）請 &lt;strong>務必當下立刻記下&lt;/strong>&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-取得存取權杖oauth2">🔐 取得存取權杖（OAuth2）
&lt;/h2>&lt;p>取得時我們使用 &lt;code>client_credentials&lt;/code> 流程。&lt;br>
使用 curl 執行以下命令，以取得存取權杖。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -X POST ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> https://login.microsoftonline.com/&lt;span class="o">{&lt;/span>租用戶識別碼&lt;span class="o">}&lt;/span>/oauth2/v2.0/token ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &lt;span class="s2">&amp;#34;Content-Type: application/x-www-form-urlencoded&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;client_id={用戶端識別碼}&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;client_secret={用戶端密碼}&amp;#34;&lt;/span> ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -d &lt;span class="s2">&amp;#34;grant_type=client_credentials&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="回應範例">回應範例
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;token_type&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="s2">&amp;#34;Bearer&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;expires_in&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3599&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;ext_expires_in&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="mi">3599&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;access_token&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;eyJ0eXAiOiJKV1QiLCJub...（省略）&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>使用此 access_token 來呼叫 Microsoft Graph API。&lt;/p>
&lt;h2 id="-投稿到-teams-聊天室的-c-範例">💬 投稿到 Teams 聊天室的 C++ 範例
&lt;/h2>&lt;p>這裡示範使用 WinHTTP 向聊天室發佈訊息的 C++ 範例。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;windows.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;winhttp.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;string&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;winhttp.lib&amp;#34;)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">PostToTeamsChat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">accessToken&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hSession&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;TeamsPoster/1.0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_ACCESS_TYPE_DEFAULT_PROXY&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_PROXY_NAME&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_NO_PROXY_BYPASS&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hConnect&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpConnect&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;graph.microsoft.com&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">INTERNET_DEFAULT_HTTPS_PORT&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">endpoint&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;/v1.0/chats/&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">chatId&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;/messages&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">HINTERNET&lt;/span> &lt;span class="n">hRequest&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpOpenRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;POST&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">endpoint&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WINHTTP_NO_REFERER&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_DEFAULT_ACCEPT_TYPES&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">WINHTTP_FLAG_SECURE&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">jsonBody&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;{&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">body&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">: {&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">content&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">: &lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\&amp;#34;&lt;/span>&lt;span class="s">}}&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">headers&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Authorization: Bearer &amp;#34;&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">accessToken&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">Content-Type: application/json&lt;/span>&lt;span class="se">\r\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">BOOL&lt;/span> &lt;span class="n">bResult&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">WinHttpSendRequest&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">headers&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1L&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">LPVOID&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">c_str&lt;/span>&lt;span class="p">(),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">)),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="n">DWORD&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">jsonBody&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">length&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">bResult&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpReceiveResponse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">NULL&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">dwSize&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpQueryDataAvailable&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">dwSize&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">dwSize&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">response&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dwSize&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">wchar_t&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">DWORD&lt;/span> &lt;span class="n">dwDownloaded&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpReadData&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">response&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">dwSize&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">dwDownloaded&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Response: &amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">response&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hRequest&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hConnect&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">WinHttpCloseHandle&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">hSession&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">access&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">chatId&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;19:&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wstring&lt;/span> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Hello from C++!&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Enter your access token: &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">getline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">access&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Enter chat ID: &amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">getline&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">wcin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PostToTeamsChat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">access&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">chatId&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="-取得聊天室識別碼的方法">🔍 取得聊天室識別碼的方法
&lt;/h2>&lt;p>聊天室識別碼可以透過 GET /v1.0/me/chats 來確認。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">curl -X GET ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> https://graph.microsoft.com/v1.0/me/chats ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &amp;#34;Authorization: Bearer {access_token}&amp;#34; ^
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> -H &amp;#34;Content-Type: application/json&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="回應範例-1">回應範例
&lt;/h3>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;value&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;id&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;19:abc123xyz@thread.v2&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;topic&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">null&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;chatType&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;oneOnOne&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="-注意事項">📌 注意事項
&lt;/h2>&lt;ul>
&lt;li>此範例為最基本實作。在實際運用中：
&lt;ul>
&lt;li>權杖過期處理&lt;/li>
&lt;li>HTTPS 憑證驗證&lt;/li>
&lt;li>錯誤處理的強化&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>頻道發佈請使用 teams/{team-id}/channels/{channel-id}/messages 。&lt;/li>
&lt;li>傳送附件檔案需要多部分處理 (multipart) 或 Graph Drive API。&lt;/li>
&lt;/ul>
&lt;h2 id="總結">總結
&lt;/h2>&lt;h2 id="-總結">📎 總結
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>功能&lt;/th>
&lt;th>概要&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Graph API&lt;/td>
&lt;td>與 Teams 互動的官方 API&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>應用程式註冊&lt;/td>
&lt;td>Azure 上必要的認證手續&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>存取權杖&lt;/td>
&lt;td>透過 OAuth2 取得，並用於請求中&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C++ 實作&lt;/td>
&lt;td>使用 WinHTTP 呼叫 Graph API&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="-下一步">🚀 下一步
&lt;/h2>&lt;p>作為更進階的範例，以下也是可行的：&lt;/p>
&lt;ul>
&lt;li>團隊頻道發佈 (&lt;code>/teams/{team-id}/channels/...&lt;/code>)&lt;/li>
&lt;li>帶有附件檔案的發佈&lt;/li>
&lt;li>機器人帳號或使用者帳號的切換&lt;/li>
&lt;li>包含取得權杖在內的完整 C++ 實作&lt;/li>
&lt;/ul>
&lt;p>如有任何需求，歡迎隨時留言！&lt;/p></description></item><item><title>【初學者指南】使用 vcpkg 在 Visual Studio 中安裝 libcurl（支援 OpenSSL）的步驟</title><link>http://kenji.blog/zh-tw/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Mon, 07 Jul 2025 21:46:08 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/vcpkg-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-visual-studio-%E3%81%AB-curl-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img.png" alt="Featured image of post 【初學者指南】使用 vcpkg 在 Visual Studio 中安裝 libcurl（支援 OpenSSL）的步驟" />&lt;h2 id="如果您要在-visual-studio-中使用-libcurl支援-openssl強烈推薦引入-vcpkg非常簡單">如果您要在 Visual Studio 中使用 libcurl（支援 OpenSSL），強烈推薦引入 vcpkg，非常簡單
&lt;/h2>&lt;p>在 C++ 中處理 HTTP 通訊時，經常會使用 libcurl。但是，編譯和調整相依性卻意外地麻煩，對吧？&lt;/p>
&lt;p>這時候能派上用場的就是微軟開發的 C++ 函式庫管理工具 ** 「vcpkg」 ** 。
這次我們將介紹如何使用 cpkg 來引入 libcurl（支援 OpenSSL），並讓它在 Visual Studio 中能順暢使用的步驟。&lt;/p>
&lt;hr>
&lt;h3 id="vcpkg-的安裝僅限尚未安裝者">vcpkg 的安裝（僅限尚未安裝者）
&lt;/h3>&lt;p>首先，我們來安裝 cpkg. 請在 PowerShell 中執行以下步驟。&lt;/p>
&lt;p>&lt;code>powershell git clone https://github.com/microsoft/vcpkg cd vcpkg .ootstrap-vcpkg.bat &lt;/code>&lt;/p>
&lt;p>※如果您還沒安裝 Git，請到 &lt;a class="link" href="https://git-scm.com/" target="_blank" rel="noopener"
>Git 官方網站&lt;/a> 進行安裝。&lt;/p>
&lt;hr>
&lt;h3 id="libcurl支援-openssl的安裝">libcurl（支援 OpenSSL）的安裝
&lt;/h3>&lt;p>接著，使用 vcpkg 來安裝 libcurl. 為了指定支援 OpenSSL 的 64 位元版本，請執行以下命令。&lt;/p>
&lt;p>&lt;code>powershell vcpkg install curl[ssl] --triplet x64-windows &lt;/code>&lt;/p>
&lt;p>執行此命令後，必要的相依性（如 OpenSSL）也會被自動設定好。&lt;/p>
&lt;hr>
&lt;h3 id="與-visual-studio-的整合設定">與 Visual Studio 的整合設定
&lt;/h3>&lt;p>為了讓在 vcpkg 引入的函式庫能從 Visual Studio 專案中輕鬆使用，請使用下列命令進行整合設定。&lt;/p>
&lt;p>&lt;code>powershell vcpkg integrate install &lt;/code>&lt;/p>
&lt;p>設定好之後，在 Visual Studio 的專案中就能自動使用 #include &amp;lt;curl/curl.h&amp;gt;，不再需要手動設定函式庫的路徑或連結器。&lt;/p>
&lt;hr>
&lt;h2 id="結語">結語
&lt;/h2>&lt;p>至此，在 Visual Studio 中引入 libcurl（支援 OpenSSL）的準備工作就完成了。&lt;/p>
&lt;ul>
&lt;li>只要使用 vcpkg，就能一次管理所有麻煩的相依性&lt;/li>
&lt;li>使用 cpkg install curl[ssl] &amp;ndash;triplet x64-windows 輕鬆引入 libcurl&lt;/li>
&lt;li>使用 cpkg integrate install 即可與 Visual Studio 進行自動整合&lt;/li>
&lt;/ul>
&lt;p>接下來，只要在專案中包含標頭檔，並使用 libcurl 的 API 就能開始開發了。
請善用方便的 vcpkg，一口氣提升您的開發效率吧。&lt;/p></description></item><item><title>再次榮獲 Microsoft MVP (2024-2025)</title><link>http://kenji.blog/zh-tw/p/%E5%86%8D%E6%AC%A1%E6%A6%AE%E7%8D%B2-microsoft-mvp-2024-2025/</link><pubDate>Tue, 03 Sep 2024 21:25:20 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%86%8D%E6%AC%A1%E6%A6%AE%E7%8D%B2-microsoft-mvp-2024-2025/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img.png" alt="Featured image of post 再次榮獲 Microsoft MVP (2024-2025)" />&lt;h1 id="再次榮獲-microsoft-mvp-2024-2025">再次榮獲 Microsoft MVP (2024-2025)
&lt;/h1>&lt;p>&lt;img src="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1.png"
width="510"
height="680"
srcset="http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1_hu43fc94f004bc47efe4ebeb44e3c1c9ff_744182_480x0_resize_box_3.png 480w, http://kenji.blog/p/microsoft-mvp2024-2025%E3%82%92%E5%86%8D%E5%8F%97%E8%B3%9E%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/img_1_hu43fc94f004bc47efe4ebeb44e3c1c9ff_744182_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img\_1.png"
class="gallery-image"
data-flex-grow="75"
data-flex-basis="180px"
>&lt;/p>
&lt;p>大家好，我是 kenji。
很高興向大家報告，我今年再次榮獲 &lt;strong>Microsoft MVP (Most Valuable Professional)&lt;/strong> 獎項。這是我第 8 次獲得此殊榮。&lt;/p>
&lt;p>藉此機會，我想稍微聊聊「什麼是 MVP」。&lt;/p>
&lt;hr>
&lt;h2 id="什麼是-microsoft-mvp">什麼是 Microsoft MVP？
&lt;/h2>&lt;p>雖然叫 MVP，但這與體育界的「最有價值球員」無關（雖然偶爾會被問到&amp;hellip;）。
&lt;strong>Microsoft MVP (Most Valuable Professional)&lt;/strong> 是頒發給積極向社群分享、傳遞微軟技術知識與經驗的人的一項榮譽。&lt;/p>
&lt;p>撰寫技術部落格、在問答網站上回答問題、公開範例程式碼，或是參與活動演講。
「以幫助他人的方式分享自己所知」——這些腳踏實地的活動都會受到評估。&lt;/p>
&lt;p>獲獎者遍布全球，但每年人數有限，要再次獲獎也絕非易事。
在這樣的情況下能再次獲得認可，我真的非常感激。&lt;/p>
&lt;hr>
&lt;h2 id="獲獎理由">獲獎理由
&lt;/h2>&lt;p>這次的獎項是在「Developer Technologies」類別下再次獲獎。
過去這一年，我參與了以下活動：&lt;/p>
&lt;ul>
&lt;li>撰寫關於微軟相關技術的部落格文章&lt;/li>
&lt;li>在技術問答網站上回答問題&lt;/li>
&lt;li>在 GitHub 上公開範例程式碼&lt;/li>
&lt;li>在讀書會和技術活動中發表演講 等等&lt;/li>
&lt;/ul>
&lt;p>這些都不是什麼特別了不起的事，但我一直努力將「我自己嘗試過且成功的方法」和「遇到困難但解決的經驗」轉化為對他人有用的形式分享出來。&lt;/p>
&lt;p>看到這些努力有了成果，我感到由衷的高興。&lt;/p>
&lt;hr>
&lt;h2 id="展望未來">展望未來
&lt;/h2>&lt;p>技術領域的發展速度非常快，光是要跟上腳步就很辛苦了。
但正因如此，分享「實際使用的感受」以及「哪裡難以理解」這類「真實資訊」，才顯得更有意義。&lt;/p>
&lt;p>未來我也會繼續以自己的步調前進，不會給自己太大壓力。
如果我提供的資訊能讓某個人覺得「啊，這幫了大忙」，那我就心滿意足了。&lt;/p>
&lt;p>今後也請多多指教。&lt;/p></description></item><item><title>Visual Studio Code 推薦擴充功能</title><link>http://kenji.blog/zh-tw/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/</link><pubDate>Wed, 29 May 2024 17:20:19 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/</guid><description>&lt;img src="http://kenji.blog/p/visual-studio-code%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD/img.png" alt="Featured image of post Visual Studio Code 推薦擴充功能" />&lt;h1 id="visual-studio-code-推薦擴充功能列表">Visual Studio Code 推薦擴充功能列表
&lt;/h1>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>分類&lt;/th>
&lt;th>名稱&lt;/th>
&lt;th>提供者&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>虛擬與容器管理&lt;/td>
&lt;td>Remote Devlopment&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援透過 SSH 連接至虛擬容器/WSL 進行遠端開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>虛擬與容器管理&lt;/td>
&lt;td>Docker&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 Docker 容器的管理&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>程式碼管理&lt;/td>
&lt;td>GitHub Pull Requests&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>在 VSCode 上管理 GitHub 的 Pull Requests&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>程式碼管理&lt;/td>
&lt;td>GitHub Copilot&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>支援 AI 程式碼自動完成&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>程式碼管理&lt;/td>
&lt;td>Git Graph&lt;/td>
&lt;td>mhutchie&lt;/td>
&lt;td>以圖形化方式顯示 Git 分支與提交記錄&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>程式碼管理&lt;/td>
&lt;td>Git History&lt;/td>
&lt;td>Don Jayamanne&lt;/td>
&lt;td>顯示 Git 歷史記錄&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>瀏覽器與 Web 開發&lt;/td>
&lt;td>Debugger for Firefox&lt;/td>
&lt;td>Firefox DevTools&lt;/td>
&lt;td>在 VSCode 上使用 Firefox 偵錯工具&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>瀏覽器與 Web 開發&lt;/td>
&lt;td>Microsoft Edge Tool For VScode&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>在 VSCode 上使用 Edge 開發人員工具&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>瀏覽器與 Web 開發&lt;/td>
&lt;td>Vue Language Features(Volar)&lt;/td>
&lt;td>Vue&lt;/td>
&lt;td>支援 Vue 的語言功能&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>瀏覽器與 Web 開發&lt;/td>
&lt;td>JavaScript (ES6) code snippets&lt;/td>
&lt;td>charalampos karypidis&lt;/td>
&lt;td>提供 JavaScript 程式碼片段&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>瀏覽器與 Web 開發&lt;/td>
&lt;td>Tailwind CSS IntelliSense&lt;/td>
&lt;td>Tailwind Labs&lt;/td>
&lt;td>提供 Tailwind CSS 程式碼片段&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>雲端開發&lt;/td>
&lt;td>AWS Toolkit&lt;/td>
&lt;td>Amazon Web Services&lt;/td>
&lt;td>支援 AWS 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>雲端開發&lt;/td>
&lt;td>Azure Tools&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 Azure 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>雲端開發&lt;/td>
&lt;td>Google Cloud Tools&lt;/td>
&lt;td>Google Cloud&lt;/td>
&lt;td>支援 Google Cloud 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>資料庫&lt;/td>
&lt;td>MySQL&lt;/td>
&lt;td>Jun Han&lt;/td>
&lt;td>支援 MySQL 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>資料庫&lt;/td>
&lt;td>SQL Server(mssql)&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 SQL Server 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>資料庫&lt;/td>
&lt;td>PostgreSQL&lt;/td>
&lt;td>Chris Kolkman&lt;/td>
&lt;td>支援 PostgreSQL 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>嵌入式系統&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>支援 PlatformIO 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>嵌入式系統&lt;/td>
&lt;td>Arduino&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 Arduino 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>嵌入式系統&lt;/td>
&lt;td>WorkBench&lt;/td>
&lt;td>Particle&lt;/td>
&lt;td>支援 IoT 開發，包含 Particle 提供的開發環境、韌體、函式庫以及雲端整合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>C/C++ Extension Pack&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 C/C++ 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>C/C++ Runner&lt;/td>
&lt;td>franneck94&lt;/td>
&lt;td>執行 C/C++ 程式碼 (支援 gcc、msvc、cuda nvcc 編譯器)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>C/C++&lt;/td>
&lt;td>Cortex-Debug&lt;/td>
&lt;td>marus25&lt;/td>
&lt;td>支援 Cortex-A/R/M 微控制器的偵錯&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>Python Extension Pack&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 Python 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>jupyter&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援 Jupyter Notebook 開發&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Makrdown All in One&lt;/td>
&lt;td>Yu Zhang&lt;/td>
&lt;td>支援 Markdown 撰寫&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Hex Editor&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>編輯二進位檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>vscode-pdf&lt;/td>
&lt;td>tomoki1207&lt;/td>
&lt;td>顯示 PDF 檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Rainbow CSV&lt;/td>
&lt;td>mechatroner&lt;/td>
&lt;td>彩色顯示 CSV 檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Draw.io Integration&lt;/td>
&lt;td>Henning Dieterichs&lt;/td>
&lt;td>在 VSCode 上使用 Draw.io&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Japanese Language Pack for Visual Studio Code&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>日文語言套件&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>實用工具與 UI 擴充&lt;/td>
&lt;td>Live Share&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>支援即時共同作業&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>如何取消 git reset</title><link>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%8F%96%E6%B6%88-git-reset/</link><pubDate>Wed, 15 May 2024 23:32:43 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%8F%96%E6%B6%88-git-reset/</guid><description>&lt;img src="http://kenji.blog/p/git-reset%E3%82%92%E5%8F%96%E3%82%8A%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 如何取消 git reset" />&lt;h1 id="如何取消-git-reset">如何取消 git reset
&lt;/h1>&lt;p>如果在進行 git commit 之後，不小心執行了 git reset，這裡介紹如何取消 git reset（如何復原到 git commit 時的狀態）。&lt;/p>
&lt;ol>
&lt;li>使用 &lt;code>git reflog&lt;/code> 確認 reset 前的 commit ID&lt;/li>
&lt;li>使用 &lt;code>git reset --hard HEAD@{數字}&lt;/code> 恢復到 reset 前的狀態&lt;/li>
&lt;/ol>
&lt;p>以上就是如何取消 git reset 的方法。&lt;/p></description></item><item><title>只取得 git 儲存庫的最新版本</title><link>http://kenji.blog/zh-tw/p/%E5%8F%AA%E5%8F%96%E5%BE%97-git-%E5%84%B2%E5%AD%98%E5%BA%AB%E7%9A%84%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC/</link><pubDate>Sat, 27 Apr 2024 02:54:12 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%8F%AA%E5%8F%96%E5%BE%97-git-%E5%84%B2%E5%AD%98%E5%BA%AB%E7%9A%84%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC/</guid><description>&lt;img src="http://kenji.blog/p/git%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AE%E6%9C%80%E6%96%B0%E3%81%A0%E3%81%91%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B/img.png" alt="Featured image of post 只取得 git 儲存庫的最新版本" />&lt;h1 id="只取得-git-儲存庫的最新版本">只取得 git 儲存庫的最新版本
&lt;/h1>&lt;p>您可以使用以下指令只取得儲存庫的最新版本。
這在您想要快速取得儲存庫以節省磁碟空間時非常有用。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">git clone --depth 1 &amp;lt;儲存庫URL&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>如何解決因憑證錯誤導致 GitHub Copilot 無法使用的問題</title><link>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E8%A7%A3%E6%B1%BA%E5%9B%A0%E6%86%91%E8%AD%89%E9%8C%AF%E8%AA%A4%E5%B0%8E%E8%87%B4-github-copilot-%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%E7%9A%84%E5%95%8F%E9%A1%8C/</link><pubDate>Sun, 21 Apr 2024 18:47:26 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E8%A7%A3%E6%B1%BA%E5%9B%A0%E6%86%91%E8%AD%89%E9%8C%AF%E8%AA%A4%E5%B0%8E%E8%87%B4-github-copilot-%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%E7%9A%84%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 如何解決因憑證錯誤導致 GitHub Copilot 無法使用的問題" />&lt;h1 id="當-github-copilot-顯示以下錯誤時的解決方法">當 GitHub Copilot 顯示以下錯誤時的解決方法
&lt;/h1>&lt;p>大約從 2024 年 4 月 19 日起，GitHub Copilot 無法使用。錯誤訊息如下：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[ERROR] [ghostText] [2024-04-21T04:06:46.900Z] Error on ghost text request: (FetchError) unable to verify the first certificate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[ERROR] [certificates] [2024-04-21T04:06:46.901Z] Your current Copilot license doesn&amp;#39;t support proxy connections with custom certificates. Please visit https://gh.io/copilot-network-errors to learn more. Original cause: {&amp;#34;type&amp;#34;:&amp;#34;system&amp;#34;,&amp;#34;_name&amp;#34;:&amp;#34;FetchError&amp;#34;,&amp;#34;code&amp;#34;:&amp;#34;UNABLE_TO_VERIFY_LEAF_SIGNATURE&amp;#34;}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="解決方法">解決方法
&lt;/h2>&lt;p>這似乎是 ESET 的錯誤。在 ESET 的進階設定中，將「啟用 SSL/TLS」關閉。
&lt;img src="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1.png"
width="679"
height="468"
srcset="http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1_hu79798d24a79f4dc94eb7f8ca51727896_114738_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%A7github-copilot%E3%81%8C%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%8F%E3%81%AA%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95/img_1_hu79798d24a79f4dc94eb7f8ca51727896_114738_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="145"
data-flex-basis="348px"
>&lt;/p>
&lt;h2 id="參考">參考
&lt;/h2>&lt;p>似乎 AWS CDK 也發生了相同的錯誤。&lt;/p>
&lt;ul>
&lt;li>&lt;a class="link" href="https://repost.aws/questions/QU2H94hF04SIuEVejK_a1mtQ/aws-cdk-bootstrap-certificate-warning-error" target="_blank" rel="noopener"
>AWS CDK bootstrap certificate warning-error&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>vim入門</title><link>http://kenji.blog/zh-tw/p/vim%E5%85%A5%E9%96%80/</link><pubDate>Fri, 19 Apr 2024 22:06:34 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/vim%E5%85%A5%E9%96%80/</guid><description>&lt;img src="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img.png" alt="Featured image of post vim入門" />&lt;p>&lt;img src="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1.png"
width="1920"
height="1080"
srcset="http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1_hue190cb5546151f3c9f61d693ae541095_45716_480x0_resize_box_3.png 480w, http://kenji.blog/p/vim%E5%85%A5%E9%96%80/img_1_hue190cb5546151f3c9f61d693ae541095_45716_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
>&lt;/p>
&lt;h1 id="vim入門">vim入門
&lt;/h1>&lt;h2 id="下載與安裝">下載與安裝
&lt;/h2>&lt;p>&lt;a class="link" href="https://www.vim.org/download.php" target="_blank" rel="noopener"
>https://www.vim.org/download.php&lt;/a>&lt;/p>
&lt;p>從上述網站，根據您要安裝的作業系統下載並安裝模組。&lt;/p>
&lt;p>對於 Windows，選擇 &lt;code>gvim_X.X.X_x64_signed.exe&lt;/code> 是一個好選擇。&lt;/p>
&lt;h2 id="啟動方法">啟動方法
&lt;/h2>&lt;p>在 Windows 中，必須將包含 &lt;code>vim.exe&lt;/code> 的資料夾註冊到環境變數 Path 中。&lt;/p>
&lt;p>啟動方法：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">vim
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>指定檔案名稱來啟動：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">vim filename.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="結束方法">結束方法
&lt;/h2>&lt;p>要結束時，輸入 &lt;code>:&lt;/code> (冒號)，接著輸入 &lt;code>q&lt;/code>，然後按 Enter。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:q
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>如果檔案已更新，將會顯示 &lt;code>已修改但尚未儲存 (可用 ! 強制執行)&lt;/code>。
您可以放棄變更並強制退出。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:q!
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>若要儲存檔案並退出：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:wq
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>以下指令也具有相同的意義：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">:x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>此外，按住 &lt;code>Shift&lt;/code> 並按兩次 &lt;code>z&lt;/code> 也可以退出。（等同於 :wq）&lt;/p>
&lt;h2 id="模式">模式
&lt;/h2>&lt;p>vim 具有 &lt;code>指令模式&lt;/code> 和 &lt;code>輸入模式&lt;/code>。啟動 vim 時，預設為 &lt;code>指令模式&lt;/code>，按下 &lt;code>i&lt;/code> 鍵將會切換到 &lt;code>輸入模式&lt;/code>。&lt;/p>
&lt;p>在 &lt;code>輸入模式&lt;/code> 中，顧名思義可以進行文字輸入。要從 &lt;code>輸入模式&lt;/code> 切換回 &lt;code>指令模式&lt;/code>，請按 &lt;code>ESC&lt;/code> 鍵。&lt;/p>
&lt;p>這種輸入模式的切換是 vim 的一大特色。&lt;/p>
&lt;h2 id="游標移動與捲動">游標移動與捲動
&lt;/h2>&lt;p>整理在 &lt;code>指令模式&lt;/code> 時的游標移動和捲動方式。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>按鍵&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>h&lt;/code>（或 &lt;code>Ctrl&lt;/code>+&lt;code>H&lt;/code>、&lt;code>BackSpace&lt;/code>、&lt;code>←&lt;/code>）&lt;/td>
&lt;td>向左移動&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>j&lt;/code>（或 &lt;code>Ctrl&lt;/code>+&lt;code>J&lt;/code> / &lt;code>N&lt;/code>、&lt;code>↓&lt;/code>）&lt;/td>
&lt;td>向下移動&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>k&lt;/code>（或 &lt;code>Ctrl&lt;/code>+&lt;code>P&lt;/code>、&lt;code>↑&lt;/code>）&lt;/td>
&lt;td>向上移動&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>l&lt;/code>（或 &lt;code>Space&lt;/code>、&lt;code>→&lt;/code>）&lt;/td>
&lt;td>向右移動&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>+&lt;/code>（或 &lt;code>Enter&lt;/code>）&lt;/td>
&lt;td>移動到下一行的開頭&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-&lt;/code>&lt;/td>
&lt;td>移動到上一行的開頭&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>B&lt;/code>（或 &lt;code>PageUp&lt;/code>）&lt;/td>
&lt;td>向上捲動一頁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>F&lt;/code>（或 &lt;code>PageDown&lt;/code>）&lt;/td>
&lt;td>向下捲動一頁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>U&lt;/code>&lt;/td>
&lt;td>向上捲動半頁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>D&lt;/code>&lt;/td>
&lt;td>向下捲動半頁&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>Y&lt;/code>&lt;/td>
&lt;td>向上捲動一行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>E&lt;/code>&lt;/td>
&lt;td>向下捲動一行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>將游標所在行捲動到畫面頂部&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>.&lt;/code>&lt;/td>
&lt;td>將游標所在行捲動到畫面中央&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>-&lt;/code>&lt;/td>
&lt;td>將游標所在行捲動到畫面底部&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>0&lt;/code>（或 &lt;code>|&lt;/code>）&lt;/td>
&lt;td>將游標移動到行首&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>$&lt;/code>&lt;/td>
&lt;td>將游標移動到行尾&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>^&lt;/code>（或 &lt;code>_&lt;/code>）&lt;/td>
&lt;td>將游標移動到行首（排除空白和 Tab）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>G&lt;/code>（或 &lt;code>:$&lt;/code>）&lt;/td>
&lt;td>將游標移動到最後一行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>:行號&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>移動到指定行&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>在輸入上述移動按鍵之前輸入 &lt;code>數字&lt;/code>，就可以移動該數字指定的次數。
（例如，輸入 &lt;code>3j&lt;/code> 將會從目前游標位置向下移動 3 行。）&lt;/p>
&lt;h2 id="其他指令">其他指令
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>按鍵&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>L&lt;/code>&lt;/td>
&lt;td>重新繪製畫面&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>G&lt;/code>&lt;/td>
&lt;td>顯示檔案總行數、游標位置等&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Microsoft Word 快捷鍵列表</title><link>http://kenji.blog/zh-tw/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</link><pubDate>Sun, 07 Apr 2024 14:18:51 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-word%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img.png" alt="Featured image of post Microsoft Word 快捷鍵列表" />&lt;h2 id="快捷鍵列表">快捷鍵列表
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷鍵&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>B&lt;/code>&lt;/td>
&lt;td>粗體&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>I&lt;/code>&lt;/td>
&lt;td>斜體&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>底線&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>E&lt;/code>&lt;/td>
&lt;td>置中對齊&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;td>靠左對齊&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>R&lt;/code>&lt;/td>
&lt;td>靠右對齊&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>]&lt;/code>&lt;/td>
&lt;td>放大字體&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>[&lt;/code>&lt;/td>
&lt;td>縮小字體&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>複製&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>V&lt;/code>&lt;/td>
&lt;td>貼上&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>剪下&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Z&lt;/code>&lt;/td>
&lt;td>復原&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Y&lt;/code>&lt;/td>
&lt;td>重複上一步操作&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>A&lt;/code>&lt;/td>
&lt;td>全選&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Shift&lt;/code> + &lt;code>方向鍵&lt;/code>&lt;/td>
&lt;td>選擇範圍&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>搜尋文字&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>取代文字&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>P&lt;/code>&lt;/td>
&lt;td>預覽列印&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>&lt;/td>
&lt;td>儲存文件&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>另存新檔&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Home&lt;/code>&lt;/td>
&lt;td>移至文件開頭&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>End&lt;/code>&lt;/td>
&lt;td>移至文件結尾&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="參考">參考
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://support.microsoft.com/zh-tw/office/word-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88-95ef89dd-7142-4b50-afb2-f762f663ceb2" target="_blank" rel="noopener"
>Word 的鍵盤快速鍵&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Visual Studio 快捷鍵列表</title><link>http://kenji.blog/zh-tw/p/visual-studio-%E5%BF%AB%E6%8D%B7%E9%8D%B5%E5%88%97%E8%A1%A8/</link><pubDate>Sat, 06 Apr 2024 11:27:37 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/visual-studio-%E5%BF%AB%E6%8D%B7%E9%8D%B5%E5%88%97%E8%A1%A8/</guid><description>&lt;img src="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img.png" alt="Featured image of post Visual Studio 快捷鍵列表" />&lt;h1 id="visual-studio-快捷鍵列表">Visual Studio 快捷鍵列表
&lt;/h1>&lt;p>這是我個人常用的 Visual Studio 快捷鍵列表。
只要記住 Visual Studio 的鍵盤快捷鍵，就可以有效率地進行開發作業。請務必活用。&lt;/p>
&lt;p>※在 Visual Studio 2022 進行了確認。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷鍵&lt;/th>
&lt;th>說明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>F1&lt;/code>&lt;/td>
&lt;td>顯示所選單字的說明&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F2&lt;/code>&lt;/td>
&lt;td>跳到書籤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F2&lt;/code>&lt;/td>
&lt;td>新增書籤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F2&lt;/code>&lt;/td>
&lt;td>移除所有書籤&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F5&lt;/code>&lt;/td>
&lt;td>建置並執行（偵錯執行）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F5&lt;/code>&lt;/td>
&lt;td>建置並執行（不偵錯）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F7&lt;/code>&lt;/td>
&lt;td>建置&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F9&lt;/code>&lt;/td>
&lt;td>在游標行加入中斷點&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F9&lt;/code>&lt;/td>
&lt;td>停用游標行的中斷點&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Shift&lt;/code> + &lt;code>Ctrl&lt;/code> + &lt;code>F9&lt;/code>&lt;/td>
&lt;td>刪除所有中斷點&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F10&lt;/code>&lt;/td>
&lt;td>逐步執行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F11&lt;/code>&lt;/td>
&lt;td>進入逐步執行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>跳到定義&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>D&lt;/code>&lt;/td>
&lt;td>複製游標行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>未選取範圍時，剪下游標行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>]&lt;/code>&lt;/td>
&lt;td>選取游標處括號對應的括號&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>上下方向鍵&lt;/code>&lt;/td>
&lt;td>上下移動游標行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>方向鍵&lt;/code>&lt;/td>
&lt;td>多重游標/區塊選取&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>切換原始碼/視窗顯示&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>V&lt;/code>&lt;/td>
&lt;td>顯示剪貼簿歷史紀錄&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> 後 &lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>註解游標行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> 後 &lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>取消註解游標行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>指定行號並跳至該行&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>搜尋&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>全域搜尋&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>取代&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>全域取代&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>切換原始碼/視窗顯示&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>&lt;/td>
&lt;td>單字自動補齊&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Alt&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;td>開啟方案總管視窗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>E&lt;/code>&lt;/td>
&lt;td>開啟資源檢視視窗&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>0&lt;/code> 後 &lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>開啟 Git 認可視窗&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="參考">參考
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://learn.microsoft.com/ja-jp/visualstudio/ide/default-keyboard-shortcuts-in-visual-studio?view=vs-2022&amp;amp;utm_source=vshelp&amp;amp;wt.mc_id=visualstudio_inproduct_shortcuts_csaapp" target="_blank" rel="noopener"
>Visual Studio 中的預設鍵盤快捷鍵&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1.png"
width="1094"
height="823"
srcset="http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1_hu4eaca85d6437d1dd6b23efd21afacc82_582969_480x0_resize_box_3.png 480w, http://kenji.blog/p/visual-studio-%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88%E4%B8%80%E8%A6%A7/img_1_hu4eaca85d6437d1dd6b23efd21afacc82_582969_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="319px"
>&lt;/p></description></item><item><title>將 Hidemaru Editor grep 新增至檔案總管的右鍵選單</title><link>http://kenji.blog/zh-tw/p/%E5%B0%87-hidemaru-editor-grep-%E6%96%B0%E5%A2%9E%E8%87%B3%E6%AA%94%E6%A1%88%E7%B8%BD%E7%AE%A1%E7%9A%84%E5%8F%B3%E9%8D%B5%E9%81%B8%E5%96%AE/</link><pubDate>Wed, 03 Apr 2024 00:00:46 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%B0%87-hidemaru-editor-grep-%E6%96%B0%E5%A2%9E%E8%87%B3%E6%AA%94%E6%A1%88%E7%B8%BD%E7%AE%A1%E7%9A%84%E5%8F%B3%E9%8D%B5%E9%81%B8%E5%96%AE/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFgrep%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B/img.png" alt="Featured image of post 將 Hidemaru Editor grep 新增至檔案總管的右鍵選單" />&lt;p>以下將介紹如何在 Windows 10/11 的檔案總管右鍵選單中新增 Hidemaru Editor 的 grep 功能。&lt;/p>
&lt;p>&lt;strong>※以下步驟會修改登錄檔，請自行承擔風險。&lt;/strong>&lt;/p>
&lt;h2 id="步驟">步驟
&lt;/h2>&lt;ol>
&lt;li>開啟下方連結，並儲存至任意資料夾。&lt;/li>
&lt;/ol>
&lt;p>&lt;a class="link" href="%e7%a7%80%e4%b8%b8%e3%83%ac%e3%82%b8%e3%82%b9%e3%83%88%e3%83%aa%e7%99%bb%e9%8c%b2.reg" >秀丸レジストリ登録.reg&lt;/a>&lt;/p>
&lt;ol start="2">
&lt;li>點擊兩下 &lt;code>秀丸レジストリ登録.reg&lt;/code> 檔案以將其新增至登錄檔。&lt;/li>
&lt;/ol>
&lt;h2 id="參考">參考
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://aimek-developer.blogspot.com/2019/02/grep.html" target="_blank" rel="noopener"
>秀丸grepをフォルダの右クリックメニューから行う&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>如何在 Windows 上安裝 micro 文字編輯器</title><link>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%9C%A8-windows-%E4%B8%8A%E5%AE%89%E8%A3%9D-micro-%E6%96%87%E5%AD%97%E7%B7%A8%E8%BC%AF%E5%99%A8/</link><pubDate>Sun, 31 Mar 2024 21:50:39 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E5%9C%A8-windows-%E4%B8%8A%E5%AE%89%E8%A3%9D-micro-%E6%96%87%E5%AD%97%E7%B7%A8%E8%BC%AF%E5%99%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post 如何在 Windows 上安裝 micro 文字編輯器" />&lt;h2 id="下載-micro">下載 micro
&lt;/h2>&lt;p>&lt;a class="link" href="https://github.com/zyedidia/micro/releases" target="_blank" rel="noopener"
>https://github.com/zyedidia/micro/releases&lt;/a>&lt;/p>
&lt;p>開啟上述連結，點擊 &lt;code>Show all XX assets&lt;/code>（X 為數字），然後下載 &lt;code>micro-X.X.XX-win64.zip&lt;/code>（X 為數字）。
解壓縮 zip 檔案，並將所有檔案放置在您選擇的資料夾中。&lt;/p>
&lt;h2 id="設定環境變數">設定環境變數
&lt;/h2>&lt;p>為了從命令提示字元使用 &lt;code>micro.exe&lt;/code>，您需要設定環境變數。&lt;/p>
&lt;ol>
&lt;li>按下 &lt;code>Win 鍵&lt;/code> + &lt;code>R 鍵&lt;/code>，輸入 &lt;code>sysdm.cpl&lt;/code> 並按下 &lt;code>Enter 鍵&lt;/code>。&lt;/li>
&lt;li>點擊 &lt;code>系統內容&lt;/code> 中的 &lt;code>進階系統設定&lt;/code>。&lt;/li>
&lt;li>點擊 &lt;code>環境變數&lt;/code>。&lt;/li>
&lt;li>在 &lt;code>系統變數&lt;/code> 中選擇 &lt;code>Path&lt;/code>，然後點擊 &lt;code>編輯&lt;/code>。&lt;/li>
&lt;li>點擊 &lt;code>新增&lt;/code>，並加入包含 &lt;code>micro.exe&lt;/code> 的資料夾路徑。&lt;/li>
&lt;li>點擊 &lt;code>確定&lt;/code> 以關閉所有對話方塊。&lt;/li>
&lt;li>重新啟動命令提示字元，輸入 &lt;code>nano&lt;/code> 以確認是否可以執行。&lt;/li>
&lt;/ol>
&lt;h2 id="micro-的使用方法">micro 的使用方法
&lt;/h2>&lt;p>在命令提示字元中輸入 &lt;code>micro&lt;/code> 並執行後，將顯示以下畫面。
&lt;img src="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3.png"
width="962"
height="512"
srcset="http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hucac22a4d580735ddd83b1fd5173c3197_6852_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFmicro%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_3_hucac22a4d580735ddd83b1fd5173c3197_6852_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_3.png"
class="gallery-image"
data-flex-grow="187"
data-flex-basis="450px"
>&lt;/p>
&lt;p>主要的操作方法與快捷鍵如下：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>快捷鍵&lt;/th>
&lt;th>操作&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Ctrl+Q&lt;/td>
&lt;td>關閉檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+S&lt;/td>
&lt;td>儲存檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+O&lt;/td>
&lt;td>開啟檔案&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+A&lt;/td>
&lt;td>全選&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+X&lt;/td>
&lt;td>剪下選取範圍&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+C&lt;/td>
&lt;td>複製選取範圍&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+V&lt;/td>
&lt;td>貼上&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Z&lt;/td>
&lt;td>復原&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Y&lt;/td>
&lt;td>重做&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+E&lt;/td>
&lt;td>執行編輯器指令&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="參考">參考
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://micro-editor.github.io/" target="_blank" rel="noopener"
>micro&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>如何在 Windows 上安裝 CLI 文字編輯器 nano</title><link>http://kenji.blog/zh-tw/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 31 Mar 2024 18:09:32 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;img src="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png" alt="Featured image of post 如何在 Windows 上安裝 CLI 文字編輯器 nano" />&lt;h2 id="下載-nanoexe">下載 nano.exe
&lt;/h2>&lt;p>&lt;a class="link" href="https://sourceforge.net/projects/nano-for-windows/" target="_blank" rel="noopener"
>https://sourceforge.net/projects/nano-for-windows/&lt;/a>&lt;/p>
&lt;p>打開上述連結，點擊 &lt;code>Download&lt;/code> 下載 &lt;code>GNU-Nano_Win32(static).zip&lt;/code>。
解壓縮 zip 檔案，並將 &lt;code>nano.exe&lt;/code> 放置在任意資料夾中。
※ 尚未支援日文輸入（截至 2024/03/31）。&lt;/p>
&lt;h2 id="設定環境變數">設定環境變數
&lt;/h2>&lt;p>為了在命令提示字元中使用 &lt;code>nano.exe&lt;/code>，您需要設定環境變數。&lt;/p>
&lt;ol>
&lt;li>按下 &lt;code>Win 鍵&lt;/code> + &lt;code>R 鍵&lt;/code>，輸入 &lt;code>sysdm.cpl&lt;/code>，然後按下 &lt;code>Enter 鍵&lt;/code>。&lt;/li>
&lt;li>在「系統內容」中點擊 &lt;code>系統內容&lt;/code>。&lt;/li>
&lt;li>點擊 &lt;code>環境變數&lt;/code>。&lt;/li>
&lt;li>選擇「系統變數」中的 &lt;code>Path&lt;/code>，然後點擊 &lt;code>編輯&lt;/code>。&lt;/li>
&lt;li>點擊 &lt;code>新增&lt;/code>，然後加入 &lt;code>nano.exe&lt;/code> 的路徑。&lt;/li>
&lt;li>點擊 &lt;code>確定&lt;/code> 以關閉所有對話方塊。&lt;/li>
&lt;li>重新啟動命令提示字元，輸入 &lt;code>nano&lt;/code> 看看是否能成功執行。&lt;/li>
&lt;/ol>
&lt;h2 id="nano-的使用方法">nano 的使用方法
&lt;/h2>&lt;p>輸入 &lt;code>nano&lt;/code> 並執行後，會顯示以下畫面。&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png"
width="1082"
height="632"
srcset="http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hucb9efcdf08d2eda99abffd0a9502a2c3_16316_480x0_resize_box_3.png 480w, http://kenji.blog/p/cli%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BFnano%E3%82%92windows%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/img_2_hucb9efcdf08d2eda99abffd0a9502a2c3_16316_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_2.png"
class="gallery-image"
data-flex-grow="171"
data-flex-basis="410px"
>&lt;/p>
&lt;p>畫面下方會顯示快捷鍵的說明。&lt;/p>
&lt;p>符號的意義如下：&lt;/p>
&lt;ul>
&lt;li>&lt;code>^&lt;/code> 代表 &lt;code>Ctrl&lt;/code> 鍵。&lt;/li>
&lt;li>&lt;code>M-&lt;/code> 代表 &lt;code>Alt&lt;/code> 鍵。&lt;/li>
&lt;/ul>
&lt;p>若要儲存並關閉，請先按下 &lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>，接著按下 &lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>。&lt;/p>
&lt;h2 id="參考">參考
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://www.nano-editor.org/" target="_blank" rel="noopener"
>GNU nano&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>如何使用「hide」指令啟動 Hidemaru 編輯器</title><link>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-hide-%E6%8C%87%E4%BB%A4%E5%95%9F%E5%8B%95-hidemaru-%E7%B7%A8%E8%BC%AF%E5%99%A8/</link><pubDate>Fri, 29 Mar 2024 23:45:37 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-hide-%E6%8C%87%E4%BB%A4%E5%95%9F%E5%8B%95-hidemaru-%E7%B7%A8%E8%BC%AF%E5%99%A8/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_2.png" alt="Featured image of post 如何使用「hide」指令啟動 Hidemaru 編輯器" />&lt;h2 id="以下介紹如何使用hide指令啟動-hidemaru-編輯器">以下介紹如何使用「hide」指令啟動 Hidemaru 編輯器。
&lt;/h2>&lt;p>注意：此方法已在 &lt;code>Windows 10/11&lt;/code> 上測試過。&lt;/p>
&lt;ol>
&lt;li>打開「登錄編輯程式」。&lt;/li>
&lt;li>導覽至 &lt;code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths&lt;/code>。&lt;/li>
&lt;li>在 &lt;code>App Paths&lt;/code> 下建立一個名為 &lt;code>hide.exe&lt;/code> 的機碼。 &lt;strong>在此機碼名稱中， &lt;code>.exe&lt;/code> 前面的部分即為指令名稱。&lt;/strong>&lt;/li>
&lt;li>將 &lt;code>hide.exe&lt;/code> 機碼的 &lt;code>(預設值)&lt;/code> 設為 Hidemaru 編輯器執行檔的路徑。在我的環境中是 &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru\Hidemaru.exe&amp;quot;&lt;/code>。&lt;/li>
&lt;li>在 &lt;code>hide.exe&lt;/code> 機碼中建立一個名為 &lt;code>Path&lt;/code> 的字串值。&lt;/li>
&lt;li>將 &lt;code>Path&lt;/code> 的資料設為包含 Hidemaru 編輯器執行檔的資料夾路徑。在我的環境中是 &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru&amp;quot;&lt;/code>。&lt;/li>
&lt;li>現在，在按下 &lt;code>Win&lt;/code> 鍵 + &lt;code>R&lt;/code> 鍵開啟的 &lt;strong>執行&lt;/strong> 對話方塊中，您可以使用 &lt;code>hide&lt;/code> 指令啟動 Hidemaru 編輯器。此外，在命令提示字元中，您可以使用 &lt;code>start hide&lt;/code> 指令啟動它。&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Windows Registry Editor Version 5.00
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\hide.exe]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">@=&amp;#34;\&amp;#34;C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;Path&amp;#34;=&amp;#34;\&amp;#34;C:\\Program Files (x86)\\Hidemaru\\\&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>如果您將上述內容儲存為 &lt;code>.reg&lt;/code> 檔案並執行它，這些設定將被新增至登錄檔中。&lt;/p>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1.png"
width="399"
height="206"
srcset="http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue374203b955e2a50cac4186ada52cd43_10600_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89hide%E3%81%A7%E7%A7%80%E4%B8%B8%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%82%92%E7%AB%8B%E3%81%A1%E4%B8%8A%E3%81%92%E3%82%8B%E6%96%B9%E6%B3%95/img_1_hue374203b955e2a50cac4186ada52cd43_10600_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="img_1.png"
class="gallery-image"
data-flex-grow="193"
data-flex-basis="464px"
>&lt;/p></description></item><item><title>在命令提示字元中安裝 PowerToys</title><link>http://kenji.blog/zh-tw/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</link><pubDate>Sat, 30 Sep 2023 21:23:00 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/</guid><description>&lt;img src="http://kenji.blog/p/powertoys%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/img.png" alt="Featured image of post 在命令提示字元中安裝 PowerToys" />&lt;h1 id="在命令提示字元中安裝-powertoys">在命令提示字元中安裝 PowerToys
&lt;/h1>&lt;p>這是在命令提示字元中安裝 PowerToys 的方法。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">winget install Microsoft.PowerToys --source winget
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h1 id="在命令提示字元中解除安裝-powertoys">在命令提示字元中解除安裝 PowerToys
&lt;/h1>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">winget uninstall --name PowerToys
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>關於獲得 Microsoft MVP 獎項 (2023-2024)</title><link>http://kenji.blog/zh-tw/p/%E9%97%9C%E6%96%BC%E7%8D%B2%E5%BE%97-microsoft-mvp-%E7%8D%8E%E9%A0%85-2023-2024/</link><pubDate>Mon, 31 Jul 2023 19:15:14 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E9%97%9C%E6%96%BC%E7%8D%B2%E5%BE%97-microsoft-mvp-%E7%8D%8E%E9%A0%85-2023-2024/</guid><description>&lt;img src="http://kenji.blog/p/microsoft-mvp%E5%8F%97%E8%B3%9E%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A62023-2024/img.png" alt="Featured image of post 關於獲得 Microsoft MVP 獎項 (2023-2024)" />&lt;h1 id="關於獲得-microsoft-mvp-獎項-2023-2024">關於獲得 Microsoft MVP 獎項 (2023-2024)
&lt;/h1>&lt;p>很高興與大家分享，我榮獲了 Microsoft MVP (2023-2024) 獎項。
這是自 2017 年以來連續第 7 年獲得此殊榮。&lt;/p>
&lt;p>獲獎的類別是 &lt;strong>Developer Technologies&lt;/strong> 。&lt;/p>
&lt;p>回顧過去的活動，我主要參與了以下事項：&lt;/p>
&lt;ul>
&lt;li>在 &lt;a class="link" href="https://github.com/kenjinote" target="_blank" rel="noopener"
>GitHub&lt;/a> 上公開程式碼&lt;/li>
&lt;li>在部落格及 &lt;a class="link" href="https://twitter.com/kenjinote" target="_blank" rel="noopener"
>社群媒體 (如 Twitter 等)&lt;/a> 上分享技術資訊&lt;/li>
&lt;li>在 &lt;a class="link" href="https://social.msdn.microsoft.com/Forums/ja-JP/home" target="_blank" rel="noopener"
>MSDN 論壇&lt;/a> 上發文解答&lt;/li>
&lt;li>提供對微軟產品的反饋&lt;/li>
&lt;/ul>
&lt;p>未來，我希望能繼續撰寫更好的文章，並持續分享有用的資訊。&lt;/p>
&lt;p>感謝大家一直以來的支持。&lt;/p></description></item><item><title>招募 GitHub 贊助者</title><link>http://kenji.blog/zh-tw/p/%E6%8B%9B%E5%8B%9F-github-%E8%B4%8A%E5%8A%A9%E8%80%85/</link><pubDate>Tue, 17 Jan 2023 18:13:56 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/%E6%8B%9B%E5%8B%9F-github-%E8%B4%8A%E5%8A%A9%E8%80%85/</guid><description>&lt;img src="http://kenji.blog/p/github%E3%82%B9%E3%83%9D%E3%83%B3%E3%82%B5%E3%83%BC%E5%8B%9F%E9%9B%86/img.png" alt="Featured image of post 招募 GitHub 贊助者" />&lt;h1 id="招募-github-贊助者">招募 GitHub 贊助者
&lt;/h1>&lt;p>如果您能透過下方的按鈕成為 GitHub 贊助者，我會非常高興。&lt;/p>
&lt;iframe src="https://github.com/sponsors/kenjinote/button" title="Sponsor kenjinote" height="35" width="116" style="border: 0;">&lt;/iframe>
&lt;p>這將用於工具開發等方面。&lt;/p>
&lt;p>我會努力直到能夠加上程式碼簽章憑證！&lt;/p></description></item><item><title>使用 WinGet 透過命令列安裝應用程式</title><link>http://kenji.blog/zh-tw/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</link><pubDate>Wed, 05 Oct 2022 12:15:20 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/</guid><description>&lt;img src="http://kenji.blog/p/winget-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B/img.png" alt="Featured image of post 使用 WinGet 透過命令列安裝應用程式" />&lt;h2 id="先決條件">先決條件
&lt;/h2>&lt;p>必須為 Windows 11&lt;/p>
&lt;h2 id="步驟">步驟
&lt;/h2>&lt;ol>
&lt;li>從 Microsoft Store 安裝 &lt;code>應用程式安裝程式&lt;/code>
&lt;a class="link" href="https://www.microsoft.com/store/productId/9NBLGGH4NNS1" target="_blank" rel="noopener"
>https://www.microsoft.com/store/productId/9NBLGGH4NNS1&lt;/a>&lt;/li>
&lt;li>在命令提示字元中安裝應用程式
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">winget&lt;/span> &lt;span class="n">install&lt;/span> &lt;span class="n">Google&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">Chrome&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="可安裝的主要應用程式">可安裝的主要應用程式
&lt;/h2>&lt;ul>
&lt;li>Google Chrome (命令 &lt;code>winget install Google.Chrome&lt;/code>)&lt;/li>
&lt;li>Microsoft Edge (命令 &lt;code>winget install Microsoft.Edge&lt;/code>)&lt;/li>
&lt;li>Microsoft Teams (命令 &lt;code>winget install Microsoft.Teams&lt;/code>)&lt;/li>
&lt;li>Microsoft Office (命令 &lt;code>winget install Microsoft.Office&lt;/code>)&lt;/li>
&lt;li>Visual Studio Code (命令 &lt;code>winget install vscode&lt;/code>)&lt;/li>
&lt;li>Slack (命令 &lt;code>winget install SlackTechnologies.Slack&lt;/code>)&lt;/li>
&lt;li>Discord (命令 &lt;code>winget install Discord.Discord&lt;/code>)&lt;/li>
&lt;li>Docker Desktop (命令 &lt;code>winget install Docker.DockerDesktop&lt;/code>)&lt;/li>
&lt;li>Git (命令 &lt;code>winget install Git&lt;/code>)&lt;/li>
&lt;li>7zip (命令 &lt;code>winget install 7zip&lt;/code>)&lt;/li>
&lt;li>VLC (命令 &lt;code>winget install VideoLAN.VLC&lt;/code>)&lt;/li>
&lt;/ul>
&lt;h2 id="參考資料">參考資料
&lt;/h2>&lt;p>&lt;a class="link" href="https://learn.microsoft.com/zh-tw/windows/package-manager/winget/" target="_blank" rel="noopener"
>使用 winget 工具安裝和管理應用程式&lt;/a>&lt;/p>
&lt;h3 id="題外話">題外話
&lt;/h3>&lt;p>我以為也可以安裝 Paint.Net，但無法安裝。&lt;/p>
&lt;p>&lt;a class="link" href="https://forums.getpaint.net/topic/118574-please-add-paintnet-to-the-available-packages-for-windows-package-manager-winget/" target="_blank" rel="noopener"
>https://forums.getpaint.net/topic/118574-please-add-paintnet-to-the-available-packages-for-windows-package-manager-winget/&lt;/a>&lt;/p></description></item><item><title>在 git 中刪除標籤</title><link>http://kenji.blog/zh-tw/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/</link><pubDate>Sun, 02 Oct 2022 02:18:04 +0900</pubDate><guid>http://kenji.blog/zh-tw/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/</guid><description>&lt;img src="http://kenji.blog/p/git%E3%81%A7%E3%82%BF%E3%82%B0%E3%82%92%E6%B6%88%E3%81%99/img.png" alt="Featured image of post 在 git 中刪除標籤" />&lt;h1 id="刪除本地標籤">刪除本地標籤
&lt;/h1>&lt;ol>
&lt;li>使用 &lt;code>git tag&lt;/code> 確認本地存在的標籤。&lt;/li>
&lt;li>使用 &lt;code>git tag -d v0.1.0&lt;/code> 刪除標籤。（在 &lt;code>v0.1.0&lt;/code> 的部分指定您要刪除的標籤）&lt;/li>
&lt;/ol>
&lt;h1 id="刪除遠端標籤">刪除遠端標籤
&lt;/h1>&lt;ol>
&lt;li>使用 &lt;code>git ls-remote --tags&lt;/code> 確認遠端存在的標籤。&lt;/li>
&lt;li>使用 &lt;code>git push origin --delete v0.1.0&lt;/code> 刪除遠端存在的標籤。（在 &lt;code>v0.1.0&lt;/code> 的部分指定您要刪除的標籤）&lt;/li>
&lt;/ol>
&lt;h2 id="參考">參考
&lt;/h2>&lt;p>&lt;a class="link" href="https://qumeru.com/magazine/528" target="_blank" rel="noopener"
>gitでtagをリモートとローカルで削除する方法！&lt;/a>&lt;/p></description></item></channel></rss>