[VB to C#]求高手将此vb代码翻译成c#的

vpoint2009 2010-10-13 07:34:06
源文章来自:
http://www.cnblogs.com/rainstormmaster/archive/2006/01/24/322759.html

网上搜了半天就找到一篇此类文章,看不懂vb代码,谁能帮忙翻译成c#,感激不尽~~~(或者推荐个此类文章也行)
我想用c#监测窗口和程序的打开。



模块代码:
Option Explicit
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
ByVal lpPrevWndFunc As Long, ByVal Hwnd As Long, _
ByVal msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
ByVal Hwnd As Long, ByVal lpString As String, _
ByVal cch As Long) As Long

Private Declare Function RegisterWindowMessage Lib "user32" Alias _
"RegisterWindowMessageA" (ByVal lpString As String) As Long


Private Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function RegisterShellHook Lib "Shell32" Alias "#181" _
(ByVal Hwnd As Long, ByVal nAction As Long) As Long

Private Declare Function RegisterShellHookWindow Lib "user32" _
(ByVal Hwnd As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" ( _
ByVal Hwnd As Long, _
lpdwProcessId As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" ( _
ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function EnumProcessModules Lib "psapi.dll" ( _
ByVal hProcess As Long, _
ByRef lphModule As Long, _
ByVal cb As Long, _
ByRef lpcbNeeded As Long) As Long

Private Declare Function GetModuleFileNameEx Lib "psapi.dll" _
Alias "GetModuleFileNameExA" ( _
ByVal hProcess As Long, _
ByVal hModule As Long, _
ByVal lpFilename As String, _
ByVal nSize As Long) As Long

Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)

Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_READ = 16

Private Const HSHELL_WINDOWCREATED = 1
Private Const HSHELL_WINDOWDESTROYED = 2
Private Const HSHELL_ACTIVATESHELLWINDOW = 3
Private Const HSHELL_WINDOWACTIVATED = 4
Private Const HSHELL_GETMINRECT = 5
Private Const HSHELL_REDRAW = 6
Private Const HSHELL_TASKMAN = 7
Private Const HSHELL_LANGUAGE = 8

Private Const WM_NCDESTROY = &H82

Private Const GWL_WNDPROC = -4

Private Const WH_SHELL = 10
Private Const WH_CBT As Long = 5

Private Const GW_OWNER = 4
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_TOOLWINDOW = &H80
Private Const WS_EX_APPWINDOW = &H40000

Private Const RSH_DEREGISTER = 0
Private Const RSH_REGISTER = 1
Private Const RSH_REGISTER_PROGMAN = 2
Private Const RSH_REGISTER_TASKMAN = 3


Private lpPrevWndProc As Long
Public msgShellHook As Long

Public Sub Unhook(Hwnd As Long)
'Call RegisterShellHook(Hwnd, RSH_DEREGISTER)
SetWindowLong Hwnd, GWL_WNDPROC, lpPrevWndProc
End Sub

Public Sub StartHook(Hwnd As Long)
msgShellHook = RegisterWindowMessage("SHELLHOOK")
Dim hLibShell As Long

RegisterShellHookWindow Hwnd
'Call RegisterShellHook(Hwnd, RSH_REGISTER Or RSH_REGISTER_TASKMAN Or RSH_REGISTER_PROGMAN)
lpPrevWndProc = SetWindowLong(Hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Private Function WindowProc(ByVal Hwnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_NCDESTROY
Unhook Hwnd
Case msgShellHook
Select Case wParam
Case HSHELL_WINDOWCREATED
AddCREATEDstr lParam
'Case HSHELL_WINDOWDESTROYED
'这里没有用,想用的话,添加你的代码
'Case HSHELL_REDRAW
'这里没有用,想用的话,添加你的代码
'Case HSHELL_WINDOWACTIVATED
'这里没有用,想用的话,添加你的代码
'Case HSHELL_GETMINRECT
'这里没有用,想用的话,添加你的代码
'Case HSHELL_REDRAW
'这里没有用,想用的话,添加你的代码
'Case HSHELL_TASKMAN
'这里没有用,想用的话,添加你的代码
'Case HSHELL_LANGUAGE
'这里没有用,想用的话,添加你的代码
End Select
End Select
WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, uMsg, wParam, lParam)
End Function

Private Function GetEXEFromHandle(Optional ByVal nHWnd As Long = 0) As String
Dim nProcID As Long
Dim nResult As Long
Dim nTemp As Long
Dim lModules(1 To 200) As Long
Dim sFile As String
Dim hProcess As Long '
If nHWnd = 0 Then nHWnd = GetForegroundWindow()
If GetWindowThreadProcessId(nHWnd, nProcID) <> 0 Then
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or _
PROCESS_VM_READ, 0, nProcID)
If hProcess <> 0 Then
nResult = EnumProcessModules(hProcess, lModules(1), _
200, nTemp)
If nResult <> 0 Then
sFile = Space$(260)
nResult = GetModuleFileNameEx(hProcess, 0, sFile, Len(sFile))
sFile = LCase$(Left$(sFile, nResult))
GetEXEFromHandle = sFile
End If
CloseHandle hProcess
End If
End If
End Function

Private Function GetWindowCaption(ByVal Hwnd As Long) As String
Dim MyStr As String
MyStr = String(256, Chr$(0)) '
GetWindowText Hwnd, MyStr, 256
MyStr = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1)
GetWindowCaption = MyStr

End Function

Private Sub AddCREATEDstr(ByVal Hwnd As Long)
If Hwnd = 0 Then Exit Sub
Dim s As String
s = Format(Now, "YYYY年MM月DD日 HH:MM:SS")
Dim mCaption As String
mCaption = GetWindowCaption(Hwnd)
Dim exename As String
exename = GetEXEFromHandle(Hwnd)
If mCaption <> "" And exename <> "" Then
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,标题为:" + mCaption + " 对应程序路径为:" + exename
ElseIf mCaption = "" And exename <> "" Then
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,对应程序路径为:" + exename
ElseIf mCaption <> "" And exename = "" Then
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,标题为:" + mCaption
ElseIf mCaption = "" And exename = "" Then
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建"
End If
Form1.List1.AddItem s
End Sub

窗体代码:
Option Explicit

Private Sub Form_Load()
StartHook Me.Hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
Unhook Me.Hwnd
End Sub

Private Sub Form_Resize()
List1.Move 0, 0, ScaleWidth, ScaleHeight
End Sub

Private Sub List1_Click()
MsgBox List1.Text
End Sub



...全文
125 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
vpoint2009 2010-10-14
  • 打赏
  • 举报
回复
真有人转了!!!谢谢ls两位xd~~~
robbish 2010-10-13
  • 打赏
  • 举报
回复
Option Explicit
private [DllImport("GAIS", SetLastError=true)] static extern long CallWindowProc Lib "user32" Alias "CallWindowProcA" ( long lpPrevWndFunc, long Hwnd, long msg, long wParam, long lParam) {
[DllImport("GAIS", SetLastError=true)] static extern long GetProcAddress Lib "kernel32" ( long hModule, string lpProcName) {
[DllImport("GAIS", SetLastError=true)] static extern long LoadLibrary Lib "kernel32" Alias "LoadLibraryA" ( string lpLibFileName) {
private [DllImport("GAIS", SetLastError=true)] static extern long GetWindowText Lib "user32" Alias "GetWindowTextA" ( long Hwnd, string lpString, long cch) {

private [DllImport("GAIS", SetLastError=true)] static extern long RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" ( string lpString) {


private [DllImport("GAIS", SetLastError=true)] static extern long SetWindowLong Lib "user32" Alias "SetWindowLongA" ( long Hwnd, long nIndex, long dwNewLong) {

private [DllImport("GAIS", SetLastError=true)] static extern long GetWindowLong Lib "user32" Alias "GetWindowLongA" ( long Hwnd, long nIndex) {
private [DllImport("GAIS", SetLastError=true)] static extern long RegisterShellHook Lib "Shell32" Alias "#181" ( long Hwnd, long nAction) {

private [DllImport("GAIS", SetLastError=true)] static extern long RegisterShellHookWindow Lib "user32" ( long Hwnd) {
private [DllImport("GAIS", SetLastError=true)] static extern long GetForegroundWindow Lib "user32" () {

private [DllImport("GAIS", SetLastError=true)] static extern long GetWindowThreadProcessId Lib "user32" ( long Hwnd, long lpdwProcessId) {

private [DllImport("GAIS", SetLastError=true)] static extern long OpenProcess Lib "kernel32" ( long dwDesiredAccess, long bInheritHandle, long dwProcessId) {

private [DllImport("GAIS", SetLastError=true)] static extern long EnumProcessModules Lib "psapi.dll" ( long hProcess, ref long lphModule, long cb, ref long lpcbNeeded) {

private [DllImport("GAIS", SetLastError=true)] static extern long GetModuleFileNameEx Lib "psapi.dll" Alias "GetModuleFileNameExA" ( long hProcess, long hModule, string lpFilename, long nSize) {

private [DllImport("GAIS", SetLastError=true)] static extern void CloseHandle Lib "kernel32" ( long hPass) {

private const PROCESS_QUERY_INFORMATION = 1024
private const PROCESS_VM_READ = 16

private const HSHELL_WINDOWCREATED = 1
private const HSHELL_WINDOWDESTROYED = 2
private const HSHELL_ACTIVATESHELLWINDOW = 3
private const HSHELL_WINDOWACTIVATED = 4
private const HSHELL_GETMINRECT = 5
private const HSHELL_REDRAW = 6
private const HSHELL_TASKMAN = 7
private const HSHELL_LANGUAGE = 8

private const WM_NCDESTROY = &H82

private const GWL_WNDPROC = -4

private const WH_SHELL = 10
private const long WH_CBT = 5;

private const GW_OWNER = 4
private const GWL_EXSTYLE = (-20)
private const WS_EX_TOOLWINDOW = &H80
private const WS_EX_APPWINDOW = &H40000

private const RSH_DEREGISTER = 0
private const RSH_REGISTER = 1
private const RSH_REGISTER_PROGMAN = 2
private const RSH_REGISTER_TASKMAN = 3


private long lpPrevWndProc;
public long msgShellHook;

public void Unhook(long Hwnd) {
//Call RegisterShellHook(Hwnd, RSH_DEREGISTER)
SetWindowLong Hwnd, GWL_WNDPROC, lpPrevWndProc
}

public void StartHook(long Hwnd) {
msgShellHook = RegisterWindowMessage("SHELLHOOK");
long hLibShell;

RegisterShellHookWindow Hwnd;
//Call RegisterShellHook(Hwnd, RSH_REGISTER || RSH_REGISTER_TASKMAN || RSH_REGISTER_PROGMAN)
lpPrevWndProc = SetWindowLong(Hwnd, GWL_WNDPROC, delegate(GAIS) WindowProc);
}

private long WindowProc( long Hwnd, long uMsg, long wParam, long lParam) {
switch (GAIS) { uMsg;
case WM_NCDESTROY;
Unhook Hwnd;
case msgShellHook;
switch (GAIS) { wParam;
case HSHELL_WINDOWCREATED;
AddCREATEDstr lParam;
//case HSHELL_WINDOWDESTROYED
//这里没有用,想用的话,添加你的代码
//case HSHELL_REDRAW
//这里没有用,想用的话,添加你的代码
//case HSHELL_WINDOWACTIVATED
//这里没有用,想用的话,添加你的代码
//case HSHELL_GETMINRECT
//这里没有用,想用的话,添加你的代码
//case HSHELL_REDRAW
//这里没有用,想用的话,添加你的代码
//case HSHELL_TASKMAN
//这里没有用,想用的话,添加你的代码
//case HSHELL_LANGUAGE
//这里没有用,想用的话,添加你的代码
}
}
WindowProc = CallWindowProc(lpPrevWndProc, Hwnd, uMsg, wParam, lParam);
}

private string GetEXEFromHandle(Optional long nHWnd = 0) {
long nProcID;
long nResult;
long nTemp;
lModules(1 ; GAIS <= long 200);
string sFile;
long hProcess //;
if ( nHWnd = 0 ) { nHWnd = GetForegroundWindow()
if ( GetWindowThreadProcessId(nHWnd, nProcID) != 0 ) {
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION || PROCESS_VM_READ, 0, nProcID);
if ( hProcess != 0 ) {
nResult = EnumProcessModules(hProcess, lModules(1), 200, nTemp);
if ( nResult != 0 ) {
sFile = Space$(260);
nResult = GetModuleFileNameEx(hProcess, 0, sFile, Len(sFile));
sFile = LCase$(Left$(sFile, nResult));
GetEXEFromHandle = sFile
}
CloseHandle hProcess;
}
}
}

private string GetWindowCaption( long Hwnd) {
string MyStr;
MyStr = string (256, Chr$(0)) //;
GetWindowText Hwnd, MyStr, 256
MyStr = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1);
GetWindowCaption = MyStr

}

private void AddCREATEDstr( long Hwnd) {
if ( Hwnd = 0 ) { return
string s;
s = Format(Now, "YYYY年MM月DD日 HH:MM:SS");
string mCaption;
mCaption = GetWindowCaption(Hwnd);
string exename;
exename = GetEXEFromHandle(Hwnd);
if ( mCaption != "" && exename != "" ) {
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,标题为:" + mCaption + " 对应程序路径为:" + exename;
} else if ( mCaption = "" && exename != "" ) {
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,对应程序路径为:" + exename;
} else if ( mCaption != "" && exename = "" ) {
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建,标题为:" + mCaption;
} else if ( mCaption = "" && exename = "" ) {
s = s + " 句柄为:" + CStr(Hwnd) + " 的窗口被创建";
}
Form1.List1.AddItem s
}

窗体代码:;
Option Explicit

private void Form_Load() {
StartHook this.Hwnd;
}

private void Form_Unload(int Cancel) {
Unhook this.Hwnd;
}

private void Form_Resize() {
List1.Move 0, 0, ScaleWidth, ScaleHeight;
}

private void List1_Click() {
MsgBox List1.Text;
}
用一个叫vb2c#转的,我也不知道对不对,供参考
水哥阿乐 2010-10-13
  • 打赏
  • 举报
回复
你这个是VB6的代码要转到C#.net隔了一个档比较麻烦。参考一下这篇吧
http://topic.csdn.net/u/20100521/17/dbc2d987-9d63-4b03-b5fa-348eb3fdf1c8.html?43525

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧