数学建模社区-数学中国

标题: 老大,怎麼寫并行口呢?用到哪些API函數阿 [打印本页]

作者: kenneth    时间: 2004-6-1 14:39
标题: 老大,怎麼寫并行口呢?用到哪些API函數阿

原來都寫串口的,現在要我寫并行口還有USB口

! e! O3 M- @2 z8 G0 H/ h

我暈,看來這回死定了

) J& d/ j% w0 c |4 P6 |

我連并口用到哪些API函數都不知道

1 f# }) ^. F$ T) i

老大救命哦

[em06]
作者: kenneth    时间: 2004-6-1 14:40
而且書上都找不到哦
作者: ilikenba    时间: 2004-6-1 23:28

API之打印函数:8 ~$ a- m6 _) d$ w AbortDoc 取消一份文档的打印 9 F6 R, r% D, B( o" p1 @AbortPrinter 删除与一台打印机关联在一起的缓冲文件 : I0 F+ l$ D, S. K1 G AddForm 为打印机的表单列表添加一个新表单 # y: j! l9 b3 t+ @# i AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 $ u! I# C8 _+ H7 i% Y1 V3 j AddMonitor 为系统添加一个打印机监视器 " e+ m6 ^7 I9 _! n1 ?, IAddPort 启动“添加端口”对话框,允许用户在系统可用端口列表中加入一个新端口 4 k2 K" t" w/ ~$ {9 u5 X! SAddPrinter 在系统中添加一台新打印机 3 Q8 Y+ H2 K2 y6 e" V* Z3 R& \ AddPrinterConnection 连接指定的打印机 $ ^& p; o: j# fAddPrinterDriver 为指定的系统添加一个打印驱动程序 : m# Q. G, u( _0 K0 V AddPrintProcessor 为指定的系统添加一个打印处理器 $ @4 g' k7 d( H5 R AddPrintProvidor 为系统添加一个打印供应商 1 Y% w, g- @3 q$ f: eAdvancedDocumentProperties 启动打印机文档设置对话框 0 T* Z2 u8 Z3 B* eClosePrinter 关闭一个打开的打印机对象 - a5 I0 E# D7 s1 d! Q# r ConfigurePort 针对指定的端口,启动一个端口配置对话框 ' m. s. _& J2 e/ }0 B4 b! | ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接 " m6 v; W( z3 J. |7 ?DeleteForm 从打印机可用表单列表中删除一个表单 ! m+ |$ g8 T" ^& _2 x _- KDeleteMonitor 删除指定的打印监视器 2 Q0 ~$ E& Z1 R7 c* \ DeletePort 启动“删除端口”对话框,允许用户从当前系统删除一个端口 2 B+ b: I* U9 c% H4 ]! [DeletePrinter 将指定的打印机标志为从系统中删除 ' t: D7 g8 c } I DeletePrinterConnection 删除与指定打印机的连接 6 D- P. h+ P" ?+ ]" _DeletePrinterDriver 从系统删除一个打印机驱动程序 . ?* m: w; \7 z1 nDeletePrintProcessor 从指定系统删除一个打印处理器 ( n3 M, M; r2 }3 N, RDeletePrintProvidor 从系统中删除一个打印供应商 ; F h6 S; |0 K# ~8 J! ~DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 5 J" D/ k4 v' `3 D) e# S DocumentProperties 打印机配置控制函数 8 p, P8 ~) O9 P1 Y3 { EndDocAPI 结束一个成功的打印作业 ! k& ?3 }' M2 t G: M. B1 h EndDocPrinter 在后台打印程序的级别指定一个文档的结束 7 g( [" P; O6 L' v EndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页 1 u6 a, a* m3 C) x4 W9 O9 u6 N EndPagePrinter 指定一个页在打印作业中的结尾 0 t. c4 }5 s/ m5 U- W+ r EnumForms 枚举一台打印机可用的表单 4 z1 p; O1 e/ D% ~; v0 W EnumJobs 枚举打印队列中的作业 ; |! |$ H- E/ f, z9 nEnumMonitors 枚举可用的打印监视器 2 M5 J# Y- g3 |EnumPorts 枚举一个系统可用的端口 : G9 P' P$ K% J4 \EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序 7 z3 [1 |* J- M6 H' v% G EnumPrinters 枚举系统中安装的打印机 * j( ^ Z S; y. S. ]EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型 7 R& j. D4 R" hEnumPrintProcessors 枚举系统中可用的打印处理器 + n8 l9 ^; t Z8 y y" h Escape 设备控制函数 + E$ z" r" v, q0 n' iFindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象 ^% T0 I# x# ?4 s3 tFindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化 7 Y6 s' {8 r( ~# wFindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因 ! a7 m# C* ^% t. s; q( g+ _FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区 / N9 i4 K2 C7 Z4 i& ?1 u* T8 k TGetForm 取得与指定表单有关的信息 ' F* ~/ R- x( T; m7 I. P7 NGetJob 获取与指定作业有关的信息 ( t! h! w f2 K GetPrinter 取得与指定打印机有关的信息 ; U3 Y5 Y1 u# w) S( y GetPrinterData 为打印机设置注册表配置信息 ) ]4 _/ K( K9 E( Y9 @) y( t& VGetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息 3 ]/ b. ?5 Q v. N* D$ @/ b; a+ N- h GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么 4 u3 c5 {% E0 d( A GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录 ^5 @7 `, Z& Q OpenPrinter 打开指定的打印机,并获取打印机的句柄 # }3 _5 z' o# ~- B+ r" }0 u% ^ PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框 * i/ M+ E$ j6 j: GPrinterProperties 启动打印机属性对话框,以便对打印机进行配置 " x0 ^3 n6 z9 b( c ReadPrinter 从打印机读入数据 0 R) o5 `9 E' ^: V' zResetDC 重设一个设备场景 : ~' g+ [5 C+ @- c9 _ ResetPrinter 改变指定打印机的默认数据类型及文档设置 ! Y& Q0 |7 q+ y; i6 L' c6 G$ V ScheduleJob 提交一个要打印的作业 ( e* K2 ^+ Z1 Y- n, q* I SetAbortProc 为Windows指定取消函数的地址 5 U9 ~' X" T% y/ |* o" c/ F5 D SetForm 为指定的表单设置信息 ' W! T4 l( }3 r- { SetJob 对一个打印作业的状态进行控制 / n- V7 V" P0 H* W! I2 f9 n SetPrinter 对一台打印机的状态进行控制 2 Z# l+ {$ E" ^1 a! f( F7 j! J- Y SetPrinterData 设置打印机的注册表配置信息 , P/ f7 H5 ^. m( n" N) C! e8 CStartDoc 开始一个打印作业 / D: ~5 w/ d5 N( u- E7 `( o! [ StartDocPrinter 在后台打印的级别启动一个新文档 7 m5 E; w( d! o StartPage 打印一个新页前要先调用这个函数 & D+ X& R5 L# \ StartPagePrinter 在打印作业中指定一个新页的开始 * Y Y! z$ W- \+ x# A, \6 |- XWritePrinter 将发送目录中的数据写入打印机 6 s3 | z* O) d2 x2 }3 K


作者: ilikenba    时间: 2004-6-1 23:34

看到这样一个usb通讯的帖子,可能对你有用!

主  题: 关于usb通讯方面的问题。请AKing大哥及相关高手来看看,万分感激!!! ' o: `. E7 p& h9 n9 m 作  者: aiyu33 () y& o B3 m4 g& k$ j( ^; h/ ? 等  级: * h! C3 ^: b: W: ^6 ^" ~) G 信 誉 值: 100 4 W7 R6 N/ p* z1 \ 所属论坛: C++ Builder Windows SDK/API 6 e& b; T$ L& Z/ b% K" A5 ^2 l 问题点数: 100 F7 f% C' ?4 K# B: h- R 回复次数: 12 7 T% u! c: M6 G9 N% Q 发表时间: 2003-12-16 20:43:13 0 K! W8 R* a+ m ; i6 y) J7 h# e& o* {5 i4 P 5 i* d5 {6 \+ S1 B* m

最今我接到了开发pc和pocket pc通过usb口通讯的任务。这两个星期我参考了很多方面的资料,特别是AKing大哥写的一些文章。但我始终没有打通这个关口,我贴出我的代码请AKing大哥看看,现在很急,多谢。; a2 {/ M# {1 h' {; X) L. s pc的os是windows2000professional 7 `( x. d( P5 P% d. apocket pc是hp ipaq 2210,os 是pocket pc2003。 ( D4 g3 R$ _" Q3 \3 E我装了activesync3.7。我查看过了,这个activesync目录下有pocket pc的驱动程序。pc也能识别。8 c) |; r1 G+ c, c 下面是我在pc上调用usb的代码。 ' L$ o& {3 R# K下面的代码我能打开hidn类型的usb,但是就是不能打开pocket pc的usb。 + l& ~* l2 a; ]- m" |//classGuid = {25dbce51-6c8f-4a72-8a6d-b54c2b4fc835} " S3 }8 s# F) l% ^DEFINE_GUID(GUID_CLASS_PALM, ( _( e% D* M" n( E3 @ 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, 5 {# A: I x* k9 q) X 0x4f, 0xc8, 0x35);$ }7 W% ]. ~" x' G. Y3 R( |) h GUID HidGuid = GUID_CLASS_PALM;4 @7 i! j5 w2 U' k/ w3 | HANDLE Get_DeviceHandle( GUID* pGuid)' B/ `3 n5 q/ i3 |$ W4 @7 E/ H2 ] {2 {5 E1 s3 i/ w |. l7 [' w 1 i5 L) r0 h2 A# a1 G HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);4 b: S$ ^3 `1 T( W3 _6 H & V4 U6 m6 t/ ]: W0 o# P( L if(info==INVALID_HANDLE_VALUE) 9 ?8 o/ f8 `% t {$ x! A- k' f% X printf("No HDEVINFO available for this GUID\n"); # g; b5 Y* k4 N4 }* ^% D0 E- w; K return NULL;! C e4 ^. E, G) [: V- K }# @- s+ Q- G) [2 ~$ w SP_INTERFACE_DEVICE_DATA ifdata;6 I- k+ m! v3 K! k j8 z9 N ifdata.cbSize = sizeof(ifdata);: k: j6 j+ ]4 s //0000是我在注册表中找到的序号 ( K- \$ F9 R0 P+ }9 V9 s* T if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, 0000, &ifdata)) 6 s, }/ R% b% _8 Q {! W4 d' ?4 ]6 R4 D printf("No SP_INTERFACE_DEVICE_DATA available for this GUID instance %d \n", instance+1);( I8 j! b1 m9 D. i* f5 o SetupDiDestroyDeviceInfoList(info);+ [9 a" F, B/ I# w! i N- J0 d return NULL; W% V- M- }0 Q! [# Z }

// Get size of symbolic link name 8 X( I* I( I/ v1 z* q DWORD ReqLen; 1 B5 @: b( {- I- V) ?- E : k5 A1 ^% q; |+ a0 V2 B SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL);2 V( @' K8 X2 ^1 ~1 X/ l1 ~4 X 9 t) F |; M( B PSP_INTERFACE_DEVICE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); - M' T! c$ l9 b; X! `& V$ g2 D / y+ P0 B R' m$ H if( ifDetail==NULL)3 s& G8 h8 j# f5 h* o3 B& F$ T { C0 j! i7 s: X$ w7 L SetupDiDestroyDeviceInfoList(info);5 L4 n2 X2 h4 Q6 H; J return NULL;9 z, i7 Q5 f2 @ }

// Get symbolic link name' r% `. S2 l0 X ]; U1 _1 Q y ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);. t/ `8 T5 F" C( w( m3 L : x! v+ X' v; ? if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL))9 m8 a: k% U- |* |: D2 O4 O { # B2 Y8 O7 H$ x7 N( W; M: X, b SetupDiDestroyDeviceInfoList(info);6 c9 i* U% y% \& ~, G9 ~ delete ifDetail;1 q: F! Q) z( E3 e return NULL; ) q4 F" O8 r4 {/ n z. Y7 J }

printf("Symbolic link is %s\n",ifDetail->DevicePath);9 h2 B7 f* ?- U0 ^" _' @# N

/*\\?\\usb#vid_03f0&pid_1016#5&1bc41f6c&0&1#{25DBCE51-6C8F-4A72-8A6D-B54C2B4FC835}这是ifDetail->DevicePath的内容*/9 P9 Y8 Q [* R7 ^# a // Open file % ]& q- |) V0 G7 o# Q1 r//前面都很正常但就是下面始终得出一个无效的句柄,我也就无法开展下一步的工作. i; P6 S/ x6 Y- ?" { HANDLE pDevice = CreateFile( W8 \' z( {' K* P0 d, [ ifDetail->DevicePath, 9 @& n, c4 h( u1 |7 T A GENERIC_READ | GENERIC_WRITE, " a4 f9 o6 p9 h- b FILE_SHARE_READ | FILE_SHARE_WRITE, 5 A1 y4 e* \: D$ \8 W NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ' @ q n* Q; J2 @ 0 S. n6 b' r3 X6 B8 U if( pDevice==INVALID_HANDLE_VALUE) pDevice = NULL;: C! o+ s; [4 F- `, ^ SetupDiDestroyDeviceInfoList(info);) F0 a0 D* E" _1 [& G& q 0 D$ y8 O# S- p1 X5 @ return pDevice; 5 n5 }4 z6 }, o3 L& R}; |' m' X. t- P* E 再次感谢关注这个问题的人们。

1 S4 F2 N2 _) Z3 b e- l& f/ C' G, v # u: G6 Y: V+ T( `6 T& W0 C% @. |# ? 回复人: constantine(飘遥的安吉儿) ( ) 信誉:101 2003-12-16 21:23:57 得分:0 # m) R- l# R. B5 j9 S& Z1 Z 6 T: x. h q- Y; G2 A. h* V ; z( w1 ]6 q/ s# e3 z. o 3 K6 D1 {: u) E2 C study

0 E) x( U# O$ I7 }5 L' Z) Q }% I* c' S5 c9 k5 n6 m' xTop 5 c' x$ [' E1 [2 ]2 E4 c - z8 K. E! D! z* ? 回复人: wenyongjie(一个想成为大鸟的小菜鸟) ( ) 信誉:95 2003-12-16 22:28:46 得分:0 2 ]% t" S! n9 ]5 K& V- F ' M! A# p8 Q# a7 {* P! r 9 U) O! r* d" l% D& h7 K1 X7 G & ]$ y2 K8 X- N只有学习的份

8 e- W3 C$ z2 X6 x# I& r # C" [0 |+ @/ c% p# h+ @Top 3 S( F! B/ M. `, M4 w " F, P( E& R( J 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:41 得分:10 ! G: N. D- P4 z8 x& u- L% j 5 c. t3 C T- O7 o+ f 3 |* u* K0 z/ x+ ^ 7 z( d. T& [$ o, u- @ 不知道有没有用!

/////////////////////////////////////////////////////////////// 2 `( W9 U# P% @6 |// HW9911 evaluation board software Rev. 1.06 V: f% @/ }% m, m1 a, }( w t // program by Liu Ding, Bei Jing HEAD Elec.# w* H3 F1 S2 C" Q' i, U/ [- P // this is the main program for the HW9911 USB device evaluation board) i: M) r9 G5 K7 M // it illustrate the basical read/write process of HW9911 ) T/ ]+ Y) k z# j" N// by three examples:- F. s* O+ w* Q" _ // 1. write datas to ram on the evaluation board( X( z) n9 j4 Q K! ` // 2. read the datas from the ram on the board - q0 k9 P3 z$ N- i8 l// 3. send datas through RS-232 serial prot on the board& B! W8 e/ @0 b2 ^+ v* j' U // 9 P( x ?5 b3 C) B // the whole project are build with MSVC 6.0 1 A8 F: [2 E! A; {' E+ Z// and tested on windows 98 platform. 6 |7 v( u: ?! h//- k' n4 M% M# n ?5 u // notes: you can use hyper terminal to reaceive datas form RS232 port 6 r7 D* b6 [0 Z9 q3 g//& x0 a; L! H' Q, O // this software are designed by Liu Ding* X' J4 a3 s. F, s // if you meet any problems, pls contact by email:* ?7 Y3 D0 {' t; J( y! H // hugehard@263.net) J6 n7 Z( j8 s // or contact HEAD Co. by Tel 86-10-87312497 % R! H6 u: Z s! B// or by fax: 86-10-87312495 5 f1 _4 H/ c& s1 p///////////////////////////////////////////////////////////////

#include "hwdll.h" 6 g8 I6 A3 o2 U& e3 G4 i; ]* `0 k4 S#include "stdafx.h" F$ Q/ F" F, v #include <stdio.h> 3 H: m8 K0 T. X3 H1 f#include <windows.h>1 `- ^. S6 h( V/ q; S/ N! { #include <memory.h> # u2 o8 l- L+ S1 @* A; L#include <DEVIOCTL.H>( D1 f3 ?5 s. b T #include <stdlib.h> J- v& ^5 R* G9 v$ D% Z2 g0 P6 C#include <conio.h> : |' ~, X- Y" T7 M#include "hw9911.h"$ D+ P. T/ F: B8 i; M8 K7 K #include "test9911.h"

& _) [! c4 ~, `+ P; M* T Cint main() 7 u/ ] d8 t" p& i{ / ^9 ]( q2 [' a0 K B% y int hOpen=FALSE;( N: x, Z8 N' L! q J int hCommandLength=32; / C7 Q9 Q: u/ y int hDataLength=64;5 y: ]+ _7 _& A0 `4 {/ v3 ? int i,VertAddr=0,HorAddr=0;' j( j, o4 N3 E int addr,TotalLen;2 Q- l7 j7 w5 Y/ g6 j: W USC StAddrH=0,StAddrL=0;" F; O+ {& n! ^ USC DataLenH,DataLenL; p. M( }0 H6 ]* L( y; p8 L USC *hDataBuffer,*hCommandBuffer;7 `) k& R* l' i8 N; B% K# g( Y USC ch1=0x61;$ R5 U6 B6 h& U) L3 | HANDLE hDeviceHandle;6 {. {' s' q! c* C 3 v( W6 m+ ~# Y3 y8 r) V( J- O) t printf("************************************************\n");" u: M9 u' i, ? printf("*******HW9911 USB DEVELOPMENT BOARD*************\n");3 ^: f, {% Q3 w5 l1 {% ] printf("************************************************\n\n"); " T% F* L a8 E! Q) D9 _) i printf("now press any key to open board\n"); 0 H: A% R n' y1 z/ G getch();

/********* call hDeviceOpen in hwdll.dll to open the board***/; J/ W) ^/ V! x5 }# h //hOpenDevice 说明:- a# {! p* b/ ^3 S' E // BOOL hOpenDevice(HANDLE *DeviceHandle) 8 G* P; K; A2 I0 r// 作用:打开设备 / P" _( |0 R5 C$ B- D. E( K// 参数说明: & h1 G1 A6 }) M* h, j// DeviceHandle:设备句柄 6 l" ~8 h2 |/ r0 m6 A// 返回值: 5 I4 [9 x2 t/ d+ c5 B3 [9 p// 设备打开成功返回 TRUE,失败则返回FALSE - J* [- f2 H) a5 u( ?, Y4 P if( (hOpen = hOpenDevice( &hDeviceHandle ))==FALSE) ; V0 e9 o* G& d L' A {3 v4 L+ \; l; A" D/ @$ M printf("can't open device\n");# j. e: h/ i P& O printf("press any key to exit\n"); 4 u+ r2 d: x6 X7 o getch(); : y. I/ r) V8 Z, v# c/ g6 K* n1 p return 0;9 `2 ?- M/ ~8 I9 ? }& B! C3 D a3 q* W+ q2 t$ @ else * ?3 C9 H% h2 C' O+ E6 B printf("\nCongratulations! device opened!\n\n");

/****** build and send command **********/ 2 E& [3 T" o% T7 b. D; E2 p e% G printf("how many bytes do you want to access?"); 1 j6 z- ], _% W- m7 d$ | scanf("%x",&TotalLen); 1 V4 ^5 S8 n+ {' v. l while(TotalLen > 0x7fff) & |& f0 t8 G6 H4 {* n m* F { 6 _/ |: \- g9 K: ] printf("pls input a hex data less than 08000\n");8 H* q( \4 U& b8 _ scanf("%x",&TotalLen); $ A! L8 F2 L/ i6 C4 ?. ? } 4 t' G. n3 a2 _5 I DataLenH=(USC)(TotalLen/0x100); //data length high bytes0 }+ Z& @4 O4 M9 c: ?; [ DataLenL=(USC)(TotalLen%0x100); //data length low bytes

printf("************************************************\n");, C0 I+ U5 d' O9 w2 E& ^" R printf("now program will write datas to ram on board\n"); ?, r4 B& ^$ W7 U0 J printf("total bytes of datas is %x\n",TotalLen); 3 l }! _8 G9 D G printf("press any key to continue\n\n"); 5 n! n6 E5 Z L6 r( a x9 ^4 I getch(); . W# J! ]: L& L; E$ [/***************************************************************** ; p% B/ I! [+ m now will build a write command packet * }% F7 U3 H$ g6 X4 e& g with the first byte is 'w'. % m0 r8 k+ m+ r$ [& y& ` and the following bytes are: ; c' Y, m& L' o+ X! V | start ram address byte high, start ram address byte low,1 U. @0 _# W: @6 { datalength byte high, data length byte low.( `5 y. w u0 s; T this packet will send to device through WritePipe1, 0 y2 i5 S1 ^: O+ ?, c6 W which is endpoint 2 of HW9911. % `5 d# J6 V2 ` when the device receive this command packet,; n: }# F3 V. t; C it will write TotalLen bytes data to Ram on the board " f, A! V1 i& H/ A9 r" N. I" \******************************************************************/

. g' E9 u* l6 X5 D) W7 k% n4 I5 a$ A# [ hCommandBuffer=(USC *)malloc(hCommandLength); $ X8 J/ t1 h( ~; u% M hDataBuffer=(USC *)malloc(hDataLength); 6 s) H9 R8 Z5 _* m3 \; J# a hCommandBuffer[0] = 'w'; //read command 7 d% i1 n% n. w; x0 ]5 R1 o3 G4 U: Q hCommandBuffer[1] = StAddrH; 1 h6 \' {' @* A/ K hCommandBuffer[2] = StAddrL; $ T& u# X2 E' K' q2 i hCommandBuffer[3] = DataLenH;- |7 d: F3 H: h/ ~* D! B1 E hCommandBuffer[4] = DataLenL;

/* call hUSBIO() in hwdll.dll to send command packet to device*/ 0 i% T Y1 `# ^. q) C) V// hUSBIO 说明: + d) D8 l: q M5 k5 j& Q// BOOL hOpenDevice(HANDLE *DeviceHandle,% y( L: M' L+ o: Y; J9 U+ j. X // unsigned char *IOBuffer," r, `; _& e) |8 @3 h // int BufferLength, 5 d' _; o: D8 T) j) d// int PipeNumber, ! l7 ]# ^9 E7 G, ]/ \2 i// int Action) % E% z0 q" `; X6 _2 E, ^1 S// 作用:设备读写# {3 S' f7 E7 ^0 c6 V // 参数说明:* u* h) ^3 B1 ~$ Q; g- L" \ // DeviceHandle:设备句柄 2 S% k* Y( ^/ ` k// IOBuffer: 指向要传送的数据指针6 L, E3 f9 v8 M& k- ] ` // BufferLength: 数据包长度& X! c" n; e' H' M; P. w+ k9 N // 对于发送缓存1、2和接收缓存1、2,BufferLength必须小于或等于32 \7 I# X2 l U1 F$ H# _& ?6 D! z // 对于发送缓存3和接收缓存3,BufferLength必须小于或等于64 2 J$ S5 W# r! Q+ n. j7 k0 a// PipeNumber: 通道号! y4 I* {- c7 Z6 N9 n1 ~ // 发送缓存1:PipeNumber=0; 9 U& n% U$ T2 P; H. v% \, q! k8 ~// 接收缓存1:PipeNumber=1;7 u% s) f$ H) e- s7 `& o/ X8 J, Y // 发送缓存3:PipeNumber=2; - V; q5 U/ g# S8 R* u2 @& W// 接收缓存3:PipeNumber=3;- _4 t* |, W! M // Action: 读写标志。TRUE代表从设备读数据到主机/ K8 @) e/ t7 s- L/ F" C! C6 K // FALSE代表从主机发送数据到设备 ) b: ]( k0 ?5 N, t// 操作接收缓存,Action必须为FALSE 9 B" ~% p+ y2 L. ^" Q4 f' L7 o// 操作发送缓存,Action必须为TRUE ' V! {; }1 w# G( \7 L7 l// 返回值: . P0 v2 b1 m! X8 I// 操作成功返回TRUE,失败返回FALSE

if ( hUSBIO( &hDeviceHandle,4 b6 Z4 v0 q5 k& u4 D9 j! @ hCommandBuffer,! f/ C0 i# h/ z8 w hCommandLength, 1 `, [- I, _2 b2 s0 W4 v hWritePipe1,# Q: i$ ~" d4 q; A1 V) y FALSE) == TRUE)" C; P" T. @5 u6 c ?2 ^ { 3 d# j9 M/ k5 l printf("command 'w' writed to board\n");7 L$ |7 ]& K0 F8 M7 a$ w7 A- e printf("now press any key to write datas to ram\n");: @# o2 y) h1 @+ O, _8 p- v getch(); b' @( Y8 Y$ x* }9 a }$ _2 z" o' p1 B* X else $ H/ x* n, `3 ?' O/ c0 u printf("data can't write to device\n");

/******** write ram data to board **********/

printf(" "); 6 k4 f& C. `! g! n for(VertAddr=0;VertAddr<=0xf;VertAddr++) & A# {+ E5 j0 {/ Z1 u printf("%02x ",VertAddr);7 W: u( g+ S/ d' P printf("\n");$ l9 P; G8 q' V4 T! c" d addr=0; 8 q4 a2 Y! J. ^7 |. S& A5 ] { while (addr<TotalLen), o# E, k' K0 D! b# }* v { 2 |% n, d0 f* ^1 T* a if (addr+hDataLength > TotalLen) 4 }; S( g. I( [- z hDataLength = TotalLen-addr; 4 p4 U4 {' f/ F$ W$ D for(i=0;i<hDataLength;i++) " }4 J2 l, c8 V- v9 N7 n3 t% d { , B1 L4 Y0 i/ D hDataBuffer=ch1++; ; d) b9 D/ }/ C8 O' ?& l" i if (ch1 > 0x80) ' L& q6 E: r* e( g0 A6 }; c: h ch1 = 0x61; * J- v. A% o. K }9 Y* G3 j y% h ]' X; h /* call hUSBIO to write datas to write pipe3, which M. I/ R" w* n is endoint 6 of HW9911*/

if ( hUSBIO( &hDeviceHandle,+ B, Q+ t" ^" h2 w hDataBuffer, 5 p z5 V6 }, |$ O hDataLength,2 Q1 |2 D; K/ a1 l' o1 c hWritePipe3, % w& V5 N; b5 n# R8 A, q' | FALSE) == TRUE) //FALSE means Write operate , |/ \8 ]. Q5 C% m% Z. r j {' L+ F: }+ F2 W4 i for(i=0;i<hDataLength;i++)2 M5 K$ j) ^& I0 u0 U( e! e { $ y5 h5 Z1 G. p" D/* print format control */ * g. J, x- i( ?3 z: z* Y if(i % 16 == 0) ; D: r* i0 P3 l$ b0 O { 8 {3 t' c* |8 J3 e8 B2 U printf("\n%04x ",HorAddr);8 w' U0 g4 K2 }6 C$ o2 ` HorAddr=HorAddr+16;* P$ I0 T8 c0 F. Z }/ M# Z5 ~5 q% a3 G! T. e printf("%02x ",(USC)hDataBuffer); ( n. p1 O" r7 W3 r# g4 w/ s } 6 ^' }6 b5 `4 T; a addr=addr+hDataLength;* a1 D1 N. M7 }- \ z } \5 s9 G; b M* }" r else7 x$ R0 ]& j( i% f: E$ z$ K. T { 6 d/ q K, t$ O# ` printf("can't write to board\n"); 3 q0 f4 g$ f: m. y7 z/ C: F! R- k exit(0); 3 n7 g. h, `' A' W, p. D } 7 w. K/ d' O5 h; Y3 l3 p }' B0 f& k6 i/ g printf("\n\nTotal%x bytes write to ram OK\n\n",TotalLen);

, ~2 @- g1 K- r: Y H! @ Y* {( q$ T# y5 |! U% j! t1 {' b Top ' v: |' Z Z) S$ D, o4 n 9 b1 f7 T/ X$ T$ A t 回复人: HUANG_JH(保卫钓鱼岛) ( ) 信誉:115 2003-12-17 9:50:51 得分:0 1 [6 c7 W R! F5 T/ E& v / o8 y! V* j" ]* ^* U( e , ^" o% o: ~$ v1 l- L, X

/***************************************************************** 4 y) B' m2 z- q5 p$ r3 y) @3 V8 r now will build a read command packet & B/ J) |" G- c- |0 Z0 h& A with the first byte is 'R'.4 _) p& c1 B, K% b+ Y8 w and the following bytes are: 9 U+ W) C6 M' Y+ ` start ram address byte high, start ram address byte low, / g# v- J N! f; u2 f datalength byte high, data length byte low.% I& V O2 T4 r8 h( \. I this packet will send to device through WritePipe1, ( k+ k: |4 D5 h, @+ ]) H! d2 b which is endpoint 2 of HW9911. 1 i9 y( V/ \: ]1 R) {3 D; R when the device receive this command packet, C1 g% P9 X+ f9 p$ m' [9 q7 D it will read TotalLen bytes data from Ram on the board 3 s- T9 x! M, D. E" _ p8 z2 f5 c. S, g******************************************************************/

printf("************************************************\n"); ! G. f. m1 p6 \. h _/ e printf("now program will read datas from ram on board\n");1 ~ r* p/ S" t" N2 i$ z printf("total bytes of datas is %x\n",TotalLen); * |" w2 J# b# w6 o4 }. M/ ~ printf("press any key to continue\n\n");$ X6 U% B! h/ P9 t5 c( e, O- s2 ] getch(); / [( U- N$ }+ E1 ]& r hDataLength=64; 4 w+ t. S2 c' u- u |8 x1 A hCommandBuffer[0] = 'r'; //read command ( ]! F. T6 e8 K& D' j hCommandBuffer[1] = StAddrH; 5 b2 [0 e2 D2 Q; c. U: } hCommandBuffer[2] = StAddrL; 3 J \; x% b# X) W, J( x( Y hCommandBuffer[3] = DataLenH; 8 T* U# t6 L3 e! U6 s7 w- m, S hCommandBuffer[4] = DataLenL; , x/ Q) l4 \! D$ i/* call hUSBIO to send packet */0 u8 `' F7 H$ Z6 X1 {) v# o if ( hUSBIO( &hDeviceHandle,2 h7 ^/ n0 n# ?" D0 X4 R! w+ K hCommandBuffer,) d" _3 d J8 x' x" y# N' {, R hCommandLength, 2 H: u/ j- G$ c8 U5 S9 S hWritePipe1,/ m, ^/ Y. b* P; r P0 n FALSE) == TRUE)" Z* Z! x$ I: j& i% h8 k { , E4 a# d5 G2 ]0 n) o* { printf("command 'r' writed to board\n");9 [* O8 F e' c/ k$ \: N& ^ U printf("now press any key to read datas from ram\n\n");# a' W' m, v3 D, f4 n2 k getch();' k$ x; J5 l- R/ b. y } 8 q" ~+ o7 j0 q# ~+ A! P else 6 N( T# p) ~8 R# J& k' J7 I printf("data can't write to device\n");

/******** read ram data form board **********/ + ]6 h7 j" T8 w4 e } printf(" "); # g5 A" t6 W8 w: |/ B/ I% ` for(VertAddr=0;VertAddr<=0xf;VertAddr++)8 E; K1 G. i" V# Q8 T% G( C printf("%02x ",VertAddr);. S# e, P2 H; M& S# X6 w+ q D printf("\n"); * r, w" L+ Q7 ]! Q1 c addr=0; ( b) _& k7 n) s' a! j/ Z) g a) ? HorAddr=0;- {3 E9 H: I! t) c$ }* X while (addr<TotalLen) 9 M9 s$ @9 Y, B4 a {: l3 P! p# N q& a if (addr+hDataLength > TotalLen) 9 r- c$ _! u% r- @- l" E9 y hDataLength = TotalLen-addr;$ O K8 ?/ Z) G. x5 |, ?# ~ /* call hUSBIO to read datas from board */ ) e0 i2 Y5 S* k+ o if ( hUSBIO( &hDeviceHandle,7 z& x4 `3 j% Z. w* } hDataBuffer, , w% K, X8 ~6 d' V8 Y9 A; M- L. t' H hDataLength, * a, N- L k N/ ?" u3 B hReadPipe3, * C7 d& p4 V+ ?$ J TRUE) == TRUE) //TRUE means Read Operate9 P3 O5 E2 Y% r { 2 {0 ^ Q1 ]7 P: o% B* F for(i=0;i<hDataLength;i++) / M/ r; f" @4 y# e6 {' ?) g { + W. ?; ]& v3 Q8 P# i/* print format control */ " e( x& x, U. w" R3 ?+ i+ c( f" U if(i % 16 == 0) $ m2 v) A/ I: l7 m0 v {3 F- {- r( i& |$ t/ O/ Y `3 P5 }/ S Q1 m printf("\n%04x ",HorAddr); 2 q) I: C0 @. }* n0 ~ HorAddr=HorAddr+16; ! J; m) d1 t1 V! X$ a! U- X } 5 O1 }5 T7 l+ N$ V' a& ^* j printf("%02x ",(USC)hDataBuffer); J5 Z, g3 x8 D, P' G1 U } 9 Q6 o/ \+ B% n. ^, Z addr=addr+hDataLength; s8 h5 U) S( Y. `8 q# ~7 Y }# l: N3 e4 r7 o else ! H8 F5 r# s% s$ ~5 a" v; I+ W7 B {6 X: S3 C/ w% a, H) I; n/ F ~ printf("can't read from board\n"); " p- K+ m3 T. ^! Y/ T3 [ exit(0);4 N5 u* o3 c2 G: L( H+ Q } ) ^: m& k x' g: N }1 f6 O. `: x% f7 ^) k ~ printf("\n\n"); # v+ c& `$ `8 I' j" l7 W) r/ Z9 b, p printf("%x bytes read from ram OK\n\n",TotalLen);

/*****************************************************/ 4 Y* h; f6 Y" I8 y1 Z/* process rs232 test */ 0 `' e: p) V/ V9 P/* the first byte in this packet is command 's' */ & l+ Y* o, p4 X/* and the following 2 bytes are used to set */ + |) [7 B1 E, ^1 |( D" g3 t: C/* the baud rate of 8051 */ 2 S4 t6 F+ D& V8 l A& u) O0 n/* they will be write to TH1 and TL1 respectively*/5 U7 X3 l4 e, X9 _! ^ /* the following bytes are datas will be */ . ]& j; c& N0 t( Y/* send through RS232 serial poart */ 8 o' W! T$ h: u0 {* f. e/*****************************************************// \2 f `; b4 h printf("\npress any key to process RS232 Test\n");3 W; J, \& _. B$ }1 ^& l% L% d& { getch(); & h) a' y5 V9 p% E* w 4 g I, C- y4 i9 y K5 f USC TH1,TL1; : @# ?) G K+ i. r9 `$ M* r* H char hStr[30];9 f) Y$ `+ V/ e- W! H: S& `8 t) A TH1=(USC)(BD9600/0x100);. v- P2 d7 l# j/ |- C. S TL1=(USC)(BD9600%0x100);7 R" O E7 n( d! }( E, o hCommandBuffer[0] = 's'; //read command # h6 q! \9 ]6 [. f$ {* F5 S hCommandBuffer[1] = TH1; / R0 e- l4 I1 ~' M) m0 G5 ` hCommandBuffer[2] = TL1; //start address is 0x0000

strcpy(hStr, "Hi, dear HW9911 consumers! ");) ?! L7 t% q2 b% g5 g# {1 V printf("Hi, dear HW9911 consumers! ");* G* Q) p9 x- D- o( T& i. P memcpy(&(hCommandBuffer[3]),hStr,27);

if ( hUSBIO( &hDeviceHandle, $ K5 {9 ^6 @/ J, d8 Z0 @ hCommandBuffer,7 z. E7 S' r* P 30,. S( u3 D% p! Y$ X% H; p hWritePipe1,7 a) w r$ ?( M% m$ D FALSE) == FALSE) 9 T9 a, ~8 @: g8 W9 l8 Q5 r { 8 e3 c! M! w U0 K( F& b printf("can't write datas to RS232\n");0 q- e: G' p {8 _# c exit(0);* B+ U8 D) O" j/ l }

strcpy(hStr, "I'm HW9911 Evaluation Board, "); 3 ~& w4 K& \# n \4 l! h- V& ]6 U7 s printf("I'm HW9911 Evaluation Board, ");1 D2 n. C5 }# S# W$ l; ? memcpy(&(hCommandBuffer[3]),hStr,29); / q- B1 U& A# i1 E8 d, f 4 y) I) N. R( A: q- [1 y8 { if ( hUSBIO( &hDeviceHandle,! q; L/ f* M0 t3 W" n hCommandBuffer,2 d! [8 y3 D- R3 H `; \+ m 32,: b, \+ Y6 m( F( q8 r hWritePipe1,6 W" \) W6 @1 s0 M FALSE) == FALSE)5 Q$ y7 O0 Y3 G6 B4 F3 F( h" G {% l. ~& b5 ^+ d! Z1 ~( V Q- I printf("can't write datas to RS232\n"); 1 P0 T/ W# `& c exit(0);2 [, A' t' e0 @8 L }

strcpy(hStr, "thanks for purchasing me, ");% Q. o& S" ] s C0 d. J' u! ? printf("thanks for purchasing me, "); 1 W' ~: ?' P1 Q6 f: L/ Y/ g memcpy(&(hCommandBuffer[3]),hStr,26); % J% F! k9 O' K0 P 6 d8 c" h* d' ^5 L if ( hUSBIO( &hDeviceHandle, $ J# u! s+ M! ~( `2 H% c% G# r hCommandBuffer,' }" V7 r0 q. W0 n 29, ' y) X: t. q$ P hWritePipe1, h) |/ _* Q2 m- q J4 P" d FALSE) == FALSE)8 n: a6 G$ I8 i: S4 @8 W { 7 e I2 A% S: K# R printf("can't write datas to RS232\n");; e4 c% p# K+ R2 d) ] exit(0); : y+ @% o# q6 G+ U0 C& ]+ s/ V }6 D/ f* P5 C0 y+ w8 c1 i 2 D: d1 f1 a( {0 F$ Z# W. r strcpy(hStr, "If you meet some problems, ");6 l: w: x. {# b/ c1 |4 V printf(hStr, "If you meet some problems, ");9 p! U0 B: G" d memcpy(&(hCommandBuffer[3]),hStr,27);9 Y5 U2 S8 l q " W: E0 a& J, b! z9 |/ I# m if ( hUSBIO( &hDeviceHandle,0 @+ O: b5 X( t' Z hCommandBuffer, 9 n$ @! }! l; A6 P; c: e 30, ' P: T2 s+ G& G9 Y) W hWritePipe1,, {5 o* V! g* T, J1 e1 r$ k: V- N FALSE) == FALSE)& v( A) C- C6 r+ s7 j {- \, |" A7 i6 H+ z printf("can't write datas to RS232\n");, w- a3 V' z# M# l2 Q5 N exit(0);9 k) @$ M3 a3 k% T' V }

strcpy(hStr, "pls contact my designer ");( [: w3 O, O4 n8 `3 n, s' z printf("pls contact my designer ");% l+ R1 d/ L$ @. {6 O0 E memcpy(&(hCommandBuffer[3]),hStr,24); + \ n4 t; O5 q! f5 i6 f - \/ V0 V3 A- j if ( hUSBIO( &hDeviceHandle,( ?) x% G; i& M0 J' L hCommandBuffer, ! w5 V7 ?! ]6 I/ U6 ~ 27, & R5 u/ d- v" O' y hWritePipe1," a% [& V* l2 N5 h FALSE) == FALSE) 5 D# a; ?5 v' g. [: U4 H { 1 I0 U7 `5 z! S: n0 X$ ? printf("can't write datas to RS232\n"); . }' }3 W) y# d8 O exit(0); % ?1 D1 r3 u/ W& a }

strcpy(hStr, "by email: hugehard@263.net.");) c, p8 a, ?3 n, L printf("by email: hugehard@263.net.\n"); ' i1 F9 {% }( b. u1 t# s! f% v memcpy(&(hCommandBuffer[3]),hStr,27); 8 u+ I: Y0 m* Q7 u& ^) m/ Z " F+ G3 ~5 Y% R! t. W8 I2 |! C if ( hUSBIO( &hDeviceHandle,6 Y! O, K. V* Y hCommandBuffer,5 q) E3 y' e% {( m. m `" S 30, * d3 N% Q, H: C) b- R& U( w hWritePipe1, 6 _7 v2 b: J+ j2 W FALSE) == FALSE)6 |8 ^' y: {# w# B) n t# } { 1 k/ ]. @ _& V7 [1 m printf("can't write datas to RS232\n"); * a6 h1 K$ W- k2 N+ h7 h exit(0); 9 K7 R+ r6 n7 j+ P( D- B. Y }; G" Q% @/ ^9 ]! T /********* call hDeviceOpen in hwdll.dll to open the board***/ V3 e3 ^$ n4 c( D [0 l // hCloseDevice 说明:1 t- |3 k. j0 W9 E // BOOL hCloseDevice(HANDLE *DeviceHandle)9 t- H1 x5 t: z, n! A. B // 作用:关闭设备% X |. Z _5 C& x // 参数说明: " p; \5 G" O: E% m& _5 [// DeviceHandle:设备句柄0 B" s( E/ A; Q) z7 }6 F. d* ~ // 返回值: " Y. \! ]+ f6 W. ^9 r// 设备关闭成功返回 TRUE,失败则返回FALSE & p2 \/ ?' O9 h) w6 n3 T if( (hOpen = hCloseDevice( &hDeviceHandle ))==FALSE)/ K) ` I& G' F { ) ]4 l2 i# Y7 a) U3 F6 M5 c& [ printf("can't open device\n"); - W v6 R' w) E6 V! u H printf("press any key to exit\n");, I5 T( p. o$ e/ c getch(); 6 x# y9 A/ ~0 p I return 0;" @/ `" @, ]% c: G9 u }# Y# G% q8 v% p2 \ else 4 K1 H6 L6 U- Y. E& }. ]& V printf("device closed\n");

printf("press any key to exit the program\n"); 1 N6 y2 v+ D/ Q( @! s* c' w4 }+ ? free(hDataBuffer); 5 ]4 [/ X4 Z% @1 S& |/ h9 S$ }9 i free(hCommandBuffer); 1 i9 ]2 @$ _' J# @ getch();# p H& N) |, _ return 0; : w: ?+ U0 v* | E3 N2 n; S2 {1 ~3 ]}

. N0 L3 R+ p$ ?) x. A6 L & ~+ S' T3 ~8 c0 q; ~ 1 f8 @7 u& r3 iTop 0 _2 b3 q4 A. P* A3 \2 a # r) |& c0 L& U, g u( X5 }; b9 M 回复人: aiyu33() ( ) 信誉:100 2003-12-17 11:41:24 得分:0 , q! m4 l: Q# D 4 K" m9 N' G1 c$ w* X ; E3 p/ M8 H5 o1 P# Z4 m" t$ U% ] ; m9 i$ N9 E* }7 `$ M9 R4 ?( i upupupupupupup

; q& P* Q1 a) A1 v4 I' Y- o1 l * V) F; S! V/ _3 l- O( J6 |. T, ] Top " g) O7 ^/ u2 k- e" { ; L. u7 W% ^, U0 b1 `: N8 A 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:53:39 得分:0 5 {) O+ h% v+ D * O& {& o* ?, g 7 `# @' a$ R8 c- I # y( ~( [$ A" X; a+ h你开发的这种软件类似于Palm Desktop Software,负责Pocket与PC之间通讯,我建议你最好先写一个驱动,将USB口虚拟成一个串口,然后直接对串口操作会很方便的。我现在做的程序可能和你相似是一个CDMA模块,通过USB口与PC机连接,然后由驱动程序将它虚拟成一个串口,我的工作就是和这个虚拟的串口通讯。

# i0 A9 S- q8 Y $ R( P2 g% u, W; X) R: i# S Top 2 I( B+ i4 Q. j& j6 O" s $ P7 f' N& `* T# `/ I# P 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 12:56:27 得分:0 5 U- i$ Q( d& K* d' e2 \+ ` & A% [* w2 ?. r4 }; D" q 6 p# P5 N0 b6 J# e, c8 Z $ L/ k4 R2 f% ?2 m' q7 O Pocket与PC连接肯定有驱动的,如果驱动程序没有将Pocket虚拟成一个串口,你也可以直接通过设备GUID和设备序列号进行访问,详情你参见我专栏上的一篇文章。当然了,通过虚拟串口来访问设备肯定要方便,简单些。

& R7 K! Z4 d0 C6 z$ z4 P4 Q$ S" X3 i P % ^0 F5 c7 q1 h+ j0 h, V( n! U0 ~ D Top 3 q$ [8 |9 S/ s1 c* Y 8 e- l b Y9 j# G# p5 x4 Y6 b) C$ a/ f 回复人: aiyu33() ( ) 信誉:100 2003-12-17 13:31:08 得分:0 8 c" W3 ?# |5 I* \ 7 r) F4 @8 R& {7 c ( C2 z( \! _+ }/ @0 b1 Z 4 {8 K' y# `/ M. b G& L% _ o1 ^我得这款pocketpc默认只支持使用usb与pc相连的,而且activesync3.7就是使用usb传输数据的。如果我自己写驱动的话,不仅不熟悉而且很可能activesync3.7这个软件就使用不了。我只需要利用它的驱动。你的专栏上的那篇文章我也看了,我就是模仿你的写的代码,但就是到createfile这步就不行了,我的同事是用palm开发类似的程序,也是到这步就行不通了,是不是有其他的原因?; C7 R' h4 f$ O 我还想问问如果驱动程序将pocket虚拟成串口,如何查看它的符号名呢?

0 Q2 O9 l7 E# g }. N, w$ c 2 _6 a( s6 f+ U" B) k. a 0 Y; V( f% f: p, F5 |Top ' I2 i5 k' b" F6 r& b' D 9 z# M' r& S/ b/ i( }4 j4 d9 i# n9 V 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:53:17 得分:0 v( R( d" i8 W# U* }! ^/ P6 X( ] 5 [, j1 W7 [6 B2 e9 y- W# A1 n & H( `3 X5 u8 X: L4 U ' d5 c& h& S% G9 |- D1 f3 y 假如将一个USB设备虚拟成串口的话,那么它的符号名可能是COM3,COM4,或COMn,这根据你当前PC机的配置而定 。它的符号名位于注册表中HKEY_LOCAL_MACHINE\CurrentControlSet中,你可以搜索注册表,另外在2000或以上的操作系统中,你可以到HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SerialComm中看到。

6 \, ^; I9 O! ^ / T4 b' Y8 O/ ^" X+ u7 p Top $ s5 Z' R* J, ~' D 1 n* O+ v; X% N K 回复人: kingcaiyao(AKing) ( ) 信誉:110 2003-12-17 16:55:33 得分:0 9 m& ^* `: F/ l) e: v4 d ' J" ^' u2 J2 y$ C & N' }( w }) Y; \/ z6 r 3 d( I" [0 W" F7 V' W4 ?6 _3 n7 {我以前在一张贴子中详细回答了如何利用设备序列号和设备GUID来访问该设备,你可以搜索一下CSDN。你所说的CreateFile不能打通设备,你要查一下,你的符号名是否正确,包括设备序列号和设备GUID是否正确,设备GUID你可以从驱动程序的安装向导文件.inf中找到,设备序列号则需要你到注册表中去找。

w5 h; t5 H( j6 P' l0 i; m 3 _6 g' P2 u( @% f/ w/ Z Top ( n+ a2 h/ w: ?$ t- N) k. A/ V* w) z 5 q9 H1 x1 r4 j, c& P6 U$ A 回复人: gyj_china(透明) ( ) 信誉:98 2003-12-17 18:15:30 得分:90 1 z! i' I" @; a+ P 7 M$ ?2 _! H$ {6 |0 A5 D+ D5 \ : G; p: s; s7 H- A- D) l & f& L0 N5 C) K4 g/ \+ ]: N. i1 {没有星星不敢发言:(

, t' X% i* V( a3 ?9 C7 d E U 0 Y8 S/ k5 M. |- @, F Top " x; }4 D) `4 N6 K r: I1 Y+ a 0 q1 x6 y# |/ M+ i" \ 回复人: aiyu33() ( ) 信誉:100 2003-12-19 18:27:28 得分:0 ! U* E9 V+ m8 j: [2 L7 v * ?+ z7 b9 @2 Y: d 3 n/ u7 h- u3 @ l - a9 t! k8 v8 ]2 h" c7 G1 ?不好意思,是因为ActiveSync3.7一直在系统服务程序中运行,占用了驱动程序,所以不能打开设备。我删除了ActiveSync3.7后就可以了。


作者: kenneth    时间: 2004-6-2 10:36

大哥太好了

" Y& ^; ~9 O8 |# \! I; R @, n

正是我想要的

: {* m6 d6 {' W7 }: `

謝謝你


作者: 闹市的牧羊人    时间: 2010-8-11 08:35
看不懂         
作者: arvinlai    时间: 2011-8-2 11:25
啊 啊啊 看不懂啊
作者: arvinlai    时间: 2011-8-2 11:25
啊 啊啊 看不懂啊
作者: 幽幽蓝水    时间: 2011-9-19 21:07
啦啦啦 谢谢
作者: www.qqqzq.com    时间: 2011-11-22 06:26
我是刚注册的新手 请各位大哥多关照
5 K9 U, w! E0 ^) Q5 f
作者: MichaeLonger    时间: 2014-6-18 21:13
路过。。。
作者: MichaeLonger    时间: 2014-6-18 21:13
水水。。。
作者: hitshijian    时间: 2015-2-3 10:25
赞一个!!!
6 O  @: e+ `/ i: r
作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主6 N. u" N: ^: W" J0 w' g7 l4 C  b

作者: SHERE201506    时间: 2015-8-26 11:00
谢谢楼主
! U7 D( H9 W$ z. H




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5