<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ferramentas E Ambiente De Desenvolvimento on kenji.blog</title><link>http://kenji.blog/pt/categories/ferramentas-e-ambiente-de-desenvolvimento/</link><description>Recent content in Ferramentas E Ambiente De Desenvolvimento on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>pt</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 19 Jul 2025 10:03:51 +0900</lastBuildDate><atom:link href="http://kenji.blog/pt/categories/ferramentas-e-ambiente-de-desenvolvimento/index.xml" rel="self" type="application/rss+xml"/><item><title>Como chamar Microsoft.Windows.AI a partir de C++</title><link>http://kenji.blog/pt/p/como-chamar-microsoft-windows-ai-a-partir-de-cpp/</link><pubDate>Sat, 19 Jul 2025 10:03:51 +0900</pubDate><guid>http://kenji.blog/pt/p/como-chamar-microsoft-windows-ai-a-partir-de-cpp/</guid><description>&lt;img src="http://kenji.blog/p/c-%E3%81%8B%E3%82%89microsoft.windows.ai%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95/img.png" alt="Featured image of post Como chamar Microsoft.Windows.AI a partir de C++" />&lt;h1 id="-como-chamar-microsoftwindowsai-a-partir-de-c-com-código-de-exemplo">🎯 Como chamar &lt;code>Microsoft.Windows.AI&lt;/code> a partir de C++ [Com código de exemplo]
&lt;/h1>&lt;p>A partir do Windows 10, o Windows inclui nativamente um ** runtime capaz de executar modelos de IA no formato ONNX **. Esse é o ** Windows ML (Windows.AI.MachineLearning) **.&lt;/p>
&lt;p>Neste artigo, explicarei de forma prática como chamar &lt;code>Microsoft.Windows.AI.MachineLearning&lt;/code> a partir de ** C++ (baseado em aplicativo Win32) **, com ** código de exemplo **.&lt;/p>
&lt;hr>
&lt;h2 id="-preparação">✅ Preparação
&lt;/h2>&lt;h3 id="-requisitos-do-ambiente">◾ Requisitos do Ambiente
&lt;/h3>&lt;ul>
&lt;li>Windows 10 (1809+) ou Windows 11&lt;/li>
&lt;li>Visual Studio 2019 ou posterior (A versão Community é suficiente)&lt;/li>
&lt;li>Suporte a C++/WinRT (&lt;code>Microsoft.Windows.CppWinRT&lt;/code>)&lt;/li>
&lt;li>Windows SDK 10.0.17763.0 ou superior&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-configuração-do-projeto">✅ Configuração do Projeto
&lt;/h2>&lt;p>Crie um projeto no Visual Studio com a seguinte configuração:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Tipo: Aplicativo de Área de Trabalho do Windows em C++ (Projeto Vazio)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Subsistema: Windows (&lt;code>WinMain&lt;/code>)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Adicione o seguinte pacote via NuGet:&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">Microsoft.Windows.CppWinRT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-código-de-exemplo">✅ Código de Exemplo
&lt;/h2>&lt;p>Abaixo está um exemplo de configuração mínima que usa &lt;code>WinMain&lt;/code> para combinar a API Win32 e &lt;code>Windows.AI.MachineLearning&lt;/code>.&lt;/p>
&lt;blockquote>
&lt;p>※ O modelo ONNX utilizado será chamado &lt;code>model.onnx&lt;/code> e deve ser colocado na mesma pasta que o arquivo executável.&lt;/p>
&lt;/blockquote>
&lt;h3 id="maincpp">&lt;code>main.cpp&lt;/code>
&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;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;/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;winrt/Windows.AI.MachineLearning.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;winrt/Windows.Storage.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">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#pragma comment(lib, &amp;#34;windowsapp&amp;#34;) &lt;/span>&lt;span class="c1">// Para linkagem WinRT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">winrt&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">Windows&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">AI&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">MachineLearning&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">Windows&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">Storage&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="kt">int&lt;/span> &lt;span class="n">WINAPI&lt;/span> &lt;span class="nf">WinMain&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">HINSTANCE&lt;/span> &lt;span class="n">hInstance&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">HINSTANCE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">LPSTR&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">nCmdShow&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="c1">// Inicialização WinRT (MTA ou STA são válidos)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">winrt&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">init_apartment&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">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Carregar o arquivo do modelo
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">modelFile&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">StorageFile&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">GetFileFromPathAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;model.onnx&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LearningModel&lt;/span> &lt;span class="n">model&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">LearningModel&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">LoadFromStorageFileAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">modelFile&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&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="c1">// Criar uma sessão
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">LearningModelSession&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">model&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">LearningModelBinding&lt;/span> &lt;span class="n">binding&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">session&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="c1">// Entrada e saída do modelo (aqui temporariamente entrada vazia)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// Na prática, é necessário fazer bind com TensorFloat, etc.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Executar inferência
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">auto&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">session&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">EvaluateAsync&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">binding&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;&amp;#34;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="n">get&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">MessageBox&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">nullptr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Inferência concluída&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;Windows ML (C++)&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">MB_OK&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="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">winrt&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">hresult_error&lt;/span> &lt;span class="k">const&lt;/span>&lt;span class="o">&amp;amp;&lt;/span> &lt;span class="n">ex&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">MessageBox&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="k">nullptr&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">message&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="sa">L&lt;/span>&lt;span class="s">&amp;#34;Erro&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">MB_ICONERROR&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="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;hr>
&lt;h2 id="-complemento-como-especificar-tensors-de-entradasaída">✅ Complemento: Como especificar Tensors de Entrada/Saída
&lt;/h2>&lt;p>Dependendo do modelo, ** a criação e o bind de Tensors ** são necessários antes da inferência.&lt;/p>
&lt;p>Exemplo:&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;/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="c1">// Converter um array float unidimensional para Tensor
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">std&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">float&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">inputData&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mf">0.5f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.3f&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">0.2f&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">vector&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">int64_t&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">shape&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">};&lt;/span> &lt;span class="c1">// Formato: [1, 3]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">auto&lt;/span> &lt;span class="n">tensor&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">TensorFloat&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">CreateFromArray&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">shape&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">inputData&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="c1">// Bind de entrada (deve corresponder ao nome de entrada do modelo)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="n">binding&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">Bind&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">L&lt;/span>&lt;span class="s">&amp;#34;input_0&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">tensor&lt;/span>&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>A saída pode ser obtida de forma semelhante com &lt;code>result.Outputs().Lookup(L&amp;quot;output_0&amp;quot;)&lt;/code>.&lt;/p>
&lt;hr>
&lt;h2 id="-pontos-de-atenção-na-depuração">✅ Pontos de Atenção na Depuração
&lt;/h2>&lt;ul>
&lt;li>Se o arquivo do modelo não existir na pasta de execução, ocorrerá uma &lt;code>FileNotFoundException&lt;/code>.&lt;/li>
&lt;li>Se os nomes de entrada/saída não corresponderem, resultará em um erro &lt;code>invalid_argument&lt;/code>.&lt;/li>
&lt;li>As especificações exatas de E/S do modelo podem ser verificadas com ferramentas como o &lt;a class="link" href="https://netron.app" target="_blank" rel="noopener"
>Netron&lt;/a>.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-resumo">✅ Resumo
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Item&lt;/th>
&lt;th>Descrição&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>API Usada&lt;/td>
&lt;td>Windows.AI.MachineLearning (WinRT)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Linguagem&lt;/td>
&lt;td>C++ (baseado em Win32)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Método Recomendado&lt;/td>
&lt;td>Através de cabeçalhos C++/WinRT&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Vantagens&lt;/td>
&lt;td>Modelos ONNX rodam nativamente, suporte a GPU disponível&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Atenção&lt;/td>
&lt;td>Cuidado com os nomes de entrada do modelo e formato do Tensor&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="-alternativa-para-quem-não-quer-usar-winrt">✅ Alternativa: Para quem não quer usar WinRT
&lt;/h2>&lt;ul>
&lt;li>Usando o &lt;code>ONNX Runtime&lt;/code> da Microsoft, ** você pode lidar com modelos ONNX a partir de C++ de forma totalmente sem WinRT **.&lt;/li>
&lt;li>É multiplataforma, permitindo código comum entre Windows e Linux.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="-conclusão">📌 Conclusão
&lt;/h2>&lt;p>O Windows ML (Microsoft.Windows.AI) é um motor de inferência de IA poderoso que pode ser perfeitamente utilizado também a partir de C++. Se você precisa de inferência nativa no Windows, não deixe de experimentar.&lt;/p>
&lt;p>Para aqueles que desejam exemplos concretos de criação de modelos ONNX e binding de Tensor, explicaremos isso em artigos subsequentes!&lt;/p></description></item><item><title>Como postar mensagens no Microsoft Teams a partir de C++ (WinHTTP + Graph API)</title><link>http://kenji.blog/pt/p/como-postar-mensagens-no-microsoft-teams-a-partir-de-cpp-winhttp-graph-api/</link><pubDate>Mon, 14 Jul 2025 23:40:15 +0900</pubDate><guid>http://kenji.blog/pt/p/como-postar-mensagens-no-microsoft-teams-a-partir-de-cpp-winhttp-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 Como postar mensagens no Microsoft Teams a partir de C++ (WinHTTP + Graph API)" />&lt;h1 id="como-postar-mensagens-no-microsoft-teams-a-partir-de-c-winhttp--graph-api">Como postar mensagens no Microsoft Teams a partir de C++ (WinHTTP + Graph API)
&lt;/h1>&lt;p>Quer postar automaticamente no chat do Microsoft Teams?&lt;br>
É aí que a &lt;strong>Microsoft Graph API&lt;/strong> entra em ação.&lt;br>
Neste artigo, apresentarei passo a passo um &lt;strong>exemplo de código em C++ usando WinHTTP&lt;/strong> e as &lt;strong>etapas necessárias de autenticação da API&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="-preparações-necessárias-configuração-de-autenticação-da-microsoft-graph-api">🔧 Preparações necessárias (Configuração de autenticação da Microsoft Graph API)
&lt;/h2>&lt;h3 id="1-registrar-o-aplicativo-no-portal-do-azure">1. Registrar o aplicativo no portal do Azure
&lt;/h3>&lt;p>Primeiro, para usar a Microsoft Graph API, você precisa registrar um aplicativo no Azure.&lt;/p>
&lt;ol>
&lt;li>Acesse o &lt;a class="link" href="https://portal.azure.com" target="_blank" rel="noopener"
>Azure Portal&lt;/a>&lt;/li>
&lt;li>&lt;strong>&amp;ldquo;Microsoft Entra ID&amp;rdquo;&lt;/strong> &amp;gt; &lt;strong>&amp;quot;+ Adicionar&amp;quot;&lt;/strong> &amp;gt; &lt;strong>&amp;ldquo;Registro de aplicativo&amp;rdquo;&lt;/strong> &amp;gt; &lt;strong>&amp;ldquo;Novo registro&amp;rdquo;&lt;/strong>&lt;/li>
&lt;li>Insira qualquer nome para o aplicativo e clique em &amp;ldquo;Registrar&amp;rdquo;&lt;/li>
&lt;/ol>
&lt;h3 id="2-adicionar-permissões-da-api">2. Adicionar permissões da API
&lt;/h3>&lt;ol>
&lt;li>Vá para o menu esquerdo &amp;ldquo;Permissões de API&amp;rdquo;&lt;/li>
&lt;li>Em &lt;strong>&amp;ldquo;Microsoft Graph&amp;rdquo;&lt;/strong> &amp;gt; &lt;strong>&amp;ldquo;Adicionar uma permissão&amp;rdquo;&lt;/strong>, pesquise pelos seguintes escopos e clique em &lt;strong>&amp;ldquo;Atualizar permissões&amp;rdquo;&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>※ Se você deseja postar em um canal, &lt;code>ChannelMessage.Send&lt;/code> também é necessário&lt;/p>
&lt;/blockquote>
&lt;h3 id="3-anote-o-id-do-cliente-e-o-id-do-locatário-tenant">3. Anote o ID do cliente e o ID do locatário (tenant)
&lt;/h3>&lt;p>Mantenha as seguintes 2 informações que aparecem na aba &amp;ldquo;Visão geral&amp;rdquo;:&lt;/p>
&lt;ul>
&lt;li>ID do aplicativo (cliente)&lt;/li>
&lt;li>ID do diretório (locatário)&lt;/li>
&lt;/ul>
&lt;h3 id="4-criar-o-segredo-do-cliente">4. Criar o segredo do cliente
&lt;/h3>&lt;ol>
&lt;li>Vá para a aba &amp;ldquo;Certificados e segredos&amp;rdquo;&lt;/li>
&lt;li>&amp;ldquo;Novo segredo do cliente&amp;rdquo; &amp;gt; Defina uma data de expiração e clique em &amp;ldquo;Adicionar&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Anote imediatamente&lt;/strong> o valor (segredo) exibido na tela&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="-obtendo-o-token-de-acesso-oauth2">🔐 Obtendo o token de acesso (OAuth2)
&lt;/h2>&lt;p>Para obtê-lo, usaremos o fluxo &lt;code>client_credentials&lt;/code>.&lt;br>
Execute o comando abaixo com curl para obter o token de acesso.&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>ID_DO_LOCATARIO&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={ID_DO_CLIENTE}&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={SEGREDO_DO_CLIENTE}&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="exemplo-de-resposta">Exemplo de resposta
&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... (omitido)&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>Usaremos este access_token para chamar a Microsoft Graph API.&lt;/p>
&lt;h2 id="-exemplo-em-c-para-postar-no-chat-do-teams">💬 Exemplo em C++ para postar no chat do Teams
&lt;/h2>&lt;p>Aqui está um exemplo em C++ para postar no chat usando WinHTTP.&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="-como-obter-o-id-do-chat">🔍 Como obter o ID do chat
&lt;/h2>&lt;p>O ID do chat pode ser verificado em 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="exemplo-de-resposta-1">Exemplo de resposta
&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="-pontos-de-atenção">📌 Pontos de atenção
&lt;/h2>&lt;ul>
&lt;li>Este exemplo é uma implementação mínima. Em produção:
&lt;ul>
&lt;li>Tratamento de expiração de token&lt;/li>
&lt;li>Verificação de certificado HTTPS&lt;/li>
&lt;li>Aprimoramento do tratamento de erros&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Para postar em um canal, use teams/{team-id}/channels/{channel-id}/messages.&lt;/li>
&lt;li>Enviar arquivos anexos requer processamento multipart ou a API do Graph Drive.&lt;/li>
&lt;/ul>
&lt;h2 id="resumo">Resumo
&lt;/h2>&lt;h2 id="-resumo">📎 Resumo
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Funcionalidade&lt;/th>
&lt;th>Visão Geral&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Graph API&lt;/td>
&lt;td>API oficial para interagir com o Teams&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Registro do aplicativo&lt;/td>
&lt;td>Procedimentos de autenticação necessários no Azure&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Token de acesso&lt;/td>
&lt;td>Obtido via OAuth2, usado para solicitações&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Implementação em C++&lt;/td>
&lt;td>Chama a Graph API usando WinHTTP&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="-próximos-passos">🚀 Próximos passos
&lt;/h2>&lt;p>Como exemplos mais avançados, também é possível:&lt;/p>
&lt;ul>
&lt;li>Postagem no canal da equipe (&lt;code>/teams/{team-id}/channels/...&lt;/code>)&lt;/li>
&lt;li>Postagem com arquivos anexos&lt;/li>
&lt;li>Alternância entre conta de bot ou conta de usuário&lt;/li>
&lt;li>Implementação completa em C++ incluindo obtenção do token&lt;/li>
&lt;/ul>
&lt;p>Se você tiver alguma dúvida, sinta-se à vontade para comentar!&lt;/p></description></item><item><title>【Para Iniciantes】Guia para Instalar libcurl (com suporte a OpenSSL) no Visual Studio usando vcpkg</title><link>http://kenji.blog/pt/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/pt/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 【Para Iniciantes】Guia para Instalar libcurl (com suporte a OpenSSL) no Visual Studio usando vcpkg" />&lt;h2 id="se-você-for-usar-libcurl-com-suporte-a-openssl-no-visual-studio-a-instalação-do-vcpkg-é-fácil-e-recomendada">Se você for usar libcurl (com suporte a OpenSSL) no Visual Studio, a instalação do vcpkg é fácil e recomendada
&lt;/h2>&lt;p>Quando se quer lidar com comunicação HTTP em C++, libcurl é frequentemente usado. Mas a compilação e o ajuste de dependências são surpreendentemente difíceis, não é mesmo?&lt;/p>
&lt;p>O que é útil em momentos como esse é a ferramenta de gerenciamento de bibliotecas C++ da Microsoft, ** &amp;ldquo;vcpkg&amp;rdquo; ** .
Desta vez, introduziremos as etapas desde a introdução de libcurl (compatível com OpenSSL) usando cpkg até torná-lo fácil de usar no Visual Studio.&lt;/p>
&lt;hr>
&lt;h3 id="instalação-do-vcpkg-apenas-para-quem-ainda-não-instalou">Instalação do vcpkg (apenas para quem ainda não instalou)
&lt;/h3>&lt;p>Primeiro, vamos instalar o cpkg. Execute as etapas a seguir no 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>※Se você ainda não tem o Git instalado, instale-o a partir do &lt;a class="link" href="https://git-scm.com/" target="_blank" rel="noopener"
>Site oficial do Git&lt;/a>.&lt;/p>
&lt;hr>
&lt;h3 id="instalação-de-libcurl-compatível-com-openssl">Instalação de libcurl (compatível com OpenSSL)
&lt;/h3>&lt;p>Em seguida, use vcpkg para instalar o libcurl. Para especificar a versão de 64 bits compatível com OpenSSL, execute o comando a seguir.&lt;/p>
&lt;p>&lt;code>powershell vcpkg install curl[ssl] --triplet x64-windows &lt;/code>&lt;/p>
&lt;p>Ao executar este comando, as dependências necessárias (como OpenSSL) também são configuradas automaticamente.&lt;/p>
&lt;hr>
&lt;h3 id="configuração-de-integração-com-o-visual-studio">Configuração de integração com o Visual Studio
&lt;/h3>&lt;p>Para facilitar o uso de bibliotecas instaladas com vcpkg a partir do seu projeto do Visual Studio, defina as configurações de integração com o comando a seguir.&lt;/p>
&lt;p>&lt;code>powershell vcpkg integrate install &lt;/code>&lt;/p>
&lt;p>Depois de configurado, #include &amp;lt;curl/curl.h&amp;gt; ficará automaticamente disponível nos seus projetos do Visual Studio e você não precisará mais definir caminhos de bibliotecas ou configurações de vinculador manualmente.&lt;/p>
&lt;hr>
&lt;h2 id="conclusão">Conclusão
&lt;/h2>&lt;p>Com isso, a preparação para instalar libcurl (compatível com OpenSSL) no Visual Studio está concluída.&lt;/p>
&lt;ul>
&lt;li>Ao usar vcpkg, você pode gerenciar dependências difíceis de uma só vez&lt;/li>
&lt;li>Instale facilmente libcurl com cpkg install curl[ssl] &amp;ndash;triplet x64-windows&lt;/li>
&lt;li>A integração automática com o Visual Studio é possível com cpkg integrate install&lt;/li>
&lt;/ul>
&lt;p>Agora, basta incluir o cabeçalho no seu projeto e usar a API libcurl para iniciar o desenvolvimento.
Aproveite o útil vcpkg e aumente rapidamente a eficiência do seu desenvolvimento.&lt;/p></description></item><item><title>Fui premiado novamente como Microsoft MVP (2024-2025)</title><link>http://kenji.blog/pt/p/fui-premiado-novamente-como-microsoft-mvp-2024-2025/</link><pubDate>Tue, 03 Sep 2024 21:25:20 +0900</pubDate><guid>http://kenji.blog/pt/p/fui-premiado-novamente-como-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 Fui premiado novamente como Microsoft MVP (2024-2025)" />&lt;h1 id="fui-premiado-novamente-como-microsoft-mvp-2024-2025">Fui premiado novamente como 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>Olá, eu sou o kenji.
É com grande satisfação que anuncio que fui novamente premiado como &lt;strong>Microsoft MVP (Most Valuable Professional)&lt;/strong> este ano. Esta é a minha 8ª vez recebendo o prêmio.&lt;/p>
&lt;p>Aproveitando a oportunidade, gostaria de escrever um pouco sobre o que é o MVP.&lt;/p>
&lt;hr>
&lt;h2 id="o-que-é-o-microsoft-mvp">O que é o Microsoft MVP?
&lt;/h2>&lt;p>Mesmo sendo chamado de MVP, não estamos falando do melhor jogador nos esportes (embora às vezes me perguntem isso&amp;hellip;).
O &lt;strong>Microsoft MVP (Most Valuable Professional)&lt;/strong> é um título concedido àqueles que ativamente compartilham seus conhecimentos e experiências sobre as tecnologias da Microsoft com a comunidade.&lt;/p>
&lt;p>Escrever blogs técnicos, responder perguntas em sites de Q&amp;amp;A, publicar códigos de exemplo ou fazer apresentações em eventos.
&amp;ldquo;Compartilhar o que você sabe de uma forma que seja útil para os outros&amp;rdquo; ―― atividades constantes como essa são avaliadas.&lt;/p>
&lt;p>Existem premiados em todo o mundo, mas o número é limitado a cada ano, e ser premiado novamente não é fácil.
Dadas essas circunstâncias, sou muito grato por ter sido reconhecido novamente.&lt;/p>
&lt;hr>
&lt;h2 id="motivo-do-prêmio">Motivo do Prêmio
&lt;/h2>&lt;p>Este prêmio é uma renovação na categoria &amp;ldquo;Developer Technologies&amp;rdquo;.
No último ano, estive envolvido em atividades como:&lt;/p>
&lt;ul>
&lt;li>Escrever artigos no blog sobre tecnologias relacionadas à Microsoft&lt;/li>
&lt;li>Responder perguntas em sites técnicos de Q&amp;amp;A&lt;/li>
&lt;li>Publicar códigos de exemplo no GitHub&lt;/li>
&lt;li>Palestrar em grupos de estudo e eventos de tecnologia&lt;/li>
&lt;/ul>
&lt;p>Nenhuma delas é uma atividade extraordinária, mas sempre tentei compartilhar &amp;ldquo;o que eu tentei e funcionou&amp;rdquo; e &amp;ldquo;onde eu tropecei, mas consegui resolver&amp;rdquo; de uma forma que seja ao menos um pouco útil.&lt;/p>
&lt;p>Estou honestamente feliz que isso tenha tomado forma dessa maneira.&lt;/p>
&lt;hr>
&lt;h2 id="olhando-para-o-futuro">Olhando para o Futuro
&lt;/h2>&lt;p>O mundo da tecnologia avança tão rápido que só de tentar acompanhar já é difícil.
Mas, por causa disso, acredito que compartilhar &amp;ldquo;informações reais&amp;rdquo; — como foi usar na prática e o que foi difícil de entender — tem um grande significado.&lt;/p>
&lt;p>Pretendo continuar no meu próprio ritmo, sem me esforçar demais.
Ficarei feliz se puder continuar fornecendo informações que façam alguém pensar, &amp;ldquo;Ah, isso ajudou&amp;rdquo;.&lt;/p>
&lt;p>Muito obrigado pelo seu apoio contínuo.&lt;/p></description></item><item><title>Extensões Recomendadas para Visual Studio Code</title><link>http://kenji.blog/pt/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/pt/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 Extensões Recomendadas para Visual Studio Code" />&lt;h1 id="lista-de-extensões-recomendadas-para-visual-studio-code">Lista de Extensões Recomendadas para Visual Studio Code
&lt;/h1>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Categoria&lt;/th>
&lt;th>Nome&lt;/th>
&lt;th>Fornecedor&lt;/th>
&lt;th>Descrição&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Gestão de Máquinas Virtuais e Contentores&lt;/td>
&lt;td>Remote Devlopment&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta desenvolvimento remoto ao conectar a contentores virtuais/WSL via SSH&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gestão de Máquinas Virtuais e Contentores&lt;/td>
&lt;td>Docker&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta a gestão de contentores Docker&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gestão de Código&lt;/td>
&lt;td>GitHub Pull Requests&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>Gere os Pull Requests do GitHub no VSCode&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gestão de Código&lt;/td>
&lt;td>GitHub Copilot&lt;/td>
&lt;td>GitHub&lt;/td>
&lt;td>Suporta a conclusão de código por IA&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gestão de Código&lt;/td>
&lt;td>Git Graph&lt;/td>
&lt;td>mhutchie&lt;/td>
&lt;td>Exibe graficamente os ramos e commits do Git&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Gestão de Código&lt;/td>
&lt;td>Git History&lt;/td>
&lt;td>Don Jayamanne&lt;/td>
&lt;td>Exibe o histórico do Git&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Navegador e Desenvolvimento Web&lt;/td>
&lt;td>Debugger for Firefox&lt;/td>
&lt;td>Firefox DevTools&lt;/td>
&lt;td>Utiliza o depurador do Firefox no VSCode&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Navegador e Desenvolvimento Web&lt;/td>
&lt;td>Microsoft Edge Tool For VScode&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Utiliza as ferramentas de desenvolvedor do Edge no VSCode&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Navegador e Desenvolvimento Web&lt;/td>
&lt;td>Vue Language Features(Volar)&lt;/td>
&lt;td>Vue&lt;/td>
&lt;td>Suporta as funcionalidades de linguagem do Vue&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Navegador e Desenvolvimento Web&lt;/td>
&lt;td>JavaScript (ES6) code snippets&lt;/td>
&lt;td>charalampos karypidis&lt;/td>
&lt;td>Fornece snippets de JavaScript&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Navegador e Desenvolvimento Web&lt;/td>
&lt;td>Tailwind CSS IntelliSense&lt;/td>
&lt;td>Tailwind Labs&lt;/td>
&lt;td>Fornece snippets de Tailwind CSS&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Desenvolvimento na Cloud&lt;/td>
&lt;td>AWS Toolkit&lt;/td>
&lt;td>Amazon Web Services&lt;/td>
&lt;td>Suporta o desenvolvimento na AWS&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Desenvolvimento na Cloud&lt;/td>
&lt;td>Azure Tools&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta o desenvolvimento no Azure&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Desenvolvimento na Cloud&lt;/td>
&lt;td>Google Cloud Tools&lt;/td>
&lt;td>Google Cloud&lt;/td>
&lt;td>Suporta o desenvolvimento no Google Cloud&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Base de Dados&lt;/td>
&lt;td>MySQL&lt;/td>
&lt;td>Jun Han&lt;/td>
&lt;td>Suporta o desenvolvimento em MySQL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Base de Dados&lt;/td>
&lt;td>SQL Server(mssql)&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta o desenvolvimento em SQL Server&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Base de Dados&lt;/td>
&lt;td>PostgreSQL&lt;/td>
&lt;td>Chris Kolkman&lt;/td>
&lt;td>Suporta o desenvolvimento em PostgreSQL&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sistemas Embutidos&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>PlatformIO&lt;/td>
&lt;td>Suporta o desenvolvimento no PlatformIO&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sistemas Embutidos&lt;/td>
&lt;td>Arduino&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta o desenvolvimento em Arduino&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Sistemas Embutidos&lt;/td>
&lt;td>WorkBench&lt;/td>
&lt;td>Particle&lt;/td>
&lt;td>Suporta desenvolvimento para IoT, incluindo o ambiente de desenvolvimento fornecido pela Particle, firmware, bibliotecas e integração cloud&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>Suporta o desenvolvimento em 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>Executa código C/C++ (suporta compiladores gcc, msvc e 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>Suporta a depuração de microcontroladores 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>Suporta o desenvolvimento em Python&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>jupyter&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta o desenvolvimento em Jupyter Notebook&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Makrdown All in One&lt;/td>
&lt;td>Yu Zhang&lt;/td>
&lt;td>Suporta a escrita em Markdown&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Hex Editor&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Edita ficheiros binários&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>vscode-pdf&lt;/td>
&lt;td>tomoki1207&lt;/td>
&lt;td>Exibe ficheiros PDF&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Rainbow CSV&lt;/td>
&lt;td>mechatroner&lt;/td>
&lt;td>Exibe ficheiros CSV de forma colorida&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Draw.io Integration&lt;/td>
&lt;td>Henning Dieterichs&lt;/td>
&lt;td>Utiliza o Draw.io no VSCode&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Japanese Language Pack for Visual Studio Code&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Pacote de idioma Japonês&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Utilitários e Extensões de UI&lt;/td>
&lt;td>Live Share&lt;/td>
&lt;td>Microsoft&lt;/td>
&lt;td>Suporta colaboração em tempo real&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Como desfazer um git reset</title><link>http://kenji.blog/pt/p/como-desfazer-git-reset/</link><pubDate>Wed, 15 May 2024 23:32:43 +0900</pubDate><guid>http://kenji.blog/pt/p/como-desfazer-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 Como desfazer um git reset" />&lt;h1 id="como-desfazer-um-git-reset">Como desfazer um git reset
&lt;/h1>&lt;p>Após realizar um git commit, se você executar acidentalmente um git reset, veja como desfazer o git reset (como restaurar o estado do git commit).&lt;/p>
&lt;ol>
&lt;li>Verifique o ID do commit antes do reset com &lt;code>git reflog&lt;/code>&lt;/li>
&lt;li>Volte para o estado antes do reset com &lt;code>git reset --hard HEAD@{número}&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>Isso é tudo sobre como desfazer um git reset.&lt;/p></description></item><item><title>Obter apenas a versão mais recente do repositório git</title><link>http://kenji.blog/pt/p/obter-apenas-a-versao-mais-recente-do-repositorio-git/</link><pubDate>Sat, 27 Apr 2024 02:54:12 +0900</pubDate><guid>http://kenji.blog/pt/p/obter-apenas-a-versao-mais-recente-do-repositorio-git/</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 Obter apenas a versão mais recente do repositório git" />&lt;h1 id="obter-apenas-a-versão-mais-recente-do-repositório-git">Obter apenas a versão mais recente do repositório git
&lt;/h1>&lt;p>Você pode obter apenas a versão mais recente do repositório com o comando a seguir.
Isso é útil quando você deseja obter o repositório rapidamente para economizar espaço em disco.&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 do repositório&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>Como resolver o erro de certificado quando o GitHub Copilot para de funcionar</title><link>http://kenji.blog/pt/p/como-resolver-erro-certificado-github-copilot/</link><pubDate>Sun, 21 Apr 2024 18:47:26 +0900</pubDate><guid>http://kenji.blog/pt/p/como-resolver-erro-certificado-github-copilot/</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 Como resolver o erro de certificado quando o GitHub Copilot para de funcionar" />&lt;h1 id="o-que-fazer-quando-o-seguinte-erro-é-exibido-no-github-copilot">O que fazer quando o seguinte erro é exibido no GitHub Copilot
&lt;/h1>&lt;p>A partir de 19/04/2024, o GitHub Copilot parou de funcionar. A mensagem de erro é a seguinte:&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="solução">Solução
&lt;/h2>&lt;p>Parece ser um bug do ESET. Nas configurações avançadas do ESET, desative a opção &amp;ldquo;Ativar SSL/TLS&amp;rdquo;.
&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="referência">Referência
&lt;/h2>&lt;p>Parece que o mesmo erro está ocorrendo no 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>Introdução ao vim</title><link>http://kenji.blog/pt/p/vim%E5%85%A5%E9%96%80/</link><pubDate>Fri, 19 Apr 2024 22:06:34 +0900</pubDate><guid>http://kenji.blog/pt/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 Introdução ao 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="introdução-ao-vim">Introdução ao vim
&lt;/h1>&lt;h2 id="download-e-instalação">Download e Instalação
&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>No site acima, baixe e instale o módulo apropriado para o seu sistema operacional.&lt;/p>
&lt;p>Para Windows, escolher &lt;code>gvim_X.X.X_x64_signed.exe&lt;/code> é uma boa opção.&lt;/p>
&lt;h2 id="como-iniciar">Como Iniciar
&lt;/h2>&lt;p>No Windows, é necessário registrar a pasta onde &lt;code>vim.exe&lt;/code> está localizado na variável de ambiente Path.&lt;/p>
&lt;p>Como iniciar:&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>Para iniciar especificando um nome de arquivo:&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="como-sair">Como Sair
&lt;/h2>&lt;p>Para sair, digite &lt;code>:&lt;/code> (dois pontos), depois &lt;code>q&lt;/code> e pressione 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>Se o arquivo foi modificado, será exibido &lt;code>Nenhuma gravação desde a última alteração (adicione ! para forçar)&lt;/code>.
Você pode forçar a saída descartando as alterações.&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>Para salvar e sair do arquivo:&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>O seguinte também tem o mesmo significado:&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>Você também pode sair pressionando &lt;code>Shift&lt;/code> e apertando &lt;code>z&lt;/code> duas vezes. (O mesmo que :wq)&lt;/p>
&lt;h2 id="modos">Modos
&lt;/h2>&lt;p>O vim possui um &lt;code>Modo de Comando&lt;/code> e um &lt;code>Modo de Inserção&lt;/code>. Ao iniciar o vim, ele está no &lt;code>Modo de Comando&lt;/code>. Pressionar a tecla &lt;code>i&lt;/code> muda para o &lt;code>Modo de Inserção&lt;/code>.&lt;/p>
&lt;p>No &lt;code>Modo de Inserção&lt;/code>, como o nome sugere, você pode digitar texto. Para voltar do &lt;code>Modo de Inserção&lt;/code> para o &lt;code>Modo de Comando&lt;/code>, pressione a tecla &lt;code>ESC&lt;/code>.&lt;/p>
&lt;p>A alternância entre esses modos é uma característica fundamental do vim.&lt;/p>
&lt;h2 id="movimentação-do-cursor-e-rolagem">Movimentação do Cursor e Rolagem
&lt;/h2>&lt;p>Resumo da movimentação do cursor e rolagem no &lt;code>Modo de Comando&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tecla&lt;/th>
&lt;th>Descrição&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>h&lt;/code> (ou &lt;code>Ctrl&lt;/code>+&lt;code>H&lt;/code>, &lt;code>BackSpace&lt;/code>, &lt;code>←&lt;/code>)&lt;/td>
&lt;td>Mover para a esquerda&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>j&lt;/code> (ou &lt;code>Ctrl&lt;/code>+&lt;code>J&lt;/code> / &lt;code>N&lt;/code>, &lt;code>↓&lt;/code>)&lt;/td>
&lt;td>Mover para baixo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>k&lt;/code> (ou &lt;code>Ctrl&lt;/code>+&lt;code>P&lt;/code>, &lt;code>↑&lt;/code>)&lt;/td>
&lt;td>Mover para cima&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>l&lt;/code> (ou &lt;code>Space&lt;/code>, &lt;code>→&lt;/code>)&lt;/td>
&lt;td>Mover para a direita&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>+&lt;/code> (ou &lt;code>Enter&lt;/code>)&lt;/td>
&lt;td>Mover para o início da próxima linha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>-&lt;/code>&lt;/td>
&lt;td>Mover para o início da linha anterior&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>B&lt;/code> (ou &lt;code>PageUp&lt;/code>)&lt;/td>
&lt;td>Rolar para cima (página)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>F&lt;/code> (ou &lt;code>PageDown&lt;/code>)&lt;/td>
&lt;td>Rolar para baixo (página)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>U&lt;/code>&lt;/td>
&lt;td>Rolar para cima (meia página)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>D&lt;/code>&lt;/td>
&lt;td>Rolar para baixo (meia página)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>Y&lt;/code>&lt;/td>
&lt;td>Rolar para cima (uma linha)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>E&lt;/code>&lt;/td>
&lt;td>Rolar para baixo (uma linha)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>Rolar linha do cursor para o topo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>.&lt;/code>&lt;/td>
&lt;td>Rolar linha do cursor para o centro&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>z&lt;/code> &lt;code>-&lt;/code>&lt;/td>
&lt;td>Rolar linha do cursor para a base&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>0&lt;/code> (ou &lt;code>|&lt;/code>)&lt;/td>
&lt;td>Mover o cursor para o início da linha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>$&lt;/code>&lt;/td>
&lt;td>Mover o cursor para o fim da linha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>^&lt;/code> (ou &lt;code>_&lt;/code>)&lt;/td>
&lt;td>Mover o cursor para o primeiro caractere não em branco da linha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>G&lt;/code> (ou &lt;code>:$&lt;/code>)&lt;/td>
&lt;td>Mover o cursor para a última linha&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>:número_da_linha&lt;/code> &lt;code>Enter&lt;/code>&lt;/td>
&lt;td>Mover para a linha especificada&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Ao digitar um &lt;code>número&lt;/code> antes das teclas de movimento acima, você pode mover várias vezes por essa quantidade.
(Por exemplo, digitar &lt;code>3j&lt;/code> moverá 3 linhas para baixo a partir da posição atual do cursor.)&lt;/p>
&lt;h2 id="outros-comandos">Outros Comandos
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tecla&lt;/th>
&lt;th>Descrição&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>Redesenhar a tela&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code>+&lt;code>G&lt;/code>&lt;/td>
&lt;td>Mostrar número de linhas e a posição do cursor&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table></description></item><item><title>Lista de Atalhos do Microsoft Word</title><link>http://kenji.blog/pt/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/pt/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 Lista de Atalhos do Microsoft Word" />&lt;h2 id="lista-de-atalhos">Lista de Atalhos
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tecla de Atalho&lt;/th>
&lt;th>Descrição&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>Negrito&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>I&lt;/code>&lt;/td>
&lt;td>Itálico&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>Sublinhado&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>E&lt;/code>&lt;/td>
&lt;td>Alinhar ao centro&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>L&lt;/code>&lt;/td>
&lt;td>Alinhar à esquerda&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>R&lt;/code>&lt;/td>
&lt;td>Alinhar à direita&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>]&lt;/code>&lt;/td>
&lt;td>Aumentar o tamanho da fonte&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>[&lt;/code>&lt;/td>
&lt;td>Diminuir o tamanho da fonte&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>Copiar&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>V&lt;/code>&lt;/td>
&lt;td>Colar&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>Recortar&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Z&lt;/code>&lt;/td>
&lt;td>Desfazer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Y&lt;/code>&lt;/td>
&lt;td>Refazer a ação desfeita&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>A&lt;/code>&lt;/td>
&lt;td>Selecionar tudo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Shift&lt;/code> + &lt;code>Teclas de Seta&lt;/code>&lt;/td>
&lt;td>Selecionar um intervalo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>Pesquisar texto&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>Substituir texto&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>P&lt;/code>&lt;/td>
&lt;td>Exibir visualização de impressão&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code>&lt;/td>
&lt;td>Salvar o documento&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>Salvar como&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Home&lt;/code>&lt;/td>
&lt;td>Mover para o início do documento&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>End&lt;/code>&lt;/td>
&lt;td>Mover para o final do documento&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="referência">Referência
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://support.microsoft.com/pt-br/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"
>Atalhos de teclado do Word&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Lista de Atalhos do Visual Studio</title><link>http://kenji.blog/pt/p/lista-de-atalhos-do-visual-studio/</link><pubDate>Sat, 06 Apr 2024 11:27:37 +0900</pubDate><guid>http://kenji.blog/pt/p/lista-de-atalhos-do-visual-studio/</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 Lista de Atalhos do Visual Studio" />&lt;h1 id="lista-de-atalhos-do-visual-studio">Lista de Atalhos do Visual Studio
&lt;/h1>&lt;p>Fiz uma lista dos atalhos do Visual Studio que uso com frequência pessoalmente.
Ao memorizar os atalhos de teclado do Visual Studio, você pode trabalhar no desenvolvimento de forma mais eficiente. Por favor, tente usá-los.&lt;/p>
&lt;p>※Verificado no Visual Studio 2022.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tecla de atalho&lt;/th>
&lt;th>Descrição&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>F1&lt;/code>&lt;/td>
&lt;td>Exibir ajuda da palavra selecionada&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F2&lt;/code>&lt;/td>
&lt;td>Ir para o marcador&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F2&lt;/code>&lt;/td>
&lt;td>Adicionar um marcador&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>Remover todos os marcadores&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F5&lt;/code>&lt;/td>
&lt;td>Compilar e executar (com depuração)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F5&lt;/code>&lt;/td>
&lt;td>Compilar e executar (sem depuração)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F7&lt;/code>&lt;/td>
&lt;td>Compilar&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F9&lt;/code>&lt;/td>
&lt;td>Adicionar ponto de interrupção na linha atual&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F9&lt;/code>&lt;/td>
&lt;td>Desativar ponto de interrupção na linha atual&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>Remover todos os pontos de interrupção&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F10&lt;/code>&lt;/td>
&lt;td>Passar por cima (Step over)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F11&lt;/code>&lt;/td>
&lt;td>Entrar (Step in)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F12&lt;/code>&lt;/td>
&lt;td>Ir para definição&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>D&lt;/code>&lt;/td>
&lt;td>Duplicar a linha atual&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>&lt;/td>
&lt;td>Cortar a linha (quando não houver seleção)&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>Selecionar até o par correspondente do parêntese/chave na posição do cursor&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>Setas para cima/baixo&lt;/code>&lt;/td>
&lt;td>Mover a linha atual para cima ou para baixo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Alt&lt;/code> + &lt;code>Shift&lt;/code> + &lt;code>Setas&lt;/code>&lt;/td>
&lt;td>Multi-cursor/seleção em bloco&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>Alternar exibição do código-fonte/janela&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>Exibir histórico da área de transferência&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> e depois &lt;code>Ctrl&lt;/code> + &lt;code>C&lt;/code>&lt;/td>
&lt;td>Comentar a linha atual&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>K&lt;/code> e depois &lt;code>Ctrl&lt;/code> + &lt;code>U&lt;/code>&lt;/td>
&lt;td>Descomentar a linha atual&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>Ir para a linha especificada&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>F&lt;/code>&lt;/td>
&lt;td>Pesquisar&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>Pesquisa global&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>H&lt;/code>&lt;/td>
&lt;td>Substituir&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>Substituição global&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Tab&lt;/code>&lt;/td>
&lt;td>Alternar exibição do código-fonte/janela&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>Space&lt;/code>&lt;/td>
&lt;td>Autocompletar palavras&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>Abrir a janela do Gerenciador de Soluções&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>Abrir a janela de Exibição de Recursos&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Ctrl&lt;/code> + &lt;code>0&lt;/code> e depois &lt;code>Ctrl&lt;/code> + &lt;code>G&lt;/code>&lt;/td>
&lt;td>Abrir a janela de Commit do Git&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="referência">Referência
&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"
>Atalhos de teclado padrão no 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>Adicionar o Hidemaru Editor grep ao menu de contexto do Explorer</title><link>http://kenji.blog/pt/p/adicionar-hidemaru-editor-grep-ao-menu-de-contexto-do-explorer/</link><pubDate>Wed, 03 Apr 2024 00:00:46 +0900</pubDate><guid>http://kenji.blog/pt/p/adicionar-hidemaru-editor-grep-ao-menu-de-contexto-do-explorer/</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 Adicionar o Hidemaru Editor grep ao menu de contexto do Explorer" />&lt;p>Aqui mostramos como adicionar o grep do Hidemaru Editor ao menu de contexto (clique com o botão direito) do Explorer no Windows 10/11.&lt;/p>
&lt;p>&lt;strong>Aviso: O procedimento a seguir altera o registro. Faça por sua própria conta e risco.&lt;/strong>&lt;/p>
&lt;h2 id="procedimento">Procedimento
&lt;/h2>&lt;ol>
&lt;li>Abra o link abaixo e salve em qualquer pasta.&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>Dê um duplo clique no arquivo &lt;code>秀丸レジストリ登録.reg&lt;/code> para adicioná-lo ao registro.&lt;/li>
&lt;/ol>
&lt;h2 id="referência">Referência
&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>Como instalar o editor de texto micro no Windows</title><link>http://kenji.blog/pt/p/como-instalar-o-editor-de-texto-micro-no-windows/</link><pubDate>Sun, 31 Mar 2024 21:50:39 +0900</pubDate><guid>http://kenji.blog/pt/p/como-instalar-o-editor-de-texto-micro-no-windows/</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 Como instalar o editor de texto micro no Windows" />&lt;h2 id="baixar-o-micro">Baixar o 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>Abra o link acima, clique em &lt;code>Show all XX assets&lt;/code> (onde X é um número) e baixe o &lt;code>micro-X.X.XX-win64.zip&lt;/code> (onde X é um número).
Extraia o arquivo zip e coloque todos os arquivos em uma pasta de sua escolha.&lt;/p>
&lt;h2 id="configurar-as-variáveis-de-ambiente">Configurar as variáveis de ambiente
&lt;/h2>&lt;p>Para usar o &lt;code>micro.exe&lt;/code> pelo Prompt de Comando, você precisa configurar as variáveis de ambiente.&lt;/p>
&lt;ol>
&lt;li>Pressione a &lt;code>tecla Win&lt;/code> + &lt;code>tecla R&lt;/code>, digite &lt;code>sysdm.cpl&lt;/code> e pressione &lt;code>Enter&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>Configurações avançadas do sistema&lt;/code> nas &lt;code>Propriedades do Sistema&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>Variáveis de Ambiente&lt;/code>.&lt;/li>
&lt;li>Selecione &lt;code>Path&lt;/code> em &lt;code>Variáveis do sistema&lt;/code> e clique em &lt;code>Editar&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>Novo&lt;/code> e adicione o caminho para a pasta que contém o &lt;code>micro.exe&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>OK&lt;/code> para fechar todas as caixas de diálogo.&lt;/li>
&lt;li>Reinicie o Prompt de Comando e digite &lt;code>nano&lt;/code> para verificar se ele pode ser executado.&lt;/li>
&lt;/ol>
&lt;h2 id="como-usar-o-micro">Como usar o micro
&lt;/h2>&lt;p>Ao digitar &lt;code>micro&lt;/code> no Prompt de Comando e executá-lo, a seguinte tela será exibida.
&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>As principais operações e teclas de atalho são as seguintes:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tecla de atalho&lt;/th>
&lt;th>Operação&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Ctrl+Q&lt;/td>
&lt;td>Fechar arquivo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+S&lt;/td>
&lt;td>Salvar arquivo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+O&lt;/td>
&lt;td>Abrir arquivo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+A&lt;/td>
&lt;td>Selecionar tudo&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+X&lt;/td>
&lt;td>Cortar seleção&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+C&lt;/td>
&lt;td>Copiar seleção&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+V&lt;/td>
&lt;td>Colar&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Z&lt;/td>
&lt;td>Desfazer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+Y&lt;/td>
&lt;td>Refazer&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ctrl+E&lt;/td>
&lt;td>Executar comando do editor&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="referência">Referência
&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>Como instalar o editor de texto CLI nano no Windows</title><link>http://kenji.blog/pt/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/pt/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 Como instalar o editor de texto CLI nano no Windows" />&lt;h2 id="baixar-o-nanoexe">Baixar o 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>Abra o link acima, clique em &lt;code>Download&lt;/code> e baixe o &lt;code>GNU-Nano_Win32(static).zip&lt;/code>.
Extraia o arquivo zip e coloque o &lt;code>nano.exe&lt;/code> em qualquer pasta.&lt;/p>
&lt;ul>
&lt;li>A entrada de texto em japonês não é suportada (em 31/03/2024).&lt;/li>
&lt;/ul>
&lt;h2 id="configurar-variáveis-de-ambiente">Configurar variáveis de ambiente
&lt;/h2>&lt;p>Para usar o &lt;code>nano.exe&lt;/code> no Prompt de Comando, você precisa configurar as variáveis de ambiente.&lt;/p>
&lt;ol>
&lt;li>Pressione a &lt;code>tecla Win&lt;/code> + &lt;code>tecla R&lt;/code>, digite &lt;code>sysdm.cpl&lt;/code> e pressione &lt;code>Enter&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>Propriedades do Sistema&lt;/code> na janela de Propriedades do Sistema.&lt;/li>
&lt;li>Clique em &lt;code>Variáveis de Ambiente&lt;/code>.&lt;/li>
&lt;li>Selecione &lt;code>Path&lt;/code> em &lt;code>Variáveis de sistema&lt;/code> e clique em &lt;code>Editar&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>Novo&lt;/code> e adicione o caminho do &lt;code>nano.exe&lt;/code>.&lt;/li>
&lt;li>Clique em &lt;code>OK&lt;/code> para fechar todas as caixas de diálogo.&lt;/li>
&lt;li>Reinicie o Prompt de Comando, digite &lt;code>nano&lt;/code> e verifique se ele é executado.&lt;/li>
&lt;/ol>
&lt;h2 id="como-usar-o-nano">Como usar o nano
&lt;/h2>&lt;p>Ao digitar &lt;code>nano&lt;/code> e executar, a seguinte tela será exibida:&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>As descrições dos atalhos são exibidas na parte inferior da tela.&lt;/p>
&lt;p>O significado dos símbolos é o seguinte:&lt;/p>
&lt;ul>
&lt;li>&lt;code>^&lt;/code> representa a tecla &lt;code>Ctrl&lt;/code>.&lt;/li>
&lt;li>&lt;code>M-&lt;/code> representa a tecla &lt;code>Alt&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Para salvar e fechar, pressione &lt;code>Ctrl&lt;/code> + &lt;code>S&lt;/code> e depois &lt;code>Ctrl&lt;/code> + &lt;code>X&lt;/code>.&lt;/p>
&lt;h2 id="referência">Referência
&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>Como iniciar o Hidemaru Editor com o comando 'hide'</title><link>http://kenji.blog/pt/p/como-iniciar-o-hidemaru-editor-com-o-comando-hide/</link><pubDate>Fri, 29 Mar 2024 23:45:37 +0900</pubDate><guid>http://kenji.blog/pt/p/como-iniciar-o-hidemaru-editor-com-o-comando-hide/</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 Como iniciar o Hidemaru Editor com o comando 'hide'" />&lt;h2 id="aqui-está-como-iniciar-o-hidemaru-editor-com-o-comando-hide">Aqui está como iniciar o Hidemaru Editor com o comando &amp;lsquo;hide&amp;rsquo;.
&lt;/h2>&lt;p>Nota: Este método foi testado no &lt;code>Windows 10/11&lt;/code>.&lt;/p>
&lt;ol>
&lt;li>Abra o Editor do Registro.&lt;/li>
&lt;li>Navegue até &lt;code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths&lt;/code>.&lt;/li>
&lt;li>Crie uma chave chamada &lt;code>hide.exe&lt;/code> em &lt;code>App Paths&lt;/code>. &lt;strong>A parte antes de &lt;code>.exe&lt;/code> no nome desta chave se torna o nome do comando.&lt;/strong>&lt;/li>
&lt;li>Defina o valor &lt;code>(Padrão)&lt;/code> da chave &lt;code>hide.exe&lt;/code> para o caminho do arquivo executável do Hidemaru Editor. No meu ambiente, era &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru\Hidemaru.exe&amp;quot;&lt;/code>.&lt;/li>
&lt;li>Crie um valor de String chamado &lt;code>Path&lt;/code> na chave &lt;code>hide.exe&lt;/code>.&lt;/li>
&lt;li>Defina os dados do &lt;code>Path&lt;/code> para o caminho da pasta contendo o arquivo executável do Hidemaru Editor. No meu ambiente, era &lt;code>&amp;quot;C:\Program Files (x86)\Hidemaru&amp;quot;&lt;/code>.&lt;/li>
&lt;li>Agora, na caixa de diálogo &lt;strong>Executar&lt;/strong> (pressione a tecla &lt;code>Win&lt;/code> + &lt;code>R&lt;/code>), você pode iniciar o Hidemaru Editor digitando o comando &lt;code>hide&lt;/code>. Além disso, no Prompt de Comando, você pode iniciá-lo com o comando &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>Se você salvar o conteúdo acima em um arquivo &lt;code>.reg&lt;/code> e executá-lo, as configurações serão adicionadas ao registro.&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>Instalar PowerToys no Prompt de Comando</title><link>http://kenji.blog/pt/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/pt/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 Instalar PowerToys no Prompt de Comando" />&lt;h1 id="instalar-powertoys-no-prompt-de-comando">Instalar PowerToys no Prompt de Comando
&lt;/h1>&lt;p>Abaixo está como instalar o PowerToys usando o Prompt de Comando.&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="desinstalar-powertoys-no-prompt-de-comando">Desinstalar PowerToys no Prompt de Comando
&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>Sobre o Prêmio Microsoft MVP (2023-2024)</title><link>http://kenji.blog/pt/p/sobre-o-pr%C3%AAmio-microsoft-mvp-2023-2024/</link><pubDate>Mon, 31 Jul 2023 19:15:14 +0900</pubDate><guid>http://kenji.blog/pt/p/sobre-o-pr%C3%AAmio-microsoft-mvp-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 Sobre o Prêmio Microsoft MVP (2023-2024)" />&lt;h1 id="sobre-o-prêmio-microsoft-mvp-2023-2024">Sobre o Prêmio Microsoft MVP (2023-2024)
&lt;/h1>&lt;p>Tenho o prazer de anunciar que recebi o prêmio Microsoft MVP (2023-2024).
Este é o meu 7º ano consecutivo recebendo este prêmio desde 2017.&lt;/p>
&lt;p>A categoria premiada é &lt;strong>Developer Technologies&lt;/strong> .&lt;/p>
&lt;p>Relembrando minhas atividades anteriores, estive envolvido nas seguintes áreas:&lt;/p>
&lt;ul>
&lt;li>Publicação de código no &lt;a class="link" href="https://github.com/kenjinote" target="_blank" rel="noopener"
>GitHub&lt;/a>&lt;/li>
&lt;li>Compartilhamento de informações técnicas no blog e em &lt;a class="link" href="https://twitter.com/kenjinote" target="_blank" rel="noopener"
>redes sociais (como o Twitter)&lt;/a>&lt;/li>
&lt;li>Contribuições no &lt;a class="link" href="https://social.msdn.microsoft.com/Forums/ja-JP/home" target="_blank" rel="noopener"
>fórum MSDN&lt;/a>&lt;/li>
&lt;li>Feedback sobre produtos da Microsoft&lt;/li>
&lt;/ul>
&lt;p>Continuarei me esforçando para escrever artigos melhores e compartilhar informações no futuro.&lt;/p>
&lt;p>Agradeço pelo seu apoio contínuo.&lt;/p></description></item><item><title>Procurando por Patrocinadores no GitHub</title><link>http://kenji.blog/pt/p/procurando-por-patrocinadores-no-github/</link><pubDate>Tue, 17 Jan 2023 18:13:56 +0900</pubDate><guid>http://kenji.blog/pt/p/procurando-por-patrocinadores-no-github/</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 Procurando por Patrocinadores no GitHub" />&lt;h1 id="procurando-por-patrocinadores-no-github">Procurando por Patrocinadores no GitHub
&lt;/h1>&lt;p>Ficaria muito feliz se você pudesse se tornar um patrocinador no GitHub através do botão abaixo.&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>Será utilizado para o desenvolvimento de ferramentas, etc.&lt;/p>
&lt;p>Quero me esforçar até conseguir obter um certificado de assinatura de código!&lt;/p></description></item><item><title>Instalar aplicativos via linha de comando usando o WinGet</title><link>http://kenji.blog/pt/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/pt/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 Instalar aplicativos via linha de comando usando o WinGet" />&lt;h2 id="pré-requisitos">Pré-requisitos
&lt;/h2>&lt;p>Ter o Windows 11 instalado&lt;/p>
&lt;h2 id="procedimento">Procedimento
&lt;/h2>&lt;ol>
&lt;li>Instale o &lt;code>Instalador de Aplicativo&lt;/code> da Microsoft Store
&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>Instale o aplicativo usando o Prompt de Comando
&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="principais-aplicativos-que-podem-ser-instalados">Principais aplicativos que podem ser instalados
&lt;/h2>&lt;ul>
&lt;li>Google Chrome (Comando &lt;code>winget install Google.Chrome&lt;/code>)&lt;/li>
&lt;li>Microsoft Edge (Comando &lt;code>winget install Microsoft.Edge&lt;/code>)&lt;/li>
&lt;li>Microsoft Teams (Comando &lt;code>winget install Microsoft.Teams&lt;/code>)&lt;/li>
&lt;li>Microsoft Office (Comando &lt;code>winget install Microsoft.Office&lt;/code>)&lt;/li>
&lt;li>Visual Studio Code (Comando &lt;code>winget install vscode&lt;/code>)&lt;/li>
&lt;li>Slack (Comando &lt;code>winget install SlackTechnologies.Slack&lt;/code>)&lt;/li>
&lt;li>Discord (Comando &lt;code>winget install Discord.Discord&lt;/code>)&lt;/li>
&lt;li>Docker Desktop (Comando &lt;code>winget install Docker.DockerDesktop&lt;/code>)&lt;/li>
&lt;li>Git (Comando &lt;code>winget install Git&lt;/code>)&lt;/li>
&lt;li>7zip (Comando &lt;code>winget install 7zip&lt;/code>)&lt;/li>
&lt;li>VLC (Comando &lt;code>winget install VideoLAN.VLC&lt;/code>)&lt;/li>
&lt;/ul>
&lt;h2 id="referência">Referência
&lt;/h2>&lt;p>&lt;a class="link" href="https://learn.microsoft.com/pt-br/windows/package-manager/winget/" target="_blank" rel="noopener"
>Usar a ferramenta winget para instalar e gerenciar aplicativos&lt;/a>&lt;/p>
&lt;h3 id="nota-lateral">Nota lateral
&lt;/h3>&lt;p>Pensei que também poderia instalar o Paint.Net, mas não consegui.&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>Excluir tags no git</title><link>http://kenji.blog/pt/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/pt/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 Excluir tags no git" />&lt;h1 id="excluir-uma-tag-local">Excluir uma tag local
&lt;/h1>&lt;ol>
&lt;li>Verifique as tags locais existentes com &lt;code>git tag&lt;/code>.&lt;/li>
&lt;li>Exclua a tag com &lt;code>git tag -d v0.1.0&lt;/code>. (Especifique a tag que você deseja excluir no lugar de &lt;code>v0.1.0&lt;/code>)&lt;/li>
&lt;/ol>
&lt;h1 id="excluir-uma-tag-remota">Excluir uma tag remota
&lt;/h1>&lt;ol>
&lt;li>Verifique as tags remotas existentes com &lt;code>git ls-remote --tags&lt;/code>.&lt;/li>
&lt;li>Exclua a tag remota existente com &lt;code>git push origin --delete v0.1.0&lt;/code>. (Especifique a tag que você deseja excluir no lugar de &lt;code>v0.1.0&lt;/code>)&lt;/li>
&lt;/ol>
&lt;h2 id="referência">Referência
&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>