现有一个ocx控件,目的是取IE客户端机器的MAC物理地址或(硬盘号\CPU号等,反正就是要取客户机上的硬件信息).
属性和方法\变量如下: var sSvrIP:string ;
implementation......function Tmyocxform.Get_svrip: OleVariant;
begin
Result := sSvrIP;end;procedure Tmyocxform.Set_svrip(Value: OleVariant);
begin
sSvrIP := Value;
end;procedure Tmyocxform.GetServerIP(out serverip: OleVariant);
begin
serverip := '12345566';
serverip := GetHDSerialNumber3('C:\');
end;现在可通过如下方法调用:
<OBJECT
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"
</OBJECT> 请赐教如果在网页上定义变量,执行GetServerIP()方法,并把取过来的值放到变量中,提交给后台数据库?
先谢了!
属性和方法\变量如下: var sSvrIP:string ;
implementation......function Tmyocxform.Get_svrip: OleVariant;
begin
Result := sSvrIP;end;procedure Tmyocxform.Set_svrip(Value: OleVariant);
begin
sSvrIP := Value;
end;procedure Tmyocxform.GetServerIP(out serverip: OleVariant);
begin
serverip := '12345566';
serverip := GetHDSerialNumber3('C:\');
end;现在可通过如下方法调用:
<OBJECT
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"
</OBJECT> 请赐教如果在网页上定义变量,执行GetServerIP()方法,并把取过来的值放到变量中,提交给后台数据库?
先谢了!
解决方案 »
- datetimepicker控件如何只取日期不取时间
- 如何覆盖.zip中的文件
- 问一个图形拓扑结构的问题,高手帮忙
- 菜鸟问题:DELPHI 7 所带的帮助,以及编程界面是中文的吗?
- 请教一个小问题,如何在程序中给按扭speedbutton换图片。
- 假设我有多个硬盘,怎样列出某个物理硬盘上所有分区的盘符是什么呢??(100分)
- delphi7编译程序时出现 field totalprofitform.qrdbchart1 does 。。。
- 请问那里有象旧版专家门诊论坛左边那种按一下可以折叠的panel控件?
- 〓 〓 〓 〓 如何获取ip地址 〓 〓 〓 〓
- 在程序中,如何屏蔽 alt + F4组合键
- 求个打开文件夹并选中指定的文件
- 用IdHTTP控件下载
id=objOCX
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"
</OBJECT>
<SCRIPT LANGUAGE="JavaScript">
var str = objOCX.GetServerIP();
alert(str);
</SCRIPT>
1、str就是MAC地址,有页面上提交到数据库。2、在OCX里写数据库。
和楼上的其实差不多,只是要变通一下,用一个页面来提交
我以ASP为例:<OBJECT
id=objOCX
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"
</OBJECT>
<script language="javascript">
var str = objOCX.GetServerIP();
window.location = ('rsv.asp?mac=' + str)
</script>
然后在rcv.asp里面处理<%
dim str
str = request("mac")
'存入数据库....
%>
当然如果你怕被别人在地址栏看到,可以用表单处理关键是<script>form.submit</script>自动提交还有form的method="post"
<html>
<head>
</head><OBJECT
id=objOCX
classid="clsid:865CE899-2F7C-4E8D-ACC7-86B3EB518530"
codebase="myocxformProj1.ocx" >
</OBJECT> <script language="javascript">
var str;
objOCX.GetServerIP(str);
alert(str);
</script> 提示错误:
行:14
字符:3
错误:对象不支持此属性或方法
代码:0
URL:http://192.168.1.30/ocx/mytest.asp
但我以服务器方式访问时:是可以的,不知道如里有错?下面是以服务器方式访问的脚本,但达不到我的目的
<% Set DelphiASPObj = Server.CreateObject("myocxformProj1.myocxform")
Dim v
DelphiASPObj.GetServerIP v
Response.Write "my ip is :" & v
Response.Write "<p>"
Response.Write "ddddddddddddd"
%>
</html>
<OBJECT
id=objOCX
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"
</OBJECT>
上面的<OBJECT是不是要封口呢,否则ASP报错呀,提示如下:错误类型:
Active Server Pages, ASP 0118 (0x80004005)
Object 块缺少对象关闭标记(</OBJECT>)或标记关闭符号(>)。
/ocx/mytest.asp, 第 6 行
id=objOCX
classid="clsid:CC721C00-9C4B-42DC-B3F6-4C78DDFD4A1E"
codebase="GetIP.ocx"><!--的确少了个尖括号-->
</OBJECT> 我告诉你这个方法,是我以前一直用的,就是在客户端利用js脚本通过OCX获取到MAC后,再发送到服务端处理。
unit myocxformProj1_TLB;
....
interfaceuses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL, Variants;
....
property svrip: OleVariant read Get_svrip write Set_svrip;
end; ImyocxformDisp = dispinterface
['{9894F483-A55B-40E9-99AA-BAA394C6C425}']
property Visible: WordBool dispid 201;
....
property svrip: OleVariant dispid 217;
procedure GetServerIP(out serverip: OleVariant); dispid 218;
end; ImyocxformEvents = dispinterface
['{5320E50F-E771-4B60-B1E0-391EF6789FE2}']
procedure OnActivate; dispid 201;
....
procedure OnPaint; dispid 208;
end;
TmyocxformOnKeyPress = procedure(ASender: TObject; var Key: Smallint) of object; Tmyocxform = class(TOleControl)
private
FOnActivate: TNotifyEvent;
...
function GetControlInterface: Imyocxform;
protected
procedure CreateControl;
procedure InitControlData; override;
function Get_svrip: OleVariant;
procedure Set_svrip(Value: OleVariant);
public
procedure GetServerIP(out serverip: OleVariant);
property svrip: OleVariant index 217 read GetOleVariantProp write SetOleVariantProp;
....
published
property Anchors;
....
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
end;procedure Register;resourcestring
dtlServerPage = 'Servers';
dtlOcxPage = 'ActiveX';
implementation
uses ComObj;
procedure Tmyocxform.InitControlData;
const
CEventDispIDs: array [0..7] of DWORD = (
$000000C9, $000000CA, $000000CB, $000000CC, $000000CD, $000000CE,
$000000CF, $000000D0);
CTFontIDs: array [0..0] of DWORD = (
$FFFFFE00);
CControlData: TControlData2 = (
ClassID: '{469718C4-3723-439A-9152-1D2CF79FD8F7}';
EventIID: '{5320E50F-E771-4B60-B1E0-391EF6789FE2}';
...
begin
ControlData := @CControlData;
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnActivate) - Cardinal(Self);
end;procedure Tmyocxform.CreateControl; procedure DoCreate;
begin
FIntf := IUnknown(OleObject) as Imyocxform;
end;begin
if FIntf = nil then DoCreate;
end;function Tmyocxform.GetControlInterface: Imyocxform;
begin
CreateControl;
Result := FIntf;
end;function Tmyocxform.Get_svrip: OleVariant;
var
InterfaceVariant : OleVariant;
begin
InterfaceVariant := DefaultInterface;
Result := InterfaceVariant.svrip;
end;procedure Tmyocxform.Set_svrip(Value: OleVariant);
begin
DefaultInterface.Set_svrip(Value);
end;procedure Tmyocxform.GetServerIP(out serverip: OleVariant);
begin
DefaultInterface.GetServerIP(serverip);
end;procedure Register;
begin
RegisterComponents(dtlOcxPage, [Tmyocxform]);
end;end.
////////////
unit myocxformImpl1;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
...
type
Tmyocxform = class(TActiveForm, Imyocxform)
private
{ Private declarations }
....
procedure PaintEvent(Sender: TObject);
protected
{ Protected declarations }
...
procedure Set_Visible(Value: WordBool); safecall;
function Get_svrip: OleVariant; safecall;
procedure Set_svrip(Value: OleVariant); safecall;
function GetHDSerialNumber3(Drv: String): String; public
{ Public declarations }
procedure Initialize; override;
procedure GetServerIP(out serverip: OleVariant); safecall;
end; var sSvrIP:string ;
implementationuses ComObj, ComServ;{$R *.DFM}{ Tmyocxform }procedure Tmyocxform.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);
begin
{ Define property pages here. Property pages are defined by calling
DefinePropertyPage with the class id of the page. For example,
DefinePropertyPage(Class_myocxformPage); }
end;procedure Tmyocxform.EventSinkChanged(const EventSink: IUnknown);
begin
FEvents := EventSink as ImyocxformEvents;
inherited EventSinkChanged(EventSink);
end;procedure Tmyocxform.Initialize;
begin
inherited Initialize;
OnActivate := ActivateEvent;
OnClick := ClickEvent;
OnCreate := CreateEvent;
OnDblClick := DblClickEvent;
OnDeactivate := DeactivateEvent;
OnDestroy := DestroyEvent;
OnKeyPress := KeyPressEvent;
OnPaint := PaintEvent;
end;
....
end;function Tmyocxform.Get_svrip: OleVariant;
begin
Result := sSvrIP;end;procedure Tmyocxform.Set_svrip(Value: OleVariant);
begin
sSvrIP := Value;
end;procedure Tmyocxform.GetServerIP(out serverip: OleVariant);
begin
serverip := '12345566';
serverip := GetHDSerialNumber3('C:\');
end;function Tmyocxform.GetHDSerialNumber3(Drv: String): String;
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
begin
if Drv[Length(Drv)] =':' then Drv := Drv + '\';
GetVolumeInformation(pChar(Drv),
nil,
0,
@VolumeSerialNumber,
MaximumComponentLength,
FileSystemFlags,
nil,
0);
Result := IntToHex(HiWord(VolumeSerialNumber), 4) +
'-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := Inttostr(VolumeSerialNumber);
end;
initialization
TActiveFormFactory.Create(
ComServer,
TActiveFormControl,
Tmyocxform,
Class_myocxform,
1,
'',
OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
tmApartment);
end.
<OBJECT
id=objOCX classid="clsid:B203FAF8-01DF-4DE7-A514-8C791B76B201" codebase="testocxformProj1.ocx">
</OBJECT> <script language="javascript">
var str;
str = objOCX.GetServerIP;
alert(str);
</script> 调用后,alert弹出框,提示undefined
unit ActiveFormImpl1;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ActiveX, AxCtrls, ActiveFormProj1_TLB, StdVcl;type
TActiveFormX = class(TActiveForm, IActiveFormX)
private
{...............略..................}
function Get_hdsn: WideString; safecall;
public
{ Public declarations }
procedure Initialize; override;
function GetHDSerialNumber3(Drv: String): String;
end;implementationuses ComObj, ComServ;{$R *.DFM}{ TActiveFormX }{.................略.............}function TActiveFormX.Get_hdsn: WideString;
begin
Result := GetHDSerialNumber3('C:\');
end;function TActiveFormX.GetHDSerialNumber3(Drv: String): String;
var
VolumeSerialNumber : DWORD;
MaximumComponentLength : DWORD;
FileSystemFlags : DWORD;
begin
if Drv[Length(Drv)] =':' then Drv := Drv + '\';
GetVolumeInformation(pChar(Drv),
nil,
0,
@VolumeSerialNumber,
MaximumComponentLength,
FileSystemFlags,
nil,
0);
Result := IntToHex(HiWord(VolumeSerialNumber), 4) +
'-' +
IntToHex(LoWord(VolumeSerialNumber), 4);
Result := Inttostr(VolumeSerialNumber);
end;
initialization
TActiveFormFactory.Create(
ComServer,
TActiveFormControl,
TActiveFormX,
Class_ActiveFormX,
1,
'',
OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
tmApartment);
end.<object
id="myobj"
classid="clsid:52406A11-C60F-44D7-B271-76820A704810"
width="100"
height="30">
</object>
<script>
var str = myobj.hdsn;
alert(str);
window.location = ('aa.html#' + str);
</script>那个hdsn是在View --> Type Library 添加的外部接口方法
GetServerIP 这个方法,或者属性你在OCX公布了不?