当前位置: 代码迷 >> Delphi >> 求一段delphi代码转C#代码,用,可人民币支付,多谢
  详细解决方案

求一段delphi代码转C#代码,用,可人民币支付,多谢

热度:9564   发布时间:2013-02-25 00:00:00.0
求一段delphi代码转C#代码,急用,可人民币支付,谢谢
急用。联系QQ:8775262,谢谢。

需要进行DllImport的地方直接写DLLImport.方法名。
如:DLLImport.GlobalAddAtom(……);


文件:UShare.pas

Delphi(Pascal) code
unit UShare;interfaceuses Windows, Messages;const  cMapFileName = 'HookSG_SharedData';const  CM_MSGWNDCREATED = WM_USER + 1000;  CM_QUERYROW      = WM_USER + 1001;  CM_QUERYCOL      = WM_USER + 1002;  CM_HOOKCELL      = WM_USER + 1003;type  PShareData = ^TShareData;  TShareData = record    hkMsg: HHook;    HostPID: DWORD;    HostWnd: HWND;    DestWnd: HWND;    MsgWnd: HWND;    Text: array[0..1024] of Char;  end;var  hMapFile: THandle;  P: PShareData;implementationend.



文件:UHook.pas:

Delphi(Pascal) code
unit UHook;interfaceuses Windows, Messages, SysUtils, Controls, Grids;procedure InstallHook(MainWnd, DestWnd: HWND); stdcall;procedure UninstallHook; stdcall;function GetHookedCell: PChar; stdcall;implementationuses UShare;var  ControlAtom: TAtom;  ControlAtomString: string;  RM_GetObjectInstance: DWORD;  // registered window messagefunction FindControl(Handle: HWnd): TWinControl;var  OwningProcess: DWORD;begin  Result := nil;  if (Handle <> 0) and (GetWindowThreadProcessID(Handle, OwningProcess) <> 0) and     (OwningProcess = GetCurrentProcessId) then  begin    if GlobalFindAtom(PChar(ControlAtomString)) = ControlAtom then      Result := Pointer(GetProp(Handle, MakeIntAtom(ControlAtom)))    else      Result := Pointer(SendMessage(Handle, RM_GetObjectInstance, 0, 0));  end;end;function MsgWndProc(hwnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;var  SG: TStringGrid;  X, Y: Integer;begin  case Msg of    CM_QUERYROW:      begin        Result := -1;        if P^.DestWnd <> 0 then        begin          SG := Pointer(FindControl(P^.DestWnd));          if SG <> nil then Result := SG.RowCount;        end;        Exit;      end;    CM_QUERYCOL:      begin        Result := -1;        if P^.DestWnd <> 0 then        begin          SG := Pointer(FindControl(P^.DestWnd));          if SG <> nil then Result := SG.ColCount;        end;        Exit;      end;    CM_HOOKCELL:      begin        Result := -1;        P^.Text[0] := #0;        if P^.DestWnd <> 0 then        begin          SG := Pointer(FindControl(P^.DestWnd));          if SG <> nil then          begin            X := WParam;            Y := LParam;            if (X >= 0) and (X < SG.ColCount) and (Y >= 0) and (Y < SG.RowCount) then            begin              Result := Length(SG.Cells[X, Y]);              if Result > 0 then              begin                StrPLCopy(P^.Text, SG.Cells[X, Y], 1024);              end;            end;          end;        end;        Exit;      end;  end;  Result := DefWindowProc(hwnd, Msg, WParam, LParam);end;function GetMsgProc(Code: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;begin  if Code = HC_ACTION then  begin  end;  Result := CallNextHookEx(P^.hkMsg, Code, WParam, LParam);end;procedure InstallHook(MainWnd, DestWnd: HWND); stdcall;begin  if P^.hkMsg = 0 then    P^.hkMsg := SetWindowsHookEx(WH_GETMESSAGE, @GetMsgProc, HInstance, 0);  P^.HostWnd := MainWnd;  P^.HostPID := GetCurrentProcessId;  P^.DestWnd := DestWnd;end;procedure UninstallHook; stdcall;begin  if P^.hkMsg <> 0 then  begin    UnhookWindowsHookEx(P^.hkMsg);    P^.hkMsg := 0;  end;end;function GetHookedCell: PChar; stdcall;begin  Result := P^.Text;end;var  DoClear: Boolean;  DestPID: DWORD;  DestProcess: Boolean = False;  UtilWindowClass: TWndClass = (    style: 0;    lpfnWndProc: @MsgWndProc;    cbClsExtra: 0;    cbWndExtra: 0;    hInstance: 0;    hIcon: 0;    hCursor: 0;    hbrBackground: 0;    lpszMenuName: nil;    lpszClassName: 'THookSGMsgWindow');initialization  hMapFile := OpenFileMapping(FILE_MAP_WRITE, False, cMapFileName);  DoClear := hMapFile = 0;  if hMapFile = 0 then    hMapFile := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE,      0, SizeOf(TShareData), cMapFileName);  P := MapViewOfFile(hMapFile, FILE_MAP_WRITE, 0, 0, 0);  if DoClear then FillChar(P^, SizeOf(TShareData), 0);  ControlAtomString := Format('ControlOfs%.8X%.8X', [GetModuleHandle(nil), GetCurrentThreadID]);  ControlAtom := GlobalAddAtom(PChar(ControlAtomString));  RM_GetObjectInstance := RegisterWindowMessage(PChar(ControlAtomString));  if P^.DestWnd <> 0 then  begin    GetWindowThreadProcessId(P^.DestWnd, DestPID);    if DestPID = GetCurrentProcessId then    begin      DestProcess := True;      UtilWindowClass.hInstance := HInstance;      RegisterClass(UtilWindowClass);      P^.MsgWnd := CreateWindowEx(        WS_EX_TOOLWINDOW,              // extended window style        UtilWindowClass.lpszClassName, // pointer to registered class name        UtilWindowClass.lpszClassName, // pointer to window name        WS_POPUP,                      // window style        0,                             // horizontal position of window        0,                             // vertical position of window        0,                             // window width        0,                             // window height        0,                             // handle to parent or owner window        0,                             // handle to menu, or child-window identifier        HInstance,                     // handle to application instance        nil);                          // pointer to window-creation data      PostMessage(P^.HostWnd, CM_MSGWNDCREATED, P^.MsgWnd, 1);    end;  end;finalization  if DestProcess then  begin    DestroyWindow(P^.MsgWnd);    PostMessage(P^.HostWnd, CM_MSGWNDCREATED, P^.MsgWnd, 0);  end;  GlobalDeleteAtom(ControlAtom);  ControlAtomString := '';  UnmapViewOfFile(P);  CloseHandle(hMapFile);end.
  相关解决方案