none
VB.NET的MenuItem物件及Process.Start方法的疑問 RRS feed

  • 問題

  • 1.我的ppc2003使用vs2008 vb.net的.NET Framwork 3.5做程式開發,其中MenuItem物件在下拉式功能表的第一層,其Click,Popup方法均可正常動作,但如果有第三層的MenuItem,其第二層的Click,Popup方法均無反應,但如果將設備變更為wince設備時,又無此問題,請問有人知道如何解決嗎???

    2.我在ppc2003或wm5,6設備中使用Process.Start方法,如果執行5次,除第1次會啟動程式,其餘4次均為將程式移至螢幕最前面,但相同方式wince設備卻會啟動同一程式5次,請問要如何使wince設備只啟動程式1次,我在http://www.dotblogs.com.tw/chou/archive/2009/04/26/8180.aspx 中看到[VB.NET]使用WinAPI的FindWindow判斷程式是否運行 ,但wince設備好像不支援,請問有人知道如何解決嗎???

    謝謝!!

    2012年8月29日 上午 08:46

解答

所有回覆

  • 1) 功能表本來就只有最後一層才能反應Click操作

    2) Windows CE自1.0版之後就有支援FindWindow函數

    2012年8月30日 上午 06:02
    • 已標示為解答 小小何 2012年8月30日 上午 09:44
    2012年8月30日 上午 06:13
  • 在cDeviceID.vb模組中新增

        Public Const SWP_NOSIZE As Integer = &H1
        Public Const SWP_NOMOVE As Integer = &H2
        Public Const SWP_NOZORDER As Integer = &H4
        Public Const SWP_NOREDRAW As Integer = &H8
        Public Const SWP_NOACTIVATE As Integer = &H10
        Public Const SWP_DRAWFRAME As Integer = &H20
        Public Const SWP_FRAMECHANGED As Integer = &H20
        Public Const SWP_SHOWWINDOW As Integer = &H40
        Public Const SWP_HIDEWINDOW As Integer = &H80
        Public Const SWP_NOCOPYBITS As Integer = &H100
        Public Const SWP_NOOWNERZORDER As Integer = &H200
        Public Const SWP_NOREPOSITION As Integer = &H200
        Public Const SWP_NOSENDCHANGING As Integer = &H400
        Public Const SWP_DEFERERASE As Integer = &H2000
        Public Const SWP_ASYNCWINDOWPOS As Integer = &H4000
        Public Declare Function FindWindow Lib "Coredll" Alias "FindWindowW" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr

    在表單載入sub中填入

    Private Sub survey_total_job_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim hwd1 As IntPtr = cDeviceID.FindWindow(vbNullString, "儀器設定")
            If hwd1.Equals(IntPtr.Zero) Then
                MsgBox("儀器設定程式未運行")
            Else
                MsgBox("儀器設定程式已運行")
            End If

    End Sub

    如此確實可在wince設備中檢查"儀器設定"表單的程式是否被開啟,感謝this,Joe Hung兩位熱心的解答。

    上面方式我也是亂槍打鳥亂試一通,居然讓我試出來了,我自己都很意外,現在如果檢查到程式已運行,我好像需要setforegroundwindow將其顯示在最前,請問是否也是要宣告一堆的常數.謝謝!!

    2012年8月30日 上午 10:31