<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>VB関数を分解してみる試み</title><link>http://blogs.wankuma.com/naoko/category/1613.aspx</link><description>VB関数を分解してみる試み</description><managingEditor>なおこ(・∀・) &lt;naoko@wankuma.com&gt;</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>なおこ(・∀・) &lt;naoko@wankuma.com&gt;</dc:creator><title>Beep 関数</title><link>http://blogs.wankuma.com/naoko/archive/2008/01/23/118941.aspx</link><pubDate>Wed, 23 Jan 2008 22:25:00 GMT</pubDate><guid>http://blogs.wankuma.com/naoko/archive/2008/01/23/118941.aspx</guid><wfw:comment>http://blogs.wankuma.com/naoko/comments/118941.aspx</wfw:comment><comments>http://blogs.wankuma.com/naoko/archive/2008/01/23/118941.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/naoko/comments/commentRss/118941.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/naoko/services/trackbacks/118941.aspx</trackback:ping><description>&lt;p&gt;
えーと、、超不定期ですが、今日は &lt;a href="http://msdn2.microsoft.com/ja-jp/library/kz27k38z(VS.80).aspx" target="_blank" title="Beep 関数" &gt;Beep 関数&lt;/a&gt; です。&lt;br&gt;
「ペッ」って鳴らすあれです。&lt;br&gt;
単純に MessageBeep を呼ぶだけかと想像していたのですが、違うみたいですね。&lt;br&gt;
アクセス許可絡みをうじゃうじゃやっているようです。&lt;br&gt;
&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Option Strict On&lt;/span&gt;
&lt;br&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Security.Permissions
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Runtime.InteropServices
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel
&lt;br&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;NotInheritable&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Functions
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" AppActivate "&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;
&lt;A href="http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx" title="AppActivate 関数"&gt;AppActivate 関数 参照&lt;/a&gt;
&lt;/p&gt;&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" GetResourceString "&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;
&lt;A href="http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx" title="AppActivate 関数"&gt;AppActivate 関数 参照&lt;/a&gt;
&lt;/p&gt;&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" Asc "&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;
&lt;A href="http://blogs.wankuma.com/naoko/archive/2008/01/17/117972.aspx" title="Asc 関数"&gt;Asc 関数 参照&lt;/a&gt;
&lt;/p&gt;&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" Beep "&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Unicode&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; MessageBeep(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; uType &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; Beep()
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; perm &lt;span class="kwrd"&gt;As&lt;/span&gt; UIPermission = &lt;span class="kwrd"&gt;New&lt;/span&gt; UIPermission(UIPermissionWindow.SafeSubWindows)
            perm.Demand()
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Security.SecurityException
            &lt;span class="kwrd"&gt;Try&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; perm &lt;span class="kwrd"&gt;As&lt;/span&gt; UIPermission = &lt;span class="kwrd"&gt;New&lt;/span&gt; UIPermission(UIPermissionWindow.SafeSubWindows)
                perm.Demand()
            &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception2 &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Security.SecurityException
                &lt;span class="kwrd"&gt;Return&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
        MessageBeep(0)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;img src ="http://blogs.wankuma.com/naoko/aggbug/118941.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>なおこ(・∀・) &lt;naoko@wankuma.com&gt;</dc:creator><title>Asc 関数</title><link>http://blogs.wankuma.com/naoko/archive/2008/01/17/117972.aspx</link><pubDate>Thu, 17 Jan 2008 18:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/naoko/archive/2008/01/17/117972.aspx</guid><wfw:comment>http://blogs.wankuma.com/naoko/comments/117972.aspx</wfw:comment><comments>http://blogs.wankuma.com/naoko/archive/2008/01/17/117972.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.wankuma.com/naoko/comments/commentRss/117972.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/naoko/services/trackbacks/117972.aspx</trackback:ping><description>&lt;p&gt;
今日は &lt;a href="http://msdn2.microsoft.com/ja-jp/library/zew1e4wc(VS.80).aspx" target="_blank" title="Asc 関数、AscW 関数"&gt;Asc 関数&lt;/a&gt; です。&lt;br&gt;
msdn には「文字に対応する文字コードを表す整数型 (Integer) の値を返します。」とあります。&lt;br&gt;
VB6 で使っていた AscB 関数は VB.NET のコード体系が Unicode になったのでサポートされなくなったらしいです。&lt;br&gt;
いずれにしても、あまり使う機会がなかったなぁ。&lt;br&gt;
&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Option Strict On&lt;/span&gt;
&lt;br&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Security.Permissions
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Runtime.InteropServices
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel
&lt;br&gt;
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;NotInheritable&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Functions
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" AppActivate "&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;
&lt;A href="http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx" title="AppActivate 関数"&gt;AppActivate 関数 参照&lt;/a&gt;
&lt;/p&gt;&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" GetResourceString "&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;
&lt;A href="http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx" title="AppActivate 関数"&gt;AppActivate 関数 参照&lt;/a&gt;
&lt;/p&gt;&lt;pre class="csharpcode"&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" Asc "&lt;/span&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; Asc(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; [&lt;span class="kwrd"&gt;String&lt;/span&gt;] &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (([&lt;span class="kwrd"&gt;String&lt;/span&gt;] &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;OrElse&lt;/span&gt; ([&lt;span class="kwrd"&gt;String&lt;/span&gt;].Length = 0)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ArgumentException(GetResourceString(&lt;span class="str"&gt;"Argument_LengthGTZero1"&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {&lt;span class="str"&gt;"String"&lt;/span&gt;}))
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ch &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Char&lt;/span&gt; = [&lt;span class="kwrd"&gt;String&lt;/span&gt;].Chars(0)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = Convert.ToInt32(ch)
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (num2 &amp;lt; &amp;amp;H80) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; num2
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
&lt;br&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; buffer &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt;()
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; fileIOEncoding &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Text.Encoding = System.Text.Encoding.&lt;span class="kwrd"&gt;Default&lt;/span&gt;
&lt;br&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; chars &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Char&lt;/span&gt;() = &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;Char&lt;/span&gt;() {ch}
        &lt;span class="kwrd"&gt;If&lt;/span&gt; fileIOEncoding.IsSingleByte &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            buffer = &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt;(1 - 1) {}
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num3 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = fileIOEncoding.GetBytes(chars, 0, 1, buffer, 0)
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; buffer(0)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        buffer = &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt;(2 - 1) {}
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (fileIOEncoding.GetBytes(chars, 0, 1, buffer, 0) = 1) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; buffer(0)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; BitConverter.IsLittleEndian &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num4 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Byte&lt;/span&gt; = buffer(0)
            buffer(0) = buffer(1)
            buffer(1) = num4
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        num = BitConverter.ToInt16(buffer, 0)
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; num
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;img src ="http://blogs.wankuma.com/naoko/aggbug/117972.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>なおこ(・∀・) &lt;naoko@wankuma.com&gt;</dc:creator><title>AppActivate 関数</title><link>http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx</link><pubDate>Wed, 16 Jan 2008 12:31:00 GMT</pubDate><guid>http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx</guid><wfw:comment>http://blogs.wankuma.com/naoko/comments/117692.aspx</wfw:comment><comments>http://blogs.wankuma.com/naoko/archive/2008/01/16/117692.aspx#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://blogs.wankuma.com/naoko/comments/commentRss/117692.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/naoko/services/trackbacks/117692.aspx</trackback:ping><description>&lt;p&gt;
ひさびさのぶろぐ投稿です。&lt;br&gt;
皆様、お元気でしょうか。ワタシはまた入院していましたｗ&lt;br&gt;
&lt;br&gt;
VB.NET には過去との互換性の目的も含めて（たぶん）言語固有の関数があります。&lt;br&gt;
それらを VB 関数ではなく、.NET で実装してみようという試みです。&lt;br&gt;
（ほとんど Reflector のお世話になりっぱだと思いますがｗ）&lt;br&gt;
VB 関数が嫌いじゃ～でも VB 関数の機能は使いたいんじゃ～といういるかいないか解らない人向けです。&lt;br&gt;
変換ツールとか使えば、 C# でも VB 名前空間を Import しなくても、VB 関数みたいな事ができる、、、はず、、、&lt;br&gt;
&lt;br&gt;
最初は&lt;br&gt;
&lt;a href="http://msdn2.microsoft.com/ja-jp/library/dyz95fhy(VS.80).aspx" target="_blank" title="AppActivate"&gt;AppActivate 関数&lt;/a&gt; です。&lt;br&gt;
いきなりこけてますけども、ProcessID を引数にするやつがワタシの環境ではこけてしまいます。&lt;br&gt;
どうも GetWindowThreadProcessId がうまくいっていないっぽい。&lt;br&gt;
&lt;br&gt;
# 追記：ぎゃあー修正すればするほどソースがでかくなるー
&lt;br&gt;
&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;Option&lt;/span&gt; Strict &lt;span class="kwrd"&gt;On&lt;/span&gt;
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Security.Permissions
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.Runtime.InteropServices
&lt;span class="kwrd"&gt;Imports&lt;/span&gt; System.ComponentModel
&lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;NotInheritable&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt; Functions
&lt;span class="preproc"&gt;#Region&lt;/span&gt; &lt;span class="str"&gt;" AppActivate "&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetWindow(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; wFlag &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetDesktopWindow() &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetWindowThreadProcessId(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr, &lt;span class="kwrd"&gt;ByRef&lt;/span&gt; lpdwProcessId &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; IsWindowEnabled(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr) &lt;span class="kwrd"&gt;As&lt;/span&gt; &amp;lt;MarshalAs(UnmanagedType.Bool)&amp;gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; IsWindowVisible(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr) &lt;span class="kwrd"&gt;As&lt;/span&gt; &amp;lt;MarshalAs(UnmanagedType.Bool)&amp;gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Auto&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; FindWindow(&amp;lt;MarshalAs(UnmanagedType.VBByRefStr)&amp;gt; &lt;span class="kwrd"&gt;ByRef&lt;/span&gt; lpClassName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &amp;lt;MarshalAs(UnmanagedType.VBByRefStr)&amp;gt; &lt;span class="kwrd"&gt;ByRef&lt;/span&gt; lpWindowName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Auto&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetWindowText(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hWnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr, &amp;lt;Out(), MarshalAs(UnmanagedType.LPTStr)&amp;gt; &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; lpString &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Text.StringBuilder, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; nMaxCount &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; AttachThreadInput(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; idAttach &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; idAttachTo &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; fAttach &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; SetForegroundWindow(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr) &lt;span class="kwrd"&gt;As&lt;/span&gt; &amp;lt;MarshalAs(UnmanagedType.Bool)&amp;gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &amp;lt;DllImport(&lt;span class="str"&gt;"user32"&lt;/span&gt;, CharSet:=CharSet.&lt;span class="kwrd"&gt;Ansi&lt;/span&gt;, SetLastError:=&lt;span class="kwrd"&gt;True&lt;/span&gt;, ExactSpelling:=&lt;span class="kwrd"&gt;True&lt;/span&gt;)&amp;gt; _
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; SetFocus(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr) &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;br&gt;
    &amp;lt;SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.UnmanagedCode)&amp;gt; _
     &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AppActivate(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ProcessId &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; window &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr = GetWindow(GetDesktopWindow, 5)
        &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (window &amp;lt;&amp;gt; IntPtr.Zero)
            GetWindowThreadProcessId(window, (num))
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (((num = ProcessId) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; IsWindowEnabled(window)) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; IsWindowVisible(window)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            window = GetWindow(window, 2)
        &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (window = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            window = GetWindow(GetDesktopWindow, 5)
            &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (window &amp;lt;&amp;gt; IntPtr.Zero)
                GetWindowThreadProcessId(window, (num))
                &lt;span class="kwrd"&gt;If&lt;/span&gt; (num = ProcessId) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                window = GetWindow(window, 2)
            &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (window = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ArgumentException(GetResourceString(&lt;span class="str"&gt;"ProcessNotFound"&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {Convert.ToString(ProcessId)}))
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        AppActivateHelper(window)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;br&gt;
    &amp;lt;SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.UnmanagedCode)&amp;gt; _
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AppActivate(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; Title &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; lpClassName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; hWnd &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr = FindWindow((lpClassName), (Title))
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (hWnd = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; strA &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;String&lt;/span&gt;.Empty
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; lpString &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.Text.StringBuilder(&amp;amp;H1FF)
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; length &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = Strings.Len(Title)
            hWnd = GetWindow(GetDesktopWindow, 5)
            &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (hWnd &amp;lt;&amp;gt; IntPtr.Zero)
                num = GetWindowText(hWnd, lpString, lpString.Capacity)
                strA = lpString.ToString
                &lt;span class="kwrd"&gt;If&lt;/span&gt; ((num &amp;gt;= length) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; (&lt;span class="kwrd"&gt;String&lt;/span&gt;.Compare(strA, 0, Title, 0, length, StringComparison.OrdinalIgnoreCase) = 0)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                hWnd = GetWindow(hWnd, 2)
            &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (hWnd = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                hWnd = GetWindow(GetDesktopWindow, 5)
                &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (hWnd &amp;lt;&amp;gt; IntPtr.Zero)
                    num = GetWindowText(hWnd, lpString, lpString.Capacity)
                    strA = lpString.ToString
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; ((num &amp;gt;= length) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; (&lt;span class="kwrd"&gt;String&lt;/span&gt;.Compare(Strings.Right(strA, length), 0, Title, 0, length, StringComparison.OrdinalIgnoreCase) = 0)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    hWnd = GetWindow(hWnd, 2)
                &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (hWnd = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ArgumentException(GetResourceString(&lt;span class="str"&gt;"ProcessNotFound"&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {Title}))
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        AppActivateHelper(hWnd)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt; AppActivateHelper(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; hwndApp &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; perm &lt;span class="kwrd"&gt;As&lt;/span&gt; UIPermission = &lt;span class="kwrd"&gt;New&lt;/span&gt; UIPermission(UIPermissionWindow.AllWindows)
        perm.Demand()
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (&lt;span class="kwrd"&gt;Not&lt;/span&gt; IsWindowEnabled(hwndApp) &lt;span class="kwrd"&gt;OrElse&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; IsWindowVisible(hwndApp)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Dim&lt;/span&gt; window &lt;span class="kwrd"&gt;As&lt;/span&gt; IntPtr = GetWindow(hwndApp, 0)
            &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (window &amp;lt;&amp;gt; IntPtr.Zero)
                &lt;span class="kwrd"&gt;If&lt;/span&gt; (GetWindow(window, 4) = hwndApp) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; (IsWindowEnabled(window) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; IsWindowVisible(window)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Do&lt;/span&gt;
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    hwndApp = window
                    window = GetWindow(hwndApp, 0)
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                window = GetWindow(window, 2)
            &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (window = IntPtr.Zero) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ArgumentException(GetResourceString(&lt;span class="str"&gt;"ProcessNotFound"&lt;/span&gt;))
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            hwndApp = window
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        AttachThreadInput(0, GetWindowThreadProcessId(hwndApp, (num)), 1)
        SetForegroundWindow(hwndApp)
        SetFocus(hwndApp)
        AttachThreadInput(0, GetWindowThreadProcessId(hwndApp, (num)), 0)
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Sub&lt;/span&gt;
&lt;span class="preproc"&gt;#End Region&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Public&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetResourceString(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ResourceKey &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;, &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; &lt;span class="kwrd"&gt;ParamArray&lt;/span&gt; Args &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;()) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; str &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; format &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            format = GetResourceString(ResourceKey)
            str = &lt;span class="kwrd"&gt;String&lt;/span&gt;.Format(System.Threading.Thread.CurrentThread.CurrentUICulture, format, Args)
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception &lt;span class="kwrd"&gt;As&lt;/span&gt; StackOverflowException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception2 &lt;span class="kwrd"&gt;As&lt;/span&gt; OutOfMemoryException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception2
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception3 &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Threading.ThreadAbortException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception3
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception4 &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (str &amp;lt;&amp;gt; &lt;span class="str"&gt;""&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; str
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; format
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;br&gt;
    &amp;lt;EditorBrowsable(EditorBrowsableState.Never)&amp;gt; _
   &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetResourceString(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; ResourceKey &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; str2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (VBAResourceManager &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="str"&gt;"Message text unavailable.  Resource file 'Microsoft.VisualBasic resources' not found."&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
            str2 = VBAResourceManager.GetString(ResourceKey, System.Threading.Thread.CurrentThread.CurrentCulture)
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (str2 &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                str2 = VBAResourceManager.GetString(&lt;span class="str"&gt;"ID95"&lt;/span&gt;)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception &lt;span class="kwrd"&gt;As&lt;/span&gt; StackOverflowException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception2 &lt;span class="kwrd"&gt;As&lt;/span&gt; OutOfMemoryException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception2
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception3 &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Threading.ThreadAbortException
            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception3
        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception6 &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
            str2 = &lt;span class="str"&gt;"Message text unavailable.  Resource file 'Microsoft.VisualBasic resources' not found."&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; str2
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; m_VBAResourceManager &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Resources.ResourceManager
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; m_TriedLoadingResourceManager &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; ResourceManagerSyncObj &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;ReadOnly&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt; VBAResourceManager() &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Resources.ResourceManager
        &lt;span class="kwrd"&gt;Get&lt;/span&gt;
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (m_VBAResourceManager &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                &lt;span class="kwrd"&gt;Dim&lt;/span&gt; resourceManagerSyncObj &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Object&lt;/span&gt; = resourceManagerSyncObj
                &lt;span class="kwrd"&gt;If&lt;/span&gt; ((&lt;span class="kwrd"&gt;Not&lt;/span&gt; resourceManagerSyncObj &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; resourceManagerSyncObj.&lt;span class="kwrd"&gt;GetType&lt;/span&gt;.IsValueType) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Throw&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; ArgumentException(GetResourceString(&lt;span class="str"&gt;"SyncLockRequiresReferenceType1"&lt;/span&gt;, &lt;span class="kwrd"&gt;New&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;() {VBFriendlyNameOfType(resourceManagerSyncObj.&lt;span class="kwrd"&gt;GetType&lt;/span&gt;, &lt;span class="kwrd"&gt;False&lt;/span&gt;)}))
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                &lt;span class="kwrd"&gt;SyncLock&lt;/span&gt; resourceManagerSyncObj
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; m_TriedLoadingResourceManager &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Try&lt;/span&gt;
                            m_VBAResourceManager = &lt;span class="kwrd"&gt;New&lt;/span&gt; System.Resources.ResourceManager(&lt;span class="str"&gt;"Microsoft.VisualBasic"&lt;/span&gt;, System.Reflection.&lt;span class="kwrd"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly)
                        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception &lt;span class="kwrd"&gt;As&lt;/span&gt; StackOverflowException
                            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception
                        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception2 &lt;span class="kwrd"&gt;As&lt;/span&gt; OutOfMemoryException
                            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception2
                        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception3 &lt;span class="kwrd"&gt;As&lt;/span&gt; System.Threading.ThreadAbortException
                            &lt;span class="kwrd"&gt;Throw&lt;/span&gt; exception3
                        &lt;span class="kwrd"&gt;Catch&lt;/span&gt; exception6 &lt;span class="kwrd"&gt;As&lt;/span&gt; Exception
                        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Try&lt;/span&gt;
                        m_TriedLoadingResourceManager = &lt;span class="kwrd"&gt;True&lt;/span&gt;
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;SyncLock&lt;/span&gt;
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; m_VBAResourceManager
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Get&lt;/span&gt;
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Property&lt;/span&gt;
&lt;br&gt;
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; VBFriendlyNameOfType(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; typ &lt;span class="kwrd"&gt;As&lt;/span&gt; Type, &lt;span class="kwrd"&gt;Optional&lt;/span&gt; &lt;span class="kwrd"&gt;ByVal&lt;/span&gt; FullName &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt; = &lt;span class="kwrd"&gt;False&lt;/span&gt;) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; name &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; typeCode &lt;span class="kwrd"&gt;As&lt;/span&gt; TypeCode
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; arraySuffixAndElementType &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = GetArraySuffixAndElementType((typ))
        &lt;span class="kwrd"&gt;If&lt;/span&gt; typ.IsEnum &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            typeCode = TypeCode.&lt;span class="kwrd"&gt;Object&lt;/span&gt;
        &lt;span class="kwrd"&gt;Else&lt;/span&gt;
            typeCode = Type.GetTypeCode(typ)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Select&lt;/span&gt; &lt;span class="kwrd"&gt;Case&lt;/span&gt; typeCode
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.DBNull
                name = &lt;span class="str"&gt;"DBNull"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
                name = &lt;span class="str"&gt;"Boolean"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Char&lt;/span&gt;
                name = &lt;span class="str"&gt;"Char"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.SByte
                name = &lt;span class="str"&gt;"SByte"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Byte&lt;/span&gt;
                name = &lt;span class="str"&gt;"Byte"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.Int16
                name = &lt;span class="str"&gt;"Short"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.UInt16
                name = &lt;span class="str"&gt;"UShort"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.Int32
                name = &lt;span class="str"&gt;"Integer"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.UInt32
                name = &lt;span class="str"&gt;"UInteger"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.Int64
                name = &lt;span class="str"&gt;"Long"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.UInt64
                name = &lt;span class="str"&gt;"ULong"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Single&lt;/span&gt;
                name = &lt;span class="str"&gt;"Single"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Double&lt;/span&gt;
                name = &lt;span class="str"&gt;"Double"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;Decimal&lt;/span&gt;
                name = &lt;span class="str"&gt;"Decimal"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.DateTime
                name = &lt;span class="str"&gt;"Date"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; TypeCode.&lt;span class="kwrd"&gt;String&lt;/span&gt;
                name = &lt;span class="str"&gt;"String"&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
            &lt;span class="kwrd"&gt;Case&lt;/span&gt; &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                &lt;span class="kwrd"&gt;If&lt;/span&gt; IsGenericParameter(typ) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                    name = typ.Name
                &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; fullName1 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; str6 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Dim&lt;/span&gt; genericArgsSuffix &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt; = GetGenericArgsSuffix(typ)
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; fullName &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        &lt;span class="kwrd"&gt;If&lt;/span&gt; typ.IsNested &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                            str6 = VBFriendlyNameOfType(typ.DeclaringType, &lt;span class="kwrd"&gt;True&lt;/span&gt;)
                            fullName1 = typ.Name
                        &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                            fullName1 = typ.FullName
                        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                        fullName1 = typ.Name
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; (&lt;span class="kwrd"&gt;Not&lt;/span&gt; genericArgsSuffix &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; length &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = fullName1.LastIndexOf(&lt;span class="str"&gt;"`"&lt;/span&gt;c)
                        &lt;span class="kwrd"&gt;If&lt;/span&gt; (length &amp;lt;&amp;gt; -1) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                            fullName1 = fullName1.Substring(0, length)
                        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                        name = (fullName1 &amp;amp; genericArgsSuffix)
                    &lt;span class="kwrd"&gt;Else&lt;/span&gt;
                        name = fullName1
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                    &lt;span class="kwrd"&gt;If&lt;/span&gt; (&lt;span class="kwrd"&gt;Not&lt;/span&gt; str6 &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                        name = (str6 &amp;amp; &lt;span class="str"&gt;"."&lt;/span&gt; &amp;amp; name)
                    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
                &lt;span class="kwrd"&gt;Exit&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Select&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (&lt;span class="kwrd"&gt;Not&lt;/span&gt; arraySuffixAndElementType &lt;span class="kwrd"&gt;Is&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            name = (name &amp;amp; arraySuffixAndElementType)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; name
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &lt;span class="kwrd"&gt;Friend&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; IsGenericParameter(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; Type &lt;span class="kwrd"&gt;As&lt;/span&gt; Type) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Boolean&lt;/span&gt;
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; Type.IsGenericParameter
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetArraySuffixAndElementType(&lt;span class="kwrd"&gt;ByRef&lt;/span&gt; typ &lt;span class="kwrd"&gt;As&lt;/span&gt; Type) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; typ.IsArray &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; builder &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.Text.StringBuilder
        &lt;span class="kwrd"&gt;Do&lt;/span&gt;
            builder.Append(&lt;span class="str"&gt;"("&lt;/span&gt;)
            builder.Append(&lt;span class="str"&gt;","&lt;/span&gt;c, (typ.GetArrayRank - 1))
            builder.Append(&lt;span class="str"&gt;")"&lt;/span&gt;)
            typ = typ.GetElementType
        &lt;span class="kwrd"&gt;Loop&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; typ.IsArray
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; builder.ToString
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
    &lt;span class="kwrd"&gt;Private&lt;/span&gt; &lt;span class="kwrd"&gt;Shared&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt; GetGenericArgsSuffix(&lt;span class="kwrd"&gt;ByVal&lt;/span&gt; typ &lt;span class="kwrd"&gt;As&lt;/span&gt; Type) &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;String&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; &lt;span class="kwrd"&gt;Not&lt;/span&gt; typ.IsGenericType &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; genericArguments &lt;span class="kwrd"&gt;As&lt;/span&gt; Type() = typ.GetGenericArguments
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; length &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = genericArguments.Length
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num2 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = length
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (typ.IsNested &lt;span class="kwrd"&gt;AndAlso&lt;/span&gt; typ.DeclaringType.IsGenericType) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            num2 = (num2 - typ.DeclaringType.GetGenericArguments.Length)
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;If&lt;/span&gt; (num2 = 0) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
            &lt;span class="kwrd"&gt;Return&lt;/span&gt; &lt;span class="kwrd"&gt;Nothing&lt;/span&gt;
        &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; builder &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; System.Text.StringBuilder
        builder.Append(&lt;span class="str"&gt;"(Of "&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; num4 &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = (length - 1)
        &lt;span class="kwrd"&gt;Dim&lt;/span&gt; i &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Integer&lt;/span&gt; = (length - num2)
        &lt;span class="kwrd"&gt;Do&lt;/span&gt; &lt;span class="kwrd"&gt;While&lt;/span&gt; (i &amp;lt;= num4)
            builder.Append(VBFriendlyNameOfType(genericArguments(i), &lt;span class="kwrd"&gt;False&lt;/span&gt;))
            &lt;span class="kwrd"&gt;If&lt;/span&gt; (i &amp;lt;&amp;gt; (length - 1)) &lt;span class="kwrd"&gt;Then&lt;/span&gt;
                builder.Append(&lt;span class="str"&gt;","&lt;/span&gt;c)
            &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;
            i += 1
        &lt;span class="kwrd"&gt;Loop&lt;/span&gt;
        builder.Append(&lt;span class="str"&gt;")"&lt;/span&gt;)
        &lt;span class="kwrd"&gt;Return&lt;/span&gt; builder.ToString
    &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Function&lt;/span&gt;
&lt;br&gt;
&lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;Class&lt;/span&gt;
&lt;/pre&gt;&lt;img src ="http://blogs.wankuma.com/naoko/aggbug/117692.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>