0

バックグラウンドで実行したい小さなチェッカーアプリを作成しています。特定のプロセスが実行されていることを確認する単純なタイマーがありますが、これを Alt-Tab スイッチャーから非表示にしたいので、タスクリストが可能ですそれも。Microsoft のコードに遭遇しましたが、それは 2003 年のものであり、最新バージョンの VB.Net では動作しなくなりました。次のエラーが表示されます。

OwnerhWnd = GetWindow(Me.hWnd, GW_OWNER)

私はそれをオンラインで調べ、人々が言っ​​たことのいくつかに従いましたが、役に立ちませんでした. 多くの人が Me.Handle を使用して他の人に提案しましたが、これも機能しませんでした。同じエラーが発生し続けるだけです:

A first chance exception of type 'System.DllNotFoundException' occurred in Checkr.exe

提供されるコードは次のとおりです。

Public Class Form1

  Declare Function ShowWindow Lib "User" (ByVal hWnd As Integer,
  ByVal nCmdShow As Integer) As Integer
  Declare Function GetWindow Lib "User" (ByVal hWnd As Integer,
  ByVal wCmd As Integer) As Integer
  Const SW_HIDE = 0
  Const GW_OWNER = 4

Sub Form_Load ()
  Dim OwnerhWnd As Integer
  Dim ret As Integer

  ' Make sure the form is invisible:
  form1.Visible = False

  ' Set interval for timer for 5 seconds, and make sure it is enabled:
  timer1.Interval = 5000
  timer1.Enabled = True

  ' Grab the background or owner window:
  OwnerhWnd = GetWindow(Me.hWnd, GW_OWNER)
  ' Hide from task list:
  ret = ShowWindow(OwnerhWnd, SW_HIDE)

End Sub


Sub Timer1_Timer ()
  Dim ret As Integer
  ' Display a message box:
ret = MsgBox("Visible by Alt+Tab. Cancel to Quit", 1, "Invisible Form")
  ' If cancel clicked, end the program:
  If ret = 2 Then
     timer1.Enabled = False
     Unload Me
     End
  End If
End Sub

元の Microsoft の記事は、こちらから参照できます。

4

3 に答える 3

0

フォームの Load イベントでこれを試してください:

Call SetWindowLong(Me.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW)

次の名前空間をインポートする必要があります。

Imports System.Runtime.InteropServices

この user32 関数を追加するだけでなく、

<DllImport("user32.dll", _
EntryPoint:="SetWindowLong")> _
Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, _
                                     ByVal nIndex As Integer, _
                                     ByVal dwNewLong As Integer) _
                                 As Integer
End Function

また、WS_EX_TOOLWINDOW と GWL_EXSTYLE の定数を宣言する必要があります。

Dim WS_EX_TOOLWINDOW as Integer = &H80
Dim GWL_EXSTYLE as Integer = -20

これで、タスク バーと alt-tab メニューの両方からフォームが非表示になります。これについて詳しくは、http ://www.pinvoke.net/default.aspx/Enums/WindowStylesEx.html をご覧ください。

他の定数は同じサイトにありますが、残念ながらこれ以上リンクを投稿することはできません。うまくいけば、これはあなたの質問に答えます (まだ答えられていない場合)!

于 2015-05-18T08:18:58.063 に答える