1个问题:已知vb执行程序名:xxx.exe ,但我不知其是否在运行?我想根据这个程序名来判断:他是否运行?如运行,进程号是多少?主窗体句柄如何得到?
2个问题:我想用api函数,在一个没有menu控件的form上,直接创建菜单,子菜单,菜单项,如:用createmenu,insertmenu,insertmenuitem等函数来如何创建?
请高手执教?
谢谢
yong

解决方案 »

  1.   

    2.
    Option ExplicitConst MF_CHECKED = &H8&
    Const MF_APPEND = &H100&
    Const TPM_LEFTALIGN = &H0&
    Const MF_DISABLED = &H2&
    Const MF_GRAYED = &H1&
    Const MF_SEPARATOR = &H800&
    Const MF_STRING = &H0&
    Const TPM_RETURNCMD = &H100&
    Const TPM_RIGHTBUTTON = &H2&
    Private Type POINTAPI
           x  As Long
           y  As Long
    End Type
    Private Declare Function CreatePopupMenu Lib "user32" () As Long
    Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal HWnd As Long, ByVal lptpm As Any) As Long
    Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
    Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Dim hMenu   As LongPrivate Sub Form_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
           Dim Pt   As POINTAPI
           Dim ret   As Long
           hMenu = CreatePopupMenu()
           AppendMenu hMenu, MF_STRING, 1, "Hello  !"
           AppendMenu hMenu, MF_GRAYED Or MF_DISABLED, 2, "Testing  ..."
           AppendMenu hMenu, MF_SEPARATOR, 3, ByVal 0&
           AppendMenu hMenu, MF_CHECKED, 4, "TrackPopupMenu"
           GetCursorPos Pt
           ret = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD Or TPM_RIGHTBUTTON, Pt.x, Pt.y, Me.HWnd, ByVal 0&)
           DestroyMenu hMenu
           Select Case ret
                   Case 1
                           MsgBox "Hello  !"
                   Case 4
                           MsgBox "TrackPopupMenu"
           End Select
    End Sub
      

  2.   

    1个问题:已知vb执行程序名:xxx.exe ,但我不知其是否在运行?我想根据这个程序名来判断:他是否运行?如运行,进程号是多少?主窗体句柄如何得到?
     例如:我知道一程序名为 kaoqin.exe,我另外编一个主程序来判断kaoqin.exe 是否已执行?如未执行我则shell(kaoqin.exe,vbnormal) 调用他! kaoqin.exe如运行,如何得到其进程号是多少?主窗体句柄如何得到?thankks
      

  3.   

    Private Declare Function CreateToolhelp32Snapshot Lib "KERNEL32.DLL" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long用这个函数枚举进程,看kaoqin.exe是否在其中
      

  4.   

    函数枚举进程,如何看kaoqin.exe是否在其中?如何检测文件名?kefou可否给详细代码?
      

  5.   

    //2个问题:我想用api函数,在一个没有menu控件的form上,直接创建菜单,子菜单,菜单项,如:用createmenu,insertmenu,insertmenuitem等函数来如何创建?
    请高手执教?创建没问题,可是对事件的处理太麻烦了,如果一定要这么做的话,请跟贴回复//1个问题:已知vb执行程序名:xxx.exe ,但我不知其是否在运行?我想根据这个程序名来判断:他是否运行?如运行,进程号是多少?主窗体句柄如何得到?只能进行枚举,以前讨论过很多次,你自己搜索一下吧
      

  6.   

    别人写的例子
    'Example Name: Obtaining a List of Running Processes'------------------------------------------------------------------------------'BAS Module Code 
    '------------------------------------------------------------------------------
    Option ExplicitPublic Const TH32CS_SNAPPROCESS As Long = 2&
    Public Const MAX_PATH As Long = 260Public Type PROCESSENTRY32
        dwSize As Long
        cntUsage As Long
        th32ProcessID As Long
        th32DefaultHeapID As Long
        th32ModuleID As Long
        cntThreads As Long
        th32ParentProcessID As Long
        pcPriClassBase As Long
        dwFlags As Long
        szExeFile As String * MAX_PATH
    End Type        
        Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" _
       (ByVal lFlags As Long, ByVal lProcessID As Long) As LongPublic Declare Function ProcessFirst Lib "kernel32" _
        Alias "Process32First" _
       (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Function ProcessNext Lib "kernel32" _
        Alias "Process32Next" _
       (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As LongPublic Declare Sub CloseHandle Lib "kernel32" _
       (ByVal hPass As Long)
    '--end block--'
     
    '------------------------------------------------------------------------------' Form Code  
    '------------------------------------------------------------------------------Option ExplicitPrivate Sub Command1_Click()    Dim hSnapShot As Long
        Dim uProcess As PROCESSENTRY32
        Dim r As Long    hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)    If hSnapShot = -1 Then Exit Sub    uProcess.dwSize = Len(uProcess)
        r = ProcessFirst(hSnapShot, uProcess)    Do While r        List1.AddItem uProcess.szExeFile
            r = ProcessNext(hSnapShot, uProcess)    Loop    Call CloseHandle(hSnapShot)End Sub
      

  7.   

    主窗体句柄,其中target_pid 为进程idFunction InstanceToWnd(ByVal target_pid As Long) As Long
        Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
        'Find the first window
        test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
        Do While test_hwnd <> 0
            'Check if the window isn't a child
            If GetParent(test_hwnd) = 0 Then
                'Get the window's thread
                test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
                If test_pid = target_pid Then
                    InstanceToWnd = test_hwnd
                    Exit Do
                End If
            End If
            'retrieve the next window
            test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
        Loop
    End Function
      

  8.   

    动态增加菜单后,如何响应其点击事件?thank s!
      

  9.   

    添加的菜单都有一个id,在窗体过程中相应wm_command消息,判断其id,再编写事件即可