文档库 最新最全的文档下载
当前位置:文档库 › delphi DLL注入完整源码

delphi DLL注入完整源码

delphi DLL注入完整源码
delphi DLL注入完整源码

DLL注入完整源码

1.interface

2.

https://www.wendangku.net/doc/5c15204233.html,es

4.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

Dialogs,

5.StdCtrls, tlhelp32;

6.{type

7.TProcessEntry32 = record

8.dwSize: DWORD; //大小

https://www.wendangku.net/doc/5c15204233.html,tUsage: DWORD;

10.th32ProcessID: DWORD; //线程的pid

11.th32DefaultHeapID: DWORD;

12.th32ModuleID: DWORD;

https://www.wendangku.net/doc/5c15204233.html,tThreads: DWORD; //线程数

14.th32ParentProcessID: DWORD; //父线程

15.pcPriClassBase: integer;

16.dwFlags: DWORD;

17.szExeFile: array[0..MAX_PATH - 1] of char; //进程名称

18.end; } ///说明某个进程TProcessEntry32 结构

19.type

20.TtoDllFrm = class(TForm)

21.Button1: TButton;

22.procedure Button1Click(Sender: TObject);

23.private

24.{ Private declarations }

25.public

26.{ Public declarations }

27.end;

28.

29.var

30.toDllFrm: TtoDllFrm;

31.

32.implementation

33.

34.{$R *.DFM}

35.

36.procedure FindAProcess (const AFilename: string; const PathMatch: Boolean; var

ProcessID: DWORD); //自定义一个查找a进程的过程,获得pid

37.var

38.lppe: TProcessEntry32; // 该进程的结构

39.SsHandle: Thandle; // 该进程的句柄

40.FoundAProc, FoundOK: boolean; //是否找到

41.begin

42.ProcessID :=0; //初始pid数值

43.SsHandle := CreateToolHelp32SnapShot(TH32CS_SnapProcess, 0);

44.//创建进程快照即进程的瞬时列表表单TH32CS_SnapProcess,0 表示进程列

45.//返回进程列表的句柄

46.lppe.dwSize := SizeOf(TProcessEntry32);

47.//在调用Process32First API之前,需要初始化lppe记录的大小,

48.郁闷测试几个小时,没有初始白忙活近一天,始终找不到错误

49.FoundAProc := Process32First(Sshandle, lppe);

50.//将进程列表的第一个进程信息读入ppe记录中,并判断是否读入成功.

51.

52.while FoundAProc do //读入成功,进行下面处理

53.begin

54.if PathMatch then

55.FoundOK := AnsiStricomp(lppe.szExefile, PChar(AFilename)) = 0

56.// AnsiStricomp 返回2字符串类型的比较结果相同时返回0

57.else

58.FoundOK := AnsiStricomp(PChar(ExtractFilename(lppe.szExefile)),

PChar(ExtractFilename(AFilename))) = 0;

59.//比较获得的参数和返回的ExtractFilename(lppe.szExefile) 值看是否为0.

60.if FoundOK then

61.begin

62.ProcessID := lppe.th32ProcessID;

63.break; //找到后,退出循环

64.end;

65.FoundAProc := Process32Next(SsHandle, lppe);

66.///否则继续找直到找到

67.end;

68.CloseHandle(SsHandle); // 释放句柄

69.end;

70./

71.function EnabledDebugPrivilege(const bEnabled: Boolean): Boolean;

72.//关于提高线程访问权限的提权并不是什么进程都可以访问

73.//访问不了那是权限不够就提权吧

74.//这一部分我也没有弄懂,注释以后在++

75.var

76.hToken: THandle;

77.tp: TOKEN_PRIVILEGES;

78.a: DWORD;

79.const

80.SE_DEBUG_NAME = 'SeDebugPrivilege'; //最高权限

81.begin

82.Result := False;

83.if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,

hToken))

84.//第一参数是要修改访问权限的进程句柄

85.//第二个参数指定你要进行的操作类型,要修改令牌我们要指定第二个参数为

TOKEN_ADJUST_PRIVILEGES

86.//第三个参数就是返回的访问令牌指针

87.

88.

89.then

90.begin

91.tp.PrivilegeCount := 1;

92.LookupPrivilegeValue(nil, SE_DEBUG_NAME, tp.Privileges[0].Luid);

93.//返回特权名LUID

//修改进程的权限,在此处为修改本进程成为具有退出系统的权限

94.//第一个参数是系统的名称,如果是本地系统只要指明为NULL就可以了,

95.//第三个参数就是返回LUID的指针,第二个参数就是指明了权限的名称,

96.if bEnabled then

97.tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED

98.else

99.tp.Privileges[0].Attributes := 0;

100. a := 0;

101.AdjustTokenPrivileges(hToken, False, tp, SizeOf(tp), nil, a);

102.//第一个参数是访问令牌的句柄;

103.//第二个参数决定是进行权限修改还是除能(Disable)所有权限

104.//第三个参数指明要修改的权限

105.//第四个参数是结构PreviousState的长度,如果PreviousState为空,该参数应为NULL

106.//第五参数也是一个指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息,可空

107.

108.Result := GetLastError = ERROR_SUCCESS;

109.CloseHandle(hToken);

110.end;

111.end;

112.

113.

114.function AttachToProcess(const HostFile, GuestFile: string; const PID: DWORD =

0): DWORD; //自定义注入函数

115.var

116.hRemoteProcess: THandle; //远程线程句秉

117.dwRemoteProcessId: DWORD; //远程线程pid

118.cb: DWORD;

119.pszLibFileRemote: Pointer; //一个指针指向远程dll的地址

120.iReturnCode: Boolean; //返回值作判断用

121.TempVar: DWORD;

122.pfnStartAddr: TFNThreadStartRoutine; //lib函数地址

123.pszLibAFilename: PwideChar; //一个指向文件名

124.begin

125.Result := 0;

126.EnabledDebugPrivilege(True); //提权

127.Getmem(pszLibAFilename, Length(GuestFile) * 2 + 1);

128.//申请内存内存的大小由Length(GuestFile) * 2 + 1 决定

129.StringToWideChar(GuestFile, pszLibAFilename, Length(GuestFile) * 2 +

1);

130.if PID > 0 then

131.dwRemoteProcessID := PID

132.else

133.FindAProcess(HostFile, False, dwRemoteProcessID);

134.hRemoteProcess := OpenProcess(PROCESS_CREATE_THREAD + {允许远程创建线程}

135.PROCESS_VM_OPERATION + {允许远程VM操作}

136.PROCESS_VM_WRITE, {允许远程VM写}

137.FALSE, dwRemoteProcessId);

138.cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);

139.pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT, PAGE_READWRITE));

140.//申请内存,并指向内寸地址并付值

141.TempVar := 0;

142.iReturnCode := WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, cb, TempVar);

143.//写入成功,将返回一个不为0-de 值

144.if iReturnCode then

145.begin

146.pfnStartAddr := GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryW');

147.//GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址

148.//GetModuleHandle函数可以返回此句柄

149.TempVar := 0;

150.Result := CreateRemoteThread(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, TempVar);

151.//新生成的线程分配的线程Id 即TempVar

152.end;

153.Freemem(pszLibAFilename);

154.end;

155.

156.procedure TtoDllFrm.Button1Click(Sender: TObject);

157.begin

158.AttachToProcess('Explorer.exe',

extractfilepath(paramstr(0))+'Project2.dll');

159.//其中Project2.dll是想要注入到Explorer.EXE的进程,Explorer.exe也可以是别的进程.

160.end;

161.

end.

DELPHI源码调试方法(适合新手)

Delphi调试概述 除非你的程序只有几行,否则几乎不可能一次写成,因此调试就非常必要。然而许多初学者不知道如何进行调试,写完程序就运行,发现结果不对再看代码,这样觉得非常吃力。这里,简单介绍一下Delphi所提供的调试功能。 1.语法检查(Syntax Check) Delphi提供了语法检查的功能,这个功能和正常编译很相似,同样也会给出各类错误和警告信息,但是不会生成代码。 必须重视Delphi给出的任何信息,很多简单的错误就能够在这个阶段被发现。Delphi的编译信息分为4类:Fault(故障),Error(错误),Warning(警告)和Hint(提示)。Fault是指导致编译程序不能继续工作的错误,例如内存溢出等;Error是指发现用户程序不符合某些规定而导致不能按照用户程序的要求进行处理;Warning是指用户程序使用了某些不符合规定的形式,但是并不影响编译程序生成目标文件;Hint是指编译程序对用户程序的某些形式提出了怀疑。 前两类信息是必须要解决的,否则你不能运行你的程序,但是往往会有很多人忽略后两种信息。然而,这些信息却是非常重要的。 对于下面这个代码,编译程序将会出现一个Warning: var a,b:Integer; begin ... if a<100then if a<b then begin ... end; end. end. 编译程序会告诉你,在“.”(句号)后面的内容被忽略了,实际上你会发现你漏了一个begin,同时将最后第二个end后面的“;”(分号)误写成“.”(句号)了。 再看看下面的代码: var a,b:Integer; begin b:=a+1; end; 编译程序会给出一个Hint,告诉你a尚未被初始化,通常没有被初始化的变量其内容是不确定的。

delphi打印小票源码

//取得字符的高度function CharHeight: Word; var Metrics: TTextMetric; begin GetTextMetrics(Printer.Canvas.Handle, Metrics); Result : = Metrics.tmHeight; end; //file: //取得字符的平均宽度 function AvgCharWidth: Word; var Metrics: TTextMetric; begin GetTextMetrics(Printer.Canvas.Handle, Metrics); Result :

= Metrics.tmAveCharWidth; end; //file: //取得纸张的物理尺寸---单位:点function GetPhicalPaper: TPoint; var PageSize : TPoint; begin //file: //PageSize.X;纸张物理宽度-单位:点//file: //PageSize.Y;纸张物理高度-单位:点Escape(Printer.Handle, GETPHYSPAGESIZE, 0,nil,@PageSize); Result : = PageSize; end; //file: //2.取得纸张的逻辑宽度--可打印区域 //file: //取得纸张的逻辑尺寸 function PaperLogicSize: TPoint;

var APoint: TPoint; begin APoint.X : = Printer.PageWidth; APoint.Y : = Printer.PageHeight; Result : = APoint; end; //file: //纸张水平对垂直方向的纵横比例function HVLogincRatio: Extended; var AP: TPoint; begin Ap : = PaperLogicSize;

解析小票打印机常见问题及解决方法

解析小票打印机常见问题及解决方法 1.串口打印机联机会打印乱码吗? 答:PC主机所设置的波持率与打印机一致不会打印乱码. 2.针式打印机自检打印乱码或红灯闪? 答:如打印机装有色带,打印异常则可能是色带太紧,请更换色带; 3.打印机不开钱箱? 答:请检查打印机钱箱联接钱箱接口是否规范, 若符合且钱箱联接正确, 请送指定维修点维修。 4.打印机不检纸? 答:机芯传感器太脏, 请用软毛刷清洁传感器, 若清洁后依旧不能检纸;请送指定维修点维修。 5.打印机用了一段时间,联机打印乱码? 答:打印机接口板损坏,请更换通讯接口板或送指定维修点维修。 6.控制面板上的指示灯不亮? 答:检查电源线是否正确插入打印机、电源适配器和电源插座,检查打印机电源开关是否打开,若这些都正常,请送指定维修点维修。 7.针式打印如何使用黑标定位? 答:将打印机(底部)DIP开关SW-1位设为ON,打印纸黑标位于打印纸正面右侧(可选黑标位于打印纸正面左侧) 8.针式打印机有声响,但并没有打印? 答:色带盒安装不正确,请正确安装色带盒, 如色带已磨损,请更换新色带盒。 9.针式打印机打印汉字模糊? 答:将打印机底部的DIP开关SW-3设置为ON或调整机芯H行。 10.针式系列打印机是否支持打印服务器联网打印? 答:针打系列打印机都支持打印服务器联网打印。 11.GP系列的打印机支持语言有哪些? 答:GP系列打印机有简体中文、繁体中文、韩文、日文和21种国际语言字体。 12.打印机打印一段时间后,出现红灯闪(有打印纸情况下)? 答:可能是打印头过热,如果打印一段时间后不能正常打印,则是打印头温度过高,否则送指定维修点维修。 13.如何安装网络共享打印机的驱动程序?

delphi制作浏览器

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OleCtrls, SHDocVw, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; WebBrowser1: TWebBrowser; Button6: TButton; ComboBox1: TComboBox; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin webbrowser1.GoBack; end; procedure TForm1.Button2Click(Sender: TObject);

热敏打印机的驱动安装

科密T58、T60热敏打印机的驱动安装 科密T58、T60系列打印机在使用泰格、思讯、百威等行业软件时,由于行业软件自带了打印驱动,一般不需要另装驱动,只需要在软件中选择相应的58mm打印机即可。 如果软件不能直接设置打印机型号,就需要安装T58打印机驱动(T58驱动也适用于T60),安装驱动后将打印机设置为默认打印机即可。在打印机驱动的属性里还可以设置使用图形或硬字库打印,推荐使用硬字库打印方式提高打印速度和质量。 驱动安装操作如下: 1.添加打印机 (1)点击【开始】菜单,选择【打印机和传真】,如图1所示。 图1 (2)系统打开【打印机和传真】窗体。点击窗体右边【打印机任务】下的“添加打印机”一项。如图2所示。 图2 (3)系统弹出【添加打印机向导】对话框,如图3所示。点击【下一步】。

图3 (4)在弹出的向导对话框中选择“连接到此计算机的本地打印机”,并去掉“自动检测并安装即插即用打印机”,如图4所示。然后点击【下一步】。 图4 (5)在弹出的向导对话框中选择“使用以下端口”,如图5所示。如果是并口打印机请选择LPT1(即并口1),如果是串口打印机请选择COM1或COM2(具体要根据打印机连接电脑的端口选择)。然后点击【下一步】。

图5 (6)在弹出的向导对话框中点击【从磁盘安装】,如图6所示。 图6 (7)系统弹出【从磁盘安装】对话框,如图7所示。

图7 (8)点击【浏览】,选中随机光盘的“T58 T60 for 2k”文件夹,点【打开】打开文件夹,然后选中“T58-2K.inf”文件,再点击【打开】。如图8所示。 图8 (9)路径会自动出现在对话框的“厂商文件复制来源”上,如图9所示。然后点击【确定】。

打印机安装步骤

如何安装打印机 下面我们介绍一下这些机器的初始网络设置方法以及打印机的安装方法。 1、IP-011 (带网卡)1网络初始设置方法 按打印机按键选择[设定]T [ Setting ] T [ Network setup ]宀[TCP/IP Setup]— Tcp/ip setup J 2、LPD Banner enable (此项是报告默认为关闭:NO) (输入打印机的IP 地址) (输入子网掩码) (默认网关) 设定好以上网络参数以后显示屏幕提示 “ You have chaged casret setti ngs?' * press yse to save * press no to can cal 按"yes '键,然后按[Previous ]键返回上一级菜单,再按"update NIC "这一项更新网络设 置。然后打印卡自动初始化,网络参数修改完成。 按打印机按键选择 [设定]T [Network setup] T [TCP/IP setup] (开启TCP/IP 网络协议:Enable ) (打印卡初始化好了以后打印网络配置页 Ip settings (在此项中设定 IP 、子网掩码、网关) 设定完成后按[update INC ]保存刚刚所做的设定并初始化打印卡。 (注:我们在客户那里 会经常遇到打印机每打印一个文件自动出报告, 这是因为我们的报告选项开启。 关闭报告的 步骤:[设定]T [Controller set] T [Banner page]选择"NO ”) 3、 Konica 7145网络初始设置方法 在复印按键下,按下[帮助]键T [操作者管理方式]T [网络设定]T [TCP/IP 设定](输入 IP 地址、子网掩码、网关、将 DHCP 选项设为关闭)T 保存设置,推出操作-者管理方式后 设置生效。 1、 s et ip mode (此项一定要是开启:En able ) 3、ip Setting IP Address J sub net mask Gateway 2、 I P-422&IP-423网络初始设置方法 TCP/IP setup Enable TCP/IP < Print on startup

delphi FTP源码

//连接FTP var i:integer; tr : Tstrings; IdFTP1.Quit; tr := TStringlist.Create; IdFTP1.Host := hostTxt.Text; //FTP服务器地址 172.20.16.76 IdFTP1.Port := StrToInt(PortTxt.Text); //FTP服务器端口号9500 https://www.wendangku.net/doc/5c15204233.html,ername := UserTxt.Text; //FTP服务器用户名 IdFTP1.Password := pwdTxt.Text; //FTP服务器密码 IdFTP1.Connect(); //连接到ftp IdFTP1.ChangeDir('JMPZ'); IdFTP1.List(tr); //得到目录下所有文件列表 FFTxt.Items.Assign(tr); tr.Free; //ftp当前路径,从登陆用户的起始目录起始 IdFTP1.RetrieveCurrentDir //ftp目录变换,DirName只能是上一目录,或者下一目录,无需加"/" IdFTP1.ChangeDir(DirName); idftp_Client.Connected// 判断是否连接 //要使用IdFTP1.DirectoryListing属性,必须uses IdAllFTPListParsers;否则会有no idftplistparse classes have been registered的错误 //=========================================================== UseMLIS为目录解析器相关的参数,不同的Ftp服务器,会有不同的格式 //使用idftp1.list命令获取的目录列表时,显示列表为 drw-rw-rw- 1 user group0 Jun 2619:30 JMPZ drw-rw-rw- 1 user group0 Jun 2619:31加密配置 若进入二级目录,则多显示两行 drw-rw-rw- 1 user group0 Jun 2619:30 . drw-rw-rw- 1 user group0 Jun 2619:30 .. drw-rw-rw- 1 user group0 Apr 509:420旧订单 drw-rw-rw- 1 user group0 Apr 509:2911rrrrrrrr 但是当参数https://www.wendangku.net/doc/5c15204233.html,eMLIS:= true;时,显示列表为 Type=dir;Modify=20170626113034;Win32.ea=0x00000010; JMPZ Type=dir;Modify=20170626113101;Win32.ea=0x00000010; 加密配置 若进入二级目录,则多显示行 Type=cdir;Modify=20170626113034;Win32.ea=0x00000010; /JMPZ Type=dir;Modify=20170405014212;Win32.ea=0x00000010; 0旧订单 Type=dir;Modify=20170405012904;Win32.ea=0x00000010; 11rrrrrrrr Type=dir;Modify=20170608010420;Win32.ea=0x00000010; 4501036094

热敏打印机5常见问题及解决办法

1.打印机怎么装纸 不同品牌和型号的打印机结构不同,但基本操作方式是类似的,大家可以参考这个流程进行操作。 电子面单打印机内部基本架构图 卷纸安装: 1)按住顶盖插捎,打开打印机顶盖,用手拉开卷纸支架,将卷纸放在卷纸支架上的固定位置,按下卷纸支架固定锁; 2)再慢慢抽出一点纸张,将纸张从卡位哨中间穿过,根据纸张的宽度调整卡位哨之间的距离,接着把纸张拉一点到打印机的外部; 3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。 折叠纸安装: 1)按住顶盖插捎,打开打印机顶盖,将折叠纸放在打印机后方,打开折叠纸,将纸张从打印机后方的进纸口塞入; 2)用手拨开卷纸支架适当宽度,按住卷纸支架固定锁,将折叠纸从卡位哨中间穿过,接着将纸张拉一点到打印机外部; 3)最后,向内轻轻按压顶盖支架锁,合上打印机顶盖,适当往下按压顶盖,避免因机盖没有盖好造成打印机无法打印。 2.打印的时候卡纸了怎么办 检查打印头是否有粘胶,积垢,若有即用酒精笔擦拭处理,同时取出起褶皱的纸,更换新纸。 3.打印出来的内容模糊

打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项高级——浓度调整,调衡打印浓度后再进行打印测试。 4.打印出来的内容在打印纸上不居中,左右偏移或者上下偏移,怎么处理 打开电脑开始按钮,选择设备和打印机,找到自己的打印机驱动,右键——打印首选项——高级——水平偏移或者垂直偏移; 如果打印内容左右偏移的话修改一下水平偏移,内容上下偏移的话修改一下垂直偏移。 5.打印快递单总是打印1张空白1张怎么办 出现这种情况的话可能是打印机定位不准,请看看打印机的上下侦测器位置是否正确,再查看纸张类型是否设置成正确的的纸张类型,一般快递单是标签纸,有些客户可能设置成黑标纸。

Delphi 通过MSHTML实现一个HTML解析类

Delphi 通过MSHTML实现一个HTML解析类 Delphi 通过MSHTML实现一个HTML解析类分类:Delphi编程 2010-01-05 09:14 400人阅读 评论(7) 收藏 举报 最近经常会模拟网页提交返回网页源码,然后获得网页中相应的元素,于是需要常常解析Html中相应的各种元素,网络是个好东西,搜索一番,就找到了 好几个Delphi版本的HtmlParser的类库,试着使用了几个,发现解析起来都不完整,或多或少的回出现一些问题!于是想到了如果界面上有一个浏 览器,我们可以通过WebBrowser的Document接口对网页元素进行操作,很是方便!但是模拟网页提交,界面上是不一定要出现 WebBrowser的,肯定有办法,不通过WebBrowser就直接

解析HTML的,那便是我不要WebBrowser这个外壳,只要他里面的 Document文档接口对象就能实现对Html的解析了,查找了一番MSDN,然后Google一下,果然可行,构建方法如下://创建 IHTMLDocument2接口 CoCreateInstance(CLASS_HTMLDocument, nil, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, FHtmlDoc); 接口创建好了之后就能够对文 档元素进行解析了,很是爽快! 结合了我自己的特有操作,我对Combobox,Table,Frame等一些网页元素做了相应的封装,实现 了一个HTMLParser,大致代码如下: 这里只给出声明,代 码请在最后下载 代码

(* **************************************************** *)(* 得闲工作 室 *)(* 网页元素操作 类库 *)(* *)(* DxHtmlElement Unit *)(* Copyright(c) 2008-2010 不得 闲 *)(* email:appleak46@https://www.wendangku.net/doc/5c15204233.html, QQ:75492895 *)(* **************************************************** *)unit DxHtmlElement;interfaceuses

通用小票打印程序

怎样做出通用的pos小票打印程序 POS小票打印机分为热敏和针式俩种。 打印纸的宽度分为58毫米、76毫米和80毫米三种。 打印接口分为:串口、并口、USB和网口(以太网)。 热敏打印机速度较快,打印的时候噪音少,针打可以使用多联纸自动复印。 热敏打印机价格一般比较便宜,不需要频繁地更换色带。 并口打印机,可直接"端口输出",不需要安装打印机的驱动程序。 几乎所有的POS小票打印机都可以兼容EPSON的ESC POS打印机指令。 const // 末尾走纸几行 c_run_paper_lines = 6; // ESC指令开钱箱 c_OpenMoneyBoxCommand = CHR(27) + CHR(112) + CHR(0) + CHR(17) + CHR(8); // ESC指令自动切纸 c_cut_paper = CHR(29) + CHR(86) + CHR(66) + CHR(0); type // usb接口票打用 TOutBufPassThrough = record nDataLen: word; sEscData: array [0 .. 1024] of AnsiChar; end; // usb接口开钱箱 procedure OpenUSBMoneyBox; var prt: TPrinter;

esc: TOutBufPassThrough; begin try prt := Printers.Printer; prt.beginDoc; esc.nDataLen := Length(c_OpenMoneyBoxCommand); strpCopy(esc.sEscData, c_OpenMoneyBoxCommand); windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil); prt.endDoc; except end; end; // usb接口切纸 procedure usbCutPaper; var prt: TPrinter; esc: TOutBufPassThrough; begin try prt := Printers.Printer; prt.beginDoc; esc.nDataLen := Length(c_cut_paper); strpCopy(esc.sEscData, c_cut_paper); windows.ExtEscape(prt.Handle, PASSTHROUGH, sizeOf(esc), @esc, 0, nil); prt.endDoc; except end; end; procedure TfrmReprint.Print80; var sPort: string; RPrinter: TextFile; i: Integer;

delphi indy的UDP传输的演示源码

https://www.wendangku.net/doc/5c15204233.html,/t810509 用Delphi编写点对点传文件程序 delphi indy的UDP传输的演示源码 2009-02-27 17:05 客户端: var cmd: string; ASize, TotalSize: Int64; AFileStream: TFileStream; begin IdTCPClient1.Host := Edit1.Text; //连接主机 IdTCPClient1.Port := StrToIntDef(Edit2.Text, 9925); //端口 IdTCPClient1.Connect; //连接 try IdTCPClient1.WriteLn('BEGIN'); //提示服务器开始接收 cmd := IdTCPClient1.ReadLn; //以“|”符号分离文件名 SaveDialog1.FileName := Copy(cmd, Pos('|', cmd) + 1, Length(cmd)); if not SaveDialog1.Execute then begin IdTCPClient1.WriteLn('CANCEL'); //告诉服务器取消 IdTCPClient1.Disconnect; //断开连接 exit; end; TotalSize := StrToInt(Copy(cmd, 0, Pos('|', cmd) - 1)); //分离文件大小 //建立文件流准备接收 AFileStream := TFileStream.Create(SaveDialog1.FileName, fmCreate); try //循环开始接受 repeat IdTCPClient1.WriteLn(IntToStr(AFileStream.Size));//发送当前传输的位置 ASize := Min(TotalSize - AFileStream.Size, IdTCPClient1.RecvBufferSize); //选择剩余大小和缓冲区大小小的一个作为传输的大小 IdTCPClient1.ReadStream(AFileStream, ASize); //接收流 StatusBar1.SimpleText := Format('当前传输位置%d/大小%d', [AFileStream.Size, TotalSize]); Application.ProcessMessages; until AFileStream.Size = TotalSize; //大小一致了表示结束 finally AFileStream.Free; //释放文件流 end; IdTCPClient1.WriteLn('END'); //提示服务器传输完成

热敏小票机安装使用说明

北洋BTP-N58II热敏小票打印机安装使用说明 1、将电源适配器和USB数据线与打印机相连接,按箭头指示方向打开上盖,将热敏小票专用纸正确放入(热敏纸有正反面,粗糙面朝上,出切纸口),扣紧上盖后,将USB数据线的另外一头与电脑连接,接通电源后打开打印机背后的电源开关,电源指示灯亮。 2、双击运行打印机驱动Setup.exe文件,安装方式:【典型安装】,端口:【USB_BTP-N58II_1】,其他选项默认,点击安装。提示安装成功。 3、打印测试页,确定打印机安装成功:【开始】--【设置】--【打印机和传真】,找到“BTP-N58II(U) 1”打印机,右键【属性】--【打印测试页】。 4、在便民站系统中,缴任意一笔话费并打印小票以作测试:输入缴费金额后,在“是否打印凭证”此处选择【打印小票】,注意这里先选择【打印小票】,然后再【提交】,在提示交易成功的界面,点击【打印】,如果之前没有成功安装过打印控件,此时会有【安装运行控件】的提示,安装成功后点击浏览器上方的【后退】回到上一页面,再次点击【打印】,弹出打印控件,显示小票打印内容。点击控件上方的【打印】,弹出打印对话框,点击【确认】,打印机动作并打出小票。注:如提示打印控件安装成功但未显示打印控件,可以关闭浏览器重新登陆系统并根据浏览器上方或下方的提示运行“加载项”,点击【公共交易】下的【发票重打】,重新打印小票(通常下会有几页,包括发票或凭证或小票的内容,请选择小票样式的这一页进行打印)或者再做一笔缴费业务以作打印测试。 5、出现“小票最后一行打印不完整”的情况处理:在打印控件上方,点击【打印】弹出打印对话框,点击名称为“BTP-N58II(U) 1”的打印机后面的【属性】,弹出属性对话框,在【纸张/质量】选项卡中,点击【高级】,在高级选项对话框中【打印后走纸】此处,设置成【走纸7mm】即可。 6、在安装小票机驱动时提示:“复制驱动文件错误,文件名:UNIDRV.HLP,系统找不到指定的文件。请检查安装包完整性。”说明电脑需要安装“Windows XP sp3”升级包,请从网上搜索下载安装后,再次安装小票机驱动。

delphi实现计算器源码-完整版

private { Private declarations } protected // procedure CreateParams(var Params: TCreateParams);override; public { Public declarations } end; TRightEdit = class(TEdit) protected procedure CreateParams(var Params : TCreateParams);override; end; type operator = (Emp,add,sub,mul,divid); //空、加、减、乘、除 var FrmCounter: TFrmCounter; MyRightEdit: TRightEdit; operate: Operator = emp; operate1: Operator = emp; //记录上一次用户按下的运算符Pointed: Boolean = False; //是否输入小数点 temp: string = ''; tempnum: Real = 0.0; implementation {$R *.dfm} //重载TRightEdit的CreateParams自定义编辑框的一些样式procedure TRightEdit.CreateParams(var Params : TCreateParams); begin inherited; Params.Style := params.Style + ES_Right; end; //创建窗体时初始化一些参数 procedure TFrmCounter.FormCreate(Sender: TObject); begin MyRightEdit := TrightEdit.Create(nil); with MyRightEdit do begin parent := panel1; text := '0.';

斑马热敏打印机安装和配置说明书V1.2

斑马热敏打印机 安装配置说明书V1.1 编写:时间: 2014 年 9 月 30日审核:时间:年月日 批准:时间:年月日

目录 第一章打印机及热敏纸 (3) 1.1打印机型号 (3) 1.2热敏纸规格 (3) 第二章操作系统及热敏单样式 (3) 2.1操作系统 (3) 2.2热敏单样式....................................................................................... 错误!未定义书签。第三章打印机安装. (3) 3.1 设备安装 (3) 3.2 打印机驱动安装 (6) 3.3 打印机参数设置 (9)

第一章打印机及热敏纸 1.1打印机型号 系统支持多种型号热敏打印机,本操作说明书仅以【斑马/ZEBRA GK888t】打印机为例,如配置其他型号打印机需自行对打印机相关参数进行调整。 1.2热敏纸规格 热敏纸规格(宽* 高):10cm * 15cm 其中:签收联10cm * 11cm 客户联10cm * 4cm 第二章操作系统及热敏单样式 2.1操作系统 操作系统要求:WINDOWS XP WINDOWS 7 32位 注:如客户使用64位操作系统,可能会出现无法驱动打印机设备的情况。因此建议使用32位操作系统。 第三章打印机安装 3.1 设备安装 A、将打印机连接电源,并通过连接线(USB或并口连接线)将打印机与电脑设备连接; B、有配备架子的需要安装架子,架子配件如图

安装完成后,如下图所示 把热敏纸张装进横轴 放到架子上

C、打开打印机上盖 保证纸张滚动顺畅);

Delphi作的程序的源代码中常见的文件扩展名

Delphi作的程序的源代码中常见的文件扩展名 Delphi作的程序的源代码中常见的文件扩展名 时间:2011-5-24来源:yang 作者: peng点击: 32次 整理了一下用Delphi作的程序的源代码中常见的文件扩展名,并给出了这些文件扩展名的意义,以便源代码管理时作为参照,扩展名以字母为序(不需要进源代码库不表示不需要进库)。 ~* Delphi生成的备份文件,在版本控制库及发布代码中不应该出现这些文件,如果修改了某个文件却因某些原因没有保存的话,可以尝试使用这些文件恢复。 bmp/wmf/emf/gif/jpg/pcx/png/tiff/ico/cur/ani 图形/图标/光标文件,这些文件如果使用到了也需要进源代码库。 bpg 工程组文件(Borland Project Group File),文本格式,需要进源代码库;bpg文件其实是makefile格式,要编译bpg 文件可以使用make工具,语法如下: make -f %FileName%

bpl 运行时刻包文件,是一种Borland定义的特殊格式的dll,简单的说与普通dll的差别就是bpl有一些共用的部分只使用了同一引用,而dll使用了多份拷贝,因此才会使得bpl与dll的某些方面的差别很大。 此类型文件是否进源代码库需要根据其用途来判断,一般情况下源代码编译出来的bpl无需进库,但是如果此bpl 是IDE的扩充插件,可能也需要进库,此外如果第三方组件没有提供源码仅提供了此文件,则此文件也需要进源代码库。 bpr/bpf/bpj/h/cpp BCB(Borland C++ Builder)相关文件,如果工程使用了BCB,则需要进源代码库,但在我们的工程中应该不需要这些文件。 cab ActiveX控件包文件,如果是工程使用到的第三方控件,则需要进源代码库。 cfg 编译工程时的配置文件。dcc32.exe程序编译工程时使用cfg文件的顺序为:首先使用dcc32.exe同目录下的dcc32.cfg 文件,然后使用待编译文件同目录下的dcc32.cfg文件,最后使用待编译文件同目录下的同名的cfg文件,为了保证在不

小票打印机常见问题

小票打印机常见问题 一、打印机使用注意事项: (1) 打印机应安装在稳固的地方,避免将打印机放在有振动和冲击的地方。 (2) 不要在高温、温度过高以及污染严重的地方使用和储存打印机。 (3) 将打印机的电源适配器连接到一个适当的接地插座上,避免与大型电机或者其它能够导致电源电压波动的设备使用同一个插座。 (4) 避免水或导电的物质(例如:金属)进入打印机内部,一旦发生,应立即关闭电源。 (5) 打印机不得在无纸的状态下打印,否则将严重损害打印胶辊和热敏打印头。 (6) 如果较长时间不使用打印机,请断开打印机电源适配器的电源。 (7) 电源适配器只使用随机专配的电源适配器。 (8) 为了保证打印质量和产品的寿命,建议使用推荐的或者同等质量的热敏打印纸。 (9) 当拔插连接线时,请确认打印机电源处于关闭状态。 二、打印机常见故障处理方法: 1.串口打印机联机会打印乱码吗? 答: Pc主机所设置的波持率与打印机一致不会打印乱码; 2. 针式打印机自检打印乱码或红灯闪? 答:如打印机装有色带,打印异常则可能是色带太紧,请更换色带; 3. 打印机不开钱箱? 答:请检查打印机钱箱联接钱箱接口是否规范, 若符合且钱箱联接正确, 请送指定维修点维修。 4. 打印机不检纸?

答:机芯传感器太脏, 请用软毛刷清洁传感器, 若清洁后依旧不能检纸;请送指定维修点维修。 5. 打印机不走纸? 答:走纸按键坏,打印头损坏或主板坏,请送指定维修点维修。 6. 打印机用了一段时间,联机打印乱码? 答:检查打印线是否松动,打印机接口板损坏,请更换通讯接口板或送指定维修点维修。 7.控制面板上的指示灯不亮? 答:检查电源线是否正确插入打印机、电源适配器和电源插座,检查打印机的电源开关是否打开,若这些都正常,请送指定维修点维修。 8.热敏打印机打印机不清楚? 答:主要是看整个幅面不清楚还是部份不清楚,如果整幅面打印不清楚,可能是打印纸质量不符,如果是部分不清楚,可能是打印头太脏,请用棉布蘸酒精清洁打印头的热敏片,如果仍然不能打印清楚,请送指定维修点维修。 9. 针式打印如何使用黑标定位? 答:将打印机(底部)DIP开关SW-1位设为ON,打印纸黑标位于打印纸正面右侧(可选黑标位于打印纸正面左侧) 10.针式打印机有声响,但并没有打印? 答:色带盒安装不正确,请正确安装色带盒, 如色带已磨损,请更换新色带盒。 11.针式打印机打印汉字模糊? 答:将打印机底部的DIP开关SW-5设置为ON或调整机芯H行。 12. XP系列的打印机支持语言有哪些? 答:XP系列打印机有简体中文、繁体中文、韩文、日文和21种国际语言字体。 13.打印机打印一段时间后,出现红灯闪(有打印纸情况下)? 答:可能是打印头过热,如果打印一段时间后不能正常打印,则是

delphi IDHTTP登录网站教程代码

【转】 delphi IDHTTP登录网站教程代码 2010-08-12 14:51 转载自s_jqzhang 最终编辑zxp922 下面代码是delphi2010的,主要区别也就在于stringstream的初使化,Response := TStringStream.Create(”, TEncoding.UTF8); 改成 Response := TStringStream.Create(‘ ‘); unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, StdCtrls; type TForm1 = class(TForm) mmo1: TMemo; btn1: TButton; IdHTTP1: TIdHTTP; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Edit2: TEdit; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); var

pos58打印机安装流程

POS 58 打印机安装流程 所需设备: a)POS打印机一部(58MM宽热敏打印机) b)打印机电源线 c)打印机数据线(大口USB) d)驱动程序文件 安装流程 1.接好打印机, 包括电源线, 数据线, 并打开打印机电源开关, 确认电源指示灯亮. 如果是 第一次安装该打印机, 还应确认打印机工作正常. 方法如下: a)关闭打印机电源 b)安装打印纸, 注意打印纸正反面. 有一面是打印不出内容的. c)按住送纸键(通常英文标志为FEED)不松, d)打开电源 e)保持送纸键按下状态约两秒, 松开该键. 此时打印机应该会打印一份自检单. 如果 出纸但不打印, 检查打印纸是否正反面装正确. 2.安装打印机驱动程序 a)确认打印机是开机状态 b)确认操作系统是windows系列且不是win7(注: win7驱动可能安装不正常) c)运行通用的驱动程序(以XP为例) i.双击此程序 ii.点击”继续”

iii.”接受协议”并”继续” iv.使用默认的安装目录并点击”继续” v.点击”安装”

vi.选择操作系统, 通 常驱动程序会自动检测并正确选择,如果没有(比如WIN7), 可尝试XP或 VISTA, 然后点击下一步. vii.重要:去掉这里的”设为默认打印机”的勾选状态,最终应如图所 示, 左边的框显示为空白. viii.点击上图中的”结束”按钮, 此时因为系统可能会查找设备并安装驱动程序, 操作界面可能会有一小段时间的假死. 等待就行了 ix.如果系统装有360或其它杀毒软件阻止安装. 更改为允许安装.如下图所示

x.中间如果出现驱动安装界面, 一路选择”下一步”或”OK”或”同意”, 直到驱动程序安装完成并显示 xi.在控制面板里找到”打印机与传真”,并点开 xii.找到与之前安装时同名的打印机, 通常默认是”XP58-II”, 实际名称参考上面第”v”步里的图片, “设为默认打印机”下方文本框里的名称. xiii. xiv.右键->属性->端口, 选择任意的描述为”Virtual printer”的”USB00..” 端口. 特别注意:如果有多个USB00X端口.选择”打印 机”一栏为空的端口, 如果发现如下图所示,仅有的

价签打印流程

价签打印流程 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

价签打印流程 所有商品都要使用价签,做到一物一签、明码实价、物签对应 操作流程: 1、首先将需要打印价签商品的条码(编码)、品名、产地、规格、单位、零售价格等各项信息记录准确。 2、打开价签打印机,先将黑色色带安装好(亮面朝上),然后安装价签卷,确认设备安装完毕后盖上价签机盖子。 3、打开电脑,确认电脑与价签机正常连接,打开价签打印软件,将各项信息填入对应的位置,核对信息准确无误后单击确定打印。 关于打印价签填写内容的各项要求: 条码:超市版的商品要填写条码(13位)、编码(6位) 品名:要写全称,例如“好丽友抹茶味蛋黄派”,不能只写“好丽友蛋黄派”,或“蛋黄派”,同种商品名,不同口味的要把口味写在商品名称中加以区分。 产地:要精确到市,例如海天酱油产地为广东省江门市,产地不能写“广东省”,要写“江门市”,对于有多个产地的商品,产地可以写“详见商品包装”。国外进口的原料,在国内组装,这样的产地都要写国内的,例如食用豆油,原材料大豆为巴西进口,在黑龙江哈尔滨加工灌装,这样的商品产地要写哈尔滨。 规格:商品的包装含量,如“厨邦酱油”规格为“800ml”;对于散米,散糖,等散装食品,规格为“散”;没有规格的计件商品,规格为“统一”。

单位:商品最小售出单位,根据商品的不同属性可分为“瓶”“袋”“个”“罐”“听”“条”“件”“提”“箱”等等,散装商品按斤出售的,计量单位为“500g”,其他情况如茶叶或者花椒等散卖的商品,最小计价单位是两,单位就是“50g”。 零售价格:商品价格必须精确到分,比如说“19.90元”,价签上不可以打出“19.9元”。 价签常出现的问题: 1、字迹模糊不清。 2、商品价格手写。 3、价格未点小数点。 4、商品价格未精确到分。 5、内容填写不全,缩写商品名称。

delphi打印小票源码

//取得字符的高度 function CharHeight: Word; var Metrics:TTextMetric; begin GetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmHeight; end; //file://取得字符的平均宽度 function AvgCharWidth: Word; var Metrics: TTextMetric; begin GetTextMetrics(Printer.Canvas.Handle, Metrics); Result := Metrics.tmAveCharWidth; end; //file://取得纸张的物理尺寸---单位:点 function GetPhicalPaper: TPoint; var PageSize : TPoint; begin //file://PageSize.X; 纸张物理宽度-单位:点 //file://PageSize.Y; 纸张物理高度-单位:点 Escape(Printer.Handle, GETPHYSPAGESIZE, 0,nil,@PageSize); Result := PageSize; end; //file://2.取得纸张的逻辑宽度--可打印区域 //file://取得纸张的逻辑尺寸 function PaperLogicSize: TPoint; var APoint: TPoint; begin APoint.X := Printer.PageWidth; APoint.Y := Printer.PageHeight; Result := APoint; end; //file://纸张水平对垂直方向的纵横比例 function HVLogincRatio: Extended; var AP: TPoint;

相关文档
相关文档 最新文档