电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

鼠標在UNIX系統中的應用程序中的使用

瀏覽:113日期:2024-07-02 14:03:24

在當前眾多的個人電腦中, Windows 操作系統鋪天蓋地,鼠標在其上有著廣泛的應用。同樣,Unix 系統的 X Window,離開了鼠標,操作上也是顯得不太靈活方便。本文并不對X Window 中所應用的鼠標的隊列方式給予介紹,只是簡單地介紹一下如何利用系統調用實現對鼠標的直接訪問。 在大多數個人電腦中,使用的是輔口鼠標,由于本人條件所限,也只能對輔口鼠標在Unix系統中的應用給予粗淺的介紹。 輔口鼠標在AT&T Unix系統中應設置為PS/2鼠標,對應的設備文件為/dev/mouse;而在 SCO Unix系統中應設置為 kbmouse(即鍵盤鼠標),對應的設備文件為/dev/mouse/kb0。如果在編程中使用鼠標,應遵循以下順序: 1、打開鼠標對應的設備文件。 2、利用系統調用將鼠標設置為不等待方式。 3、通過系統調用來循環讀取鼠標的按鍵狀態,根據按鍵狀態轉向執行不同的程序功能模塊。 在這里,我先對用到的與鼠標有關的兩個系統功能調用給予簡單介紹。鼠標系統調用的方式為: int ioctl(int fd, int request,…/*arg*/) 其中:fd 為鼠標設備文件描述符 request 為系統調用請求的功能號 …表示系統功能調用的參數 對請求的功能號宏定義為: #define MOUSEIOC ('M'<<8) #define MOUSEIOCREAD (MOUSEI OC/60) #define MOUSEIOCNDELAY (MOU SEIOC/81) 功能描述 : MOUSEIOCNDELAY 將鼠標設置為不等待方式,在系統調用中,不需要參數。可將ioctl的參數項設為01(長整數零)。 MOUSEIOCREAD 用于讀取鼠標的位置和狀態數據。在 ioctl 中的參數項為一結構指針。該結構定義如下: struct mouseinfo { unsigned char status; char xmotion; char ymotion; } 該結構的status字段包含鼠標按鍵狀態信息,具體格式為: 高位 7 6 5 4 3 2 1 0 低位   0 Mv Lc Mc Rc L M R Mv:如果鼠標自從上次執行MOUSEIOCREAD 系統調用后移動過,則該位為1。 Lc:如果鼠標自從上次執行MOUSEIOCREAD系統調用后左按鍵狀態已改變 ,則該位為1。 Mc:如果鼠標自從上次執行MOUSEIOCREAD系統調用后中按鍵狀態已改變,則該位為1。 Rc:如果鼠標自從上次執行MOUSEIOCREAD系統調用后右按鍵狀態已改變,則該位為1。 L:左按鍵當前狀態(按下為1,彈起為0)。 M:中按鍵當前狀態(按下為1,彈起為0,只用于三鍵鼠標)。 R:右按鍵當前狀態(按下為1,彈起為0)。 在使用時要注意: 1、如果自從上次調用MOUSEIOCREAD系統調用后,鼠標已被移動過,但x向(橫向)和y向(縱向)的位移量為0,要判斷鼠標是否被移動過,就需要查看Mv位。 2、如果鼠標自從上次調用MOUSEIOCREAD系統調用后,一個按鍵已被按下彈起過,該按鍵的當前狀態位將不會改變,但有時應用程序需要知道它改變過,這對要用到Lc,Mc和Rc位。 結構mouseinfo中的xmotion和ymotion字段用于標識鼠標相對于上次調用MOUSEIOCREAD時在x方向和y方向的位移量。位移量的范圍為-127到127,超過兩端的部分被截去。 介紹完鼠標的兩個重要的系統調用,就可在實際編程中使用它了。本人在Unix系統下基于此方式編寫過使用鼠標的幾個程序(圖形方式和文本方式下)。以下是本人編寫的簡單的鼠標測試程序(此程序在AT&T Unix SVR 4.2下調試通過),功能不完備,僅供參考。 源程序清單如下: #include ″sys/types.h″ #include ″errno.h″ #include ″stdio.h″ #include ″sys/fcntl.h″ #include ″sys/ioctl.h″ #include ″signal.h″ #define BUTCHNGMASK 0x38 #define MOVEMENT 0x40 #define BUTSTATMASK 7 #define BUT3STAT 1 #define BUT2STAT 2 #define BUT1STAT 4 #define BUT3CHNG 8 #define BUT2CHNG 0x10 #define BUT1CHNG 0x20

#define MSE_BUTTON 0 #defing MSE_MOTION 1

struct mouseinfo   unsigned char status;   charxmotion, ymotion; }; /* Ioctl Command definitions */ #define MOUSEIOC ('M'<<8) #define MOUSEIOCREAD (MOUSEI OC| 60) #define MOUSEIOCNDELAY (MOU SEIOC| 81)

void (* s_quit)(); void (* s_intr)(); int fd; void EXIT(); void main() {   unsigned long a,b;   int i,j,status;   char buf[80];   struct mouseinfo mseinfo;   int xpos=1,ypos=1;   s_quit=signal(SIGQUIT,EXIT);   s_intr=signal(SIGINT,EXIT);   if((fd=open(″dev/mouse″,0_RD WR))==-1){   perror(″不能打開鼠標設備文件!!!″);   exit(1); } printf(″33[1c″);/*設置光標為塊方式/* ioctl(fd,MOUSEIOCNDELAY,OL); /*設置鼠標為非延遲等待方式*/ while(1){   ioctl(fd,MOUSEIOCREAD,&ms einfo); /*讀取鼠標狀態信息*/ if(mseinfo.status&MOVEMENT){ xpos=xpos+mseinfo.xmotion; if(xpos <=0) xpos=1; else if(xpos >80) xpos=80; ypos=ypos+mseinfo.ymotion; if(ypos <=0) ypos=1; else if(ypos > 25) ypos=25; printf(″033[%d;%dH″,ypos,xpos);/*調整光標位置*/ fflush(stdout); /*刷新輸出*/ } if(mseinfo.status&BUTCHNGMASK){ if(mseinfo.status&BUT1CHNG){ if(mseinfo.status&BUT1STAT){ printf(″Left Depressed″);/*左鍵被按下*/ fflush(stdout); } else { printf(″Left Relessed″);/*左鍵被釋放*/ fflush(stdout); } } if(mseinfo.status&BUT3CHNG){ if(mseinfo.status&BUT3STAT){ printf(″Right Depressed″); /*右鍵被按下*/ fflush(stdout); } else { printf(″Right Relessed″);/*右鍵被釋放*/ fflush(stdout); } } } } } void EXIT() /*本函數用于信號處理,實現整個程序的退出*/ { close(fd); printf(″33[0c″); signal(SIGQUIT,s_quit); signal(SIGINT,s_intr); exit(0); } /*———程序結束————*/

標簽: Unix系統
主站蜘蛛池模板: 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 杭州中央空调维修_冷却塔/新风机柜/热水器/锅炉除垢清洗_除垢剂_风机盘管_冷凝器清洗-杭州亿诺能源有限公司 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 中矗模型-深圳中矗模型设计有限公司 | 转子泵_凸轮泵_凸轮转子泵厂家-青岛罗德通用机械设备有限公司 | 众能联合-提供高空车_升降机_吊车_挖机等一站工程设备租赁 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 压滤机滤板_厢式_隔膜_板框压滤机滤板厂家价格型号材质-大凯环保 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 广州冷却塔维修厂家_冷却塔修理_凉水塔风机电机填料抢修-广东康明节能空调有限公司 | 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 中空玻璃生产线,玻璃加工设备,全自动封胶线,铝条折弯机,双组份打胶机,丁基胶/卧式/立式全自动涂布机,玻璃设备-山东昌盛数控设备有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 伟秀电气有限公司-10kv高低压开关柜-高低压配电柜-中置柜-充气柜-欧式箱变-高压真空断路器厂家 | 首页|光催化反应器_平行反应仪_光化学反应仪-北京普林塞斯科技有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 贵阳用友软件,贵州财务软件,贵阳ERP软件_贵州优智信息技术有限公司 | 范秘书_懂你的范文小秘书| 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 济南画室培训-美术高考培训-山东艺霖艺术培训画室 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 |