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