none
陣列或IF問題 符合任意條件則執行 RRS feed

  • 問題

  • 問題1:
    請問要讓以下任意條件成立的話就執行送出按鍵
    要怎麼修改?

    問題2:
    Findwindows可否用開始於或是結束於特定關鍵字
    (若是不同性質不能同時發問我再另開主題,在此說聲對不起)

            Dim Meeting(3) As Long
            Meeting(0) = FindWindow(vbNullString, "電話 來自 會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(1) = FindWindow(vbNullString, "電話 來自 會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(2) = FindWindow(vbNullString, "電話 來自 會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(3) = FindWindow(vbNullString, "電話 來自 會議室-4。請按 Windows 按鍵加 A 即可接受。")
    
            If Meeting(??) = 0 Then
                Label1.Text = "偵測到視窗"
                keybd_event(91, 0, 0, 0) '按下Win
                keybd_event(Asc("A"), 0, 0, 0) '按下A
                keybd_event(Asc("A"), 0, 2, 0) '放開A
                keybd_event(91, 0, 2, 0) '放開Win
            Else
                Label1.Text = "--------------"
            End If



    • 已編輯 X Z 2012年5月8日 上午 03:53
    2012年5月8日 上午 03:52

解答

  •         Dim Meeting(2) As Long
            Meeting(0) = FindWindow(vbNullString, "1.txt - 記事本")
            Meeting(1) = FindWindow(vbNullString, "2.txt - 記事本")
            Meeting(2) = FindWindow(vbNullString, "3.txt - 記事本")
            For Each x As Long In Meeting
                If x > 0 Then '只要>0就 執行下面這行
                    MsgBox("大於0")
                    '只要一個>0就離開加下面這行
                    '   Exit For
                End If
            Next
    


    • 已編輯 HUNG-CHIN 2012年5月8日 下午 01:48
    • 已標示為解答 X Z 2012年5月9日 上午 01:03
    2012年5月8日 下午 01:38

所有回覆

  •  
    If Meeting(0) = 0 Or Meeting(1) = 0 Or Meeting(2) = 0 Or Meeting(3) = 0 Then

    • 已標示為解答 X Z 2012年5月8日 上午 04:59
    • 已取消標示為解答 X Z 2012年5月8日 上午 05:08
    2012年5月8日 上午 03:59
  • 您好

    你的程式看起來只是要針對某些特定程序按 A 鍵

    Process 類別,抓出具有關鍵字的程序,去按 A 鍵


    歡迎參觀我的Blog.NET菜鳥自救會

    2012年5月8日 上午 04:47
    版主
  • Hi Joe Hung
    不知是否為我的問題

    當只有一個的時候正常可運作

            Dim Meeting(3) As Long
            Meeting(0) = FindWindow(vbNullString, "電話 來自 會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(1) = FindWindow(vbNullString, "電話 來自 會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(2) = FindWindow(vbNullString, "電話 來自 會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(3) = FindWindow(vbNullString, "電話 來自 會議室-4。請按 Windows 按鍵加 A 即可接受。")


            'If Meeting(0) = 0 Or Meeting(1) = 0 Or Meeting(2) = 0 Or Meeting(3) = 0 Then
            If Meeting(3) = 0 Then
                Label1.Text = "--------------"
            Else
                Label1.Text = "偵測到視窗"
                keybd_event(91, 0, 0, 0) '按下Win
                keybd_event(Asc("A"), 0, 0, 0) '按下E
                keybd_event(Asc("A"), 0, 2, 0) '放開E
                keybd_event(91, 0, 2, 0) '放開Win
                'Timer1.Stop()

            End If

    若改為即無法偵測到視窗

            Dim Meeting(3) As Long
            Meeting(0) = FindWindow(vbNullString, "電話 來自 會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(1) = FindWindow(vbNullString, "電話 來自 會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(2) = FindWindow(vbNullString, "電話 來自 會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(3) = FindWindow(vbNullString, "電話 來自 會議室-4。請按 Windows 按鍵加 A 即可接受。")
    
            If Meeting(0) = 0 Or Meeting(1) = 0 Or Meeting(2) = 0 Or Meeting(3) = 0 Then
                Label1.Text = "--------------"
            Else
                Label1.Text = "偵測到視窗"
                keybd_event(91, 0, 0, 0) '按下Win
                keybd_event(Asc("A"), 0, 0, 0) '按下E
                keybd_event(Asc("A"), 0, 2, 0) '放開E
                keybd_event(91, 0, 2, 0) '放開Win
                'Timer1.Stop()
    
            End If



    • 已編輯 X Z 2012年5月8日 上午 05:20
    2012年5月8日 上午 05:13
  • 沒錯!我是希望當有人呼叫我 跳出POP視窗的時候自動按下接受
    不過程序是一直在執行..就類似MSN這樣右下角是跳出視窗
    這樣也可以嗎? 抱歉VB我算是新手

    我主要是要用在LYNC 因為她沒有自動接受只能自己想辦法弄一個

    謝謝

    2012年5月8日 上午 05:16
  • 改成

    If Meeting(0) Or Meeting(1) Or Meeting(2) Or Meeting(3) = 0 Then

    這樣就正常了 不過要是有10幾的話 不就要打很久了ˇˇ

    • 已標示為解答 X Z 2012年5月8日 上午 05:26
    • 已取消標示為解答 X Z 2012年5月8日 下午 12:16
    2012年5月8日 上午 05:26
  • [VB.NET]使用WinAPI的FindWindow判斷程式是否運行

    http://www.dotblogs.com.tw/chou/archive/2009/04/26/8180.aspx

    您是用VB6還是.Net,應該是判斷不等於0,才是有偵測到吧,您標解答的語法是錯的...

    2012年5月8日 上午 05:28
  • 改成

    If Meeting(0) Or Meeting(1) Or Meeting(2) Or Meeting(3) = 0 Then

    這樣就正常了 不過要是有10幾的話 不就要打很久了ˇˇ

    你可以用 迴圈判斷

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月8日 上午 08:14
    版主
  • Hi~ Joe Hung
    這篇我有爬到

    至於語法我測試 這樣是正常的耶?!

    我用的是VB.NET 2010  Express

    我把全部的語法貼出來 您看看有什麼錯誤或是可以改進的地方,謝謝

    Public Class Form1
        ' Get a handle to an application window.
        Declare Auto Function FindWindow Lib "USER32.DLL" ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As IntPtr
    
        ' Activate an application window.
        Declare Auto Function SetForegroundWindow Lib "USER32.DLL" _
        (ByVal hWnd As IntPtr) As Boolean
    
        Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As IntPtr, ByVal dwExtraInfo As IntPtr)
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Timer1.Start()
        End Sub
    
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            Dim hwnd As Long
            hwnd = FindWindow(vbNullString, "Microsoft Lync          ")
            If hwnd = 0 Then
                Label2.Text = "Lync 未運行"
            Else
                Label2.Text = "Lync 已運行"
            End If
    
            Dim Meeting(11) As Long
            Meeting(0) = FindWindow(vbNullString, "電話 來自 台北會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(1) = FindWindow(vbNullString, "電話 來自 台北會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(2) = FindWindow(vbNullString, "電話 來自 台北會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(3) = FindWindow(vbNullString, "電話 來自 台中會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(4) = FindWindow(vbNullString, "電話 來自 台中會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(5) = FindWindow(vbNullString, "電話 來自 台中會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(6) = FindWindow(vbNullString, "電話 來自 高雄會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(7) = FindWindow(vbNullString, "電話 來自 高雄會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(8) = FindWindow(vbNullString, "電話 來自 高雄會議室-3。請按 Windows 按鍵加 A 即可接受。")
            Meeting(9) = FindWindow(vbNullString, "電話 來自 台南會議室-1。請按 Windows 按鍵加 A 即可接受。")
            Meeting(10) = FindWindow(vbNullString, "電話 來自 台南會議室-2。請按 Windows 按鍵加 A 即可接受。")
            Meeting(11) = FindWindow(vbNullString, "電話 來自 台南會議室-3。請按 Windows 按鍵加 A 即可接受。")
    
            If Meeting(0) Or Meeting(1) Or Meeting(2) Or Meeting(3) Or Meeting(4) Or Meeting(5) Or Meeting(6) Or Meeting(7) Or Meeting(8) Or Meeting(9) Or Meeting(10) = 0 Or Meeting(11) Then
                Label1.Text = "目前尚未偵測到會議室電話撥入"
            Else
                Label1.Text = "偵測到會議室電話撥入"
                keybd_event(91, 0, 0, 0) '按下Win
                keybd_event(Asc("A"), 0, 0, 0) '按下A
                keybd_event(Asc("A"), 0, 2, 0) '放開A
                keybd_event(91, 0, 2, 0) '放開Win
                'Timer1.Stop()
    
            End If
    
        End Sub


    • 已編輯 X Z 2012年5月8日 下午 12:25
    2012年5月8日 下午 12:23
  • Hi Bill Chung

    方便的話 來個範例!

    先謝啦!!

    2012年5月8日 下午 12:24
  • Hi XZ:

    方便的話, 可否你自己先試著寫看看, 咱們再來討論 ?

    [迴圈結構 (Visual Basic)]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2012年5月8日 下午 12:30
    版主
  • Hi Bill Chung

    要是我變得出來就不用要範例了
    這幾篇都看了數次.可能是我悟性太差

    VB.NET Tutorial 15 - For Loop (Visual Basic 2008_2010)_(360p)

    VB.NET Tutorial 16 - Do While (Visual Basic 2008_2010)_(360p)

    VB.NET Tutorial 17 - Do Until (Visual Basic 2008_2010)_(360p)

    VB.NET迴圈控制

    http://blog.blueshop.com.tw/shian/articles/54042.aspx

    只能東抄西改 .從無到有 對現在的我來說太難
    不是沒努力 是連個頭都沒懂
    要是說我只能變出這樣那妳覺得還要再多打一次讓妳看到努力的結果

    For i = 0 to 11
    
    if meeting(i) = 0 than
                Label1.Text = "目前尚未偵測到會議室電話撥入"
            Else
                Label1.Text = "偵測到會議室電話撥入"
                keybd_event(91, 0, 0, 0) '按下Win
                keybd_event(Asc("A"), 0, 0, 0) '按下A
                keybd_event(Asc("A"), 0, 2, 0) '放開A
                keybd_event(91, 0, 2, 0) '放開Win
                'Timer1.Stop()
                 Exit for
            End If
    next
    

    我覺得這樣雖可能修正錯誤

    但我不確認您會不會把您一般的寫法再打一次
    這樣子這個問題我只能停留在我的思考方式

    而無法多學到一種

    謝謝


    • 已編輯 X Z 2012年5月8日 下午 01:13 修正連結
    2012年5月8日 下午 01:10
  • 你的想法很接近了, 這樣我比較容易告訴你怎麼做會比較適當.

    先來討論一下邏輯:

    (1) 先由你的程式碼來假設, 總共有 12 個判斷點. 邏輯上應該是 12 個點『都』是  0 的狀態才顯示 "目前尚未偵測到會議室電話撥入" 對不對 ?

    (2) 如果我在 (1) 的說法是成立的, 那表示只要 12 個點有其中一個不為 0, 狀態就要顯示  "偵測到會議室電話撥入" 吧 ?

    我想先知道上面的猜測是不是對的? 這樣我就可以進行下一步, 不然可能會錯在邏輯.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年5月8日 下午 01:27
    版主
  •         Dim Meeting(2) As Long
            Meeting(0) = FindWindow(vbNullString, "1.txt - 記事本")
            Meeting(1) = FindWindow(vbNullString, "2.txt - 記事本")
            Meeting(2) = FindWindow(vbNullString, "3.txt - 記事本")
            For Each x As Long In Meeting
                If x > 0 Then '只要>0就 執行下面這行
                    MsgBox("大於0")
                    '只要一個>0就離開加下面這行
                    '   Exit For
                End If
            Next
    


    • 已編輯 HUNG-CHIN 2012年5月8日 下午 01:48
    • 已標示為解答 X Z 2012年5月9日 上午 01:03
    2012年5月8日 下午 01:38
  • Hi Bill~~

    (1) 先由你的程式碼來假設, 總共有 12 個判斷點. 邏輯上應該是 12 個點『都』是  0 的狀態才顯示 "目前尚未偵測到會議室電話撥入" 對不對 ?
    ANS: 可以這麼說

    (2) 如果我在 (1) 的說法是成立的, 那表示只要 12 個點有其中一個不為 0, 狀態就要顯示  "偵測到會議室電話撥入" 吧 ?
    ANS: 沒錯我是這個想法 所以用OR

    2012年5月9日 上午 12:48
  • Hi Hung Chin

    謝謝 可以了

            For Each x As Long In Meeting
                If x = 0 Then
                    Label1.Text = "目前尚未偵測到會議室電話撥入"
                Else
                    Label1.Text = "偵測到會議室電話撥入"
                    keybd_event(91, 0, 0, 0) '按下Win
                    keybd_event(Asc("A"), 0, 0, 0) '按下E
                    keybd_event(Asc("A"), 0, 2, 0) '放開E
                    keybd_event(91, 0, 2, 0) '放開Win
                    Exit For
                    'Timer1.Stop()
                End If
            Next

    2012年5月9日 上午 01:03
  • 謝謝幫忙的各位

    讓我又多進步了...

    這東西不是工作(上不了臺面的東西)

    也不是作業(怎麼看也不會有這種作業)

    只是想因為自己的懶(滑鼠移動到右下角點一下)而多學點東西..

    再次感謝



    • 已編輯 X Z 2012年5月9日 上午 01:11
    2012年5月9日 上午 01:08