重机编程
‘壹’ cnc加工中心编程G30.G31.G50,各自的用法
数铣及加工中心编程指令复习非模态G代码00组的指令有每个指令的详细讲解G04暂停指令格式G04X(P,U)详解G04指令有效后机床进给暂停主轴继续运转暂停的时间由XPU后的数值控制XU单位是秒P的单位是毫秒1s=1000msG04的程序段中不能有其他命令G04X1.0暂停一秒G04P1000暂停一秒G04U1.0暂停一秒(数车专用)G09准确停止格式G09详解G09是一个不经常使用的指令它的功能是用来检查切削刀具是否已精确定位使刀具在接近终点时减速进给G10可编程数据输入格式无具体格式详解G10这个命令本身没有任何作用要完成相应的工作还需其他的辅助输入而且不同的控制器其指令格式有细微差别对于FANUC控制器来说坐标模式选择绝对(G90)和增量(G91)编程方式对所有偏置量的输入有很大影响G90或G91可在程序中的任何位置设置也可以互相修改只要程序段再调用G10数据设置命令之前进行指定即可可在程序中设置的有效偏置量工件偏置量。。。。。G54~G59刀具长度偏置量。。。。G43或G44(取消是G49)切削半径偏置量。。。。G41或G42(取消时G40)工件偏置量格式G10L2PXYZ加工中心G10L2PXZ车削中心字L2是固定的命令编辑偏置组号P地址可在1~6中取值P1=G54P2=G55P3=G56P4=G57P5=G58P6=G59例如G90G10L2P1X-450.0Y-375.0Z0.0该语句将会输入X-450.0Y-375.0Z0.0到G54工件坐标偏置寄存器G11可编程数据输入取消机械原点指令G27G28G29G30G27机床原点返回位置检查G28第一机床原点返回指令G28有两种形式绝对形式和增量形式G90G28X14.0Y2.0Z0.0刀具运动到点X14.0Y2.0Z0.0然后再返回机床原点G29从机械原点的回退指令和G28相反也要通过中间点并有两种形式G30第二机床原定回退指令G31跳过指令主要和数控机床上的探测器一起使用跳转功能G31是跳转指令,通常只用于测量功能,需要外部输入信号,输入信号的地址是X4.7(信号名SKIP)。G31执行过程中如果没有SKIP信号输入则和G01完全一样,如果在执行过程中SKIP信号置“1”,则在SKIP信号置“1”的位置清除剩余的运动量,直接执行下一个程序段。在SKIP信号置“1”时,4个进给轴的坐标值被存储在#5061~5064这4个系统变量中,供测量宏程序计算使用。你所说的主轴扭矩跳跃大概是指执行小孔深孔钻循环(G83)时的过载扭矩检测退回功能。使用这个功能同样需要输入信号,和G31用的是同一个信号。要求刀具本身有过载检测功能,在检测到过载时输出一个信号到机床的X4.7(SKIP)。执行过程大致是这样的:当执行G83过程中(Z轴位置在R和Z之间)如果刀具发出过载信号使SKIP置“1”,则进给停止,刀具退回R点。改变转速和进给速度后再继续执行循环。主轴转速和进给速度改变的百分比分别在5164和5166号参数设置。G37自动刀具长度测量位置补偿G45G46G47G48G45在编程方向上增加一倍编程量格式G91G00G45XYH或G91G00G45XYDG46在编程方向上减少一倍编程量G47在编程方向上增加二倍编程量G48在编程方向上减少二倍编程量G50取消比例编程G51比例缩放有效格式G51XYZP以给定点XYZ为缩放中心将图形放大到原始图形的P倍若省略XYZ则以程序原点为缩放中心G52局部坐标系设定格式G52XYZXYZ用于制定局部坐标系的原点在工件坐标系中的位置G52X0.0Y0.0Z0.0用于取消局部坐标系G53选择机床坐标系G60单方向定位详解G60只是定位而不是切削它代替的是G00快速移动指令在绝对模式或增量模式下都可使用与G00的用法相同如果使用镜像指令则不必改变定位方向它的定位方向和超出距离由系统参数指定)G65宏程序调用指令详解G65在A类宏指令中的应用格式G65HmP#iQ#jR#km——宏程序的功能#i——运算结果存放出的变量名#j——被操作的第一个变量#k——被操作的第二个变量在B类宏指令中的应用格式G65PLP被调用的宏程序代号L宏程序重复运行的次数为一时可省略G92设定工件坐标系指令格式G92XYZ详解执行该命令时刀具并不运动只是当前刀位点被设置为工件坐标系下的XYZ的设定值01组运动指令有G00G01G02G03G00快速点定位格式G00XYZG01直线插补指令格式G01XYZFG02/G03顺/逆时针圆弧擦补格式G02IJG17XYFG03R__________________________________________________G02IJG18XYFG03R______________________________________________________-G02IJG19XYFG03R_______________________________________________________02组平面选择指令G17选择XY平面G18选择ZX平面G19选择YZ平面XYZ终点坐标IJK圆心坐标相对于起点在XYZ轴向的增量值R圆弧半径F进给率03组尺寸模式G90绝对坐标编程G91相对坐标编程04组存储行程G22存储行程限制激活格式G22XYZIJK详解XYZ限制区域的起始点IJK限制区域的终止点X-I>2mmY-J>2mmZ-K>2mmG23存储行程限制取消06组输入单元G20英制数据输入G21公制数据输入07组刀具半径偏置G40刀具半径偏取消G41刀具半径左补偿格式G41DG42刀具半径右补偿格式G42D08组刀具长度偏置G43刀具长度正偏置格式G43HG44刀具长度负偏置格式G44HG49刀具长度偏置取消09组循环固定循环代码孔加工行程(-Z)孔底动作返回行程(+Z)用途G73断续进给快速进给高速深孔往复排屑钻孔G74切削进给主轴正转切削进给攻左旋螺纹G76切削进给主轴准停刀具位移快速进给精镗G80——————————————取消指令G81切削进给快速进给钻孔G82切削进给暂停快速进给钻孔G83断续进给快速进给深孔排屑钻G84切削进给主轴反转切削进给攻右旋螺纹G85切削进给切削进给镗削G86切削进给主轴停转切削进给镗削G87切削进给刀具移位主轴启动快速进给背镗G88切削进给暂停;主轴停转手动操作后快速返回镗削G89切削进给暂停切削进给镗削固定循环的代码组成G90/G91G98(返回初始点)/G99(返回R点)G73~G89使用前一定要在前一程序段中加M03/M04指令使主轴启动固定循环指令的格式是GXYZRQPFKG是指G73~G89XY是指孔在XY平面内的坐标位置(增量或绝对值)Z是指孔底坐标值在增量方式时是R点到孔底的距离在绝对值方式时是孔底的Z坐标值R在增量方式时是初始点到R点的距离而在绝对值方式时是R点的Z坐标值Q在G73G83中是每次进刀深度在G76G87中指定刀具的让刀量P暂停时间单位1msF进给量K固定循环的重复次数他们都是模态指令固定循环中的参数(zrqpf)也是模态的钻孔包括铰孔攻丝和单点镗孔编程时需考虑钻头的直径和锋角及螺旋槽的数量10组返回模式G98固定循环返回初始点G99固定循环返回R点12组坐标系G54G55G56G57G58G5914组宏指令模式G66模态调用G67模态调用取消16组坐标旋转G68坐标旋转激活格式G68XYR详解XY旋转中心如果省略则以程序原点为中心R为旋转角度顺时针为+值逆时针为-值G69坐标旋转取消18组极坐标输入G15极坐标指令取消G16极坐标指令激活24组主轴速度波动G25主轴速度波动检测功能无效G26主轴速度波动检测功能有效格式G26PQRP以毫秒记的开始检查时间Q允许误差的百分比R主轴速度跳动的百分比M代码程序控制组M00无条件强制性停止包括停止所有轴的运动主轴的旋转冷却液功能程序的进一步执行执行M00时控制器不会重启所有当前有效地重要数据(进给率坐标设置主轴速度等)都被保存M00会取消主轴旋转和冷却液功能M01可选择程序停止当按下操作面板上的选择停止开关时M01同M00功能相同不按下时M01无效M02程序结束M02将终止程序但不会回到程序的开头M30程序结束M30将终止程序并同时回到程序的开头执行M02和M30时便取消所有轴的运动主轴旋转冷却液功能并且将系统重新设置到缺省状态M02执行时将停留在末尾并准备开始下一循环主轴控制组M03主轴顺时针旋转(CW)M04主轴逆时针旋转(CCW)M05主轴停止M19主轴定位换刀M06冷却液M07开M08开(标准)M09关附件螺纹加工M23螺纹渐退出开M24关齿轮速比范围M41M42M43M44进给率倍率M48M49子程序M98调子程序M99子程序结束托盘M60在程序开头激活的M功能在程序末尾激活的M功能功能的持续时间在单个程序段中有效的M00M01M02M06M30M60M功能一直有效的,直到被取消或替代M03M04M05M07M08M09镜像M21对Y轴镜像M22的X轴镜像M23取消镜像当只对X轴或Y轴镜像时刀具的实际切削顺序将与源程序相反刀补矢量方向相反圆弧插补方向相反同时镜像时均不变镜像功能必须在工件坐标系原点开始回到原点取消各镜像指令必须单独编写镜像加工程序中不允许带有转移性质的指令不允许嵌套使用使用后必须用M23取消编程实例O4151N1X6.0Y1.0N2X4.0Y3.0N3X2.0Y5.0N4M99O1111M21(镜像开)G98P4151(调用需要镜像的程序)宏程序的变量类型#0空变量它是空变量即所谓的空白变量它可以被系统读取但不能赋值#1~#33局部变量它仅是暂时的当完成调用时或切断电源时所有局部变量会被清空#100~#149#500~#531全局或全局变量完成宏程序调用仍有用变量由系统维护可以与其他程序共享#1000~上限系统变量用于设置或修改缺省值可以读写不同的CNC数据局部变量赋值自变量列表1的赋值宏程序中的局部变量A#1B#2C#3D#7E#8F#9H#11I#4J#5K#6M#13Q#17R#18S#19T#20U#21V#22W#23X#24Y#25Z#26赋值列表2自变量列表1的赋值宏程序中的局部变量A#1B#2C#3I1#4J1#5K1#6I2#7J2#8K2#9I3#10J3#11K3#12I4#13J4#14K4#15I5#16J5#17K5#18I6#19J6#20K6#21I7#22J7#23K7#24I8#25J8#26K8#27I9#28J9#29K9#30I10#31J10#32K10#33
‘贰’ 你知道工业机器人是用什么语言编程的吗
工业机器人作为朝阳产业,未来的蓬勃发展是不容忽视的,很多人可能好奇这些机器人都是怎么进行操作和生产的,其实很简单,就是通过编程来控制它的行为指令。世界上有超过1500种编程语言,每种语言对机器人有不同的优势,下面就来看看目前机器人技术中最流行的几种编程语言。
1.C/C++
C和C++是新机器人的起点,很多硬件库都使用这些语言。它们允许与低级硬件进行交互,允许实时性能和非常成熟的编程语言。该语言具有更多的功能。
2.Python
Python近年来开始渐渐在技术圈岩喊巧子流行起来。其中一个原因是Python(和C++)是ROS中发现的两种主要的编程语言。它是一种解释语言,语言的主要重点是易用性。许多人都认为这样做非常好。
Python节省了许多常规的事情,这些事情在编程中花费时间。此外,还有大量免费的图书馆,这意味着当您需要实现一些基本功能时,您不必“重新发明”。并且由于它允许使用C/C++代码进行简单的绑定,这意味着代码的性能很重的部分可以用这些语言来实现,以避免性能下降。
编程.jpg
3.Java
Java从程序员“隐藏”底层的内存功能,这使得它比C更容易编程,但这也意味着你对代码实际做的不太了解。Java是一种解释语言,它不会被编译成机器代码渗卜。相反,Java虚拟机在运行时解释指令。使用Java的理论是,由于Java虚拟机,您可以在许多不同的机器上使用相同的代码。在实践中,这并不总是奏效,有时会导致代码运行缓慢。然而,Java在机器人的某些部分非常受欢迎,因此你可能需要它。
4.C#/.NET
C#是Microsoft提供的专有编程语言。这里主要包括C#/.NET,主要是因为使用它作为主要语言。如果你要使用这个系统,你可能要使用C#。但是,首先学习C/C++可能是长期发展编码技巧的好选择。
编程(1).jpg
5.MATLAB
MATLAB是非常受欢迎的一些机器人工程师分析数据和开发控制系统。还有一个非常受欢迎的机器人工具箱用于MATLAB。使用MATLAB开发整个机器人系统的人,如果要分析数据,生成高级图形或实现控制系统,需要学习MATLAB。
6.硬件描述语言(HDL)
硬件描述语言基本上是描述电子设备的编程方式。这些语言对于一些机器人专家来说是相当熟悉的,因为它们用于编程现场可编程门阵列(FPGA)。FPGA允许您开发电子硬件,而无需实际生产硅芯片,这使得它们成为更快更容易的一些开发选择。
如果你不是电子原型,你可能永远不会使用HDL。即使如此,重要的是知道它们存在,因为它们与其他编程语言完全不同。一方面,所有操作都是并行执行的,而不是依照基于处理器的语言进行。
编程(2).jpg
7.LISP
LISP是世界上第二大最古老的编程语言。虽然使用不够广泛,但在人工智能编程中仍然非常重要。
8.工业机器人语言
几乎每个机器人制造商都开发了自己的专有机器人编程语言。您可以通过学习Pascal熟悉其中的几个。但是,您每次开始使用新的机器人时,仍然需要学习新的语言。
9.BASIC/帕斯卡
BASIC和Pascal,它们是几种工业机器人语言的基础。BASIC是为初学者设计的,是一个非常简单的语言开始。帕斯卡尔旨在鼓励良好的编程习惯小号,并介绍构造,如指针,它一个很好的“敲门砖”,从普通版使一个更复杂的语言。虽然,这两种语言都有点过时。但是,如果要进行大量的低级编码,或者想要熟悉其他工业机器人语言,还是值得一学的。
作为工业机器人的技术人员,虽然并不需要每种编程语言都会,但是常用的编程语言还是需要掌握。学无止境,只有自己掌握了大量的专业知识,再实际的生产过程中才能应用的得心应手。
这个问题怎样回答你好呢!这样说吧,现在市面上每家工业机器人公司的机器人编程语言都会不相同,每一家都有自己的编程语言,比如ABB机器人的编程语言叫做RAPID;STAUBLI机器人的编程语言叫VAL3;不过本质都是用底层语言封装过的一些功能接口,因为这样方便客户使用和任意调用,但是在实际工作当中,有的还是直接用单片机控制的,也有的是利用到了PLC,所以作者你这个问题压根就没有一个你满意的答案,机器人是机械/电气/电子电机等技术的综合科技结晶,粗键要学的知识点也是非常广的,以上内容希望采纳,评价不易,且行且珍惜,谢谢!
机器人的开发语言一般为C、C++、C++Builder、VB、VC等语言,主要取决于执行机构(伺服系统)的开发语言;机器人编程分为示教、动作级机器人编程语言、任务级编程语言三个级别;机器人编程语言分为专用操作语言(如VAL语言、AL语言、SLIM语言等)、应用已有计算机语言的机器人程序库(如Pascal语言、JARS语言、AR-BASIC语言等)、应用新型通用语言的机器人程序库(如RAPID语言、AML语言KAREL语言等)三种类型。目前主要应用的是SLIM语言。
‘叁’ 数控车床程序编程
数控编程方法:
数控机床程序编制(又称数控机床编程)是指编程者(程序员或数控机床操作者)根据零件图样和工艺文件的要求,编制出可在数控机床上运行以完成规定加工任务的一系列指令的过程。具体来说,数控机床编程是由分析零件图样和工艺要求开始到程序检验合格为止的全部过程。
数控机床编程步骤
1.分析零件图样和工艺要求
分析零件图样和工艺要求的目的,是为了确定加工方法、制定加工计划,以及确认与生产组织有关的问题,此步骤的内容包括:
确定该零件应安排在哪类或哪台机床上进行加工。
采用何种装夹具或何种装卡位方法。
确定采用何种刀具或采用多少把刀进行加工。
确定加工路线,即选择对刀点、程序起点(又称加工起点,加工起点常与对刀点重合)、走刀路线 、程序终点(程序终点常与程序起点重合)。
确定切削深度和宽度、进给速度、主轴转速等切削参数。
确定加工过程中是否需要提供冷却液、是否需要换刀、何时换刀等。
2.数值计算
根据零件图样几何尺寸,计算零件轮廓数据,或根据零件图样和走刀路线,计算刀具中心(或刀尖)运行轨迹数据。数值计算的最终目的是为了获得数控机床编程所需要的所有相关位置坐标数据。
3.编写加工程序单
常用数控机床编程指令
一组有规定次序的代码符号,可以作为一个信息单元存贮、传递和操作。
坐标字:用来设定机床各坐标的位移量由坐标地址符及数字组成,一般以X、Y、Z、U、V、W等字母开头,后面紧跟“-”或“-”及一串数字。
准备功能字(简称G功能):
指定机床的运动方式,为数控系统的插补运算作准备由准备功能地址符“G”和两位数字所组成,G功能的代号已标准化,见表2-3;一些多功能机床,已有数字大于100的指令,见表2-4。常用G指令:坐标定位与插补;坐标平面选择;固定循环加工;刀具补偿;绝对坐标及增量坐标等。
辅助功能字:用于机床加工操作时的工艺性指令,以地址符M为首,其后跟二位数字,常用M指令:主轴的转向与启停;冷却液的开与停;程序停止等。
进给功能字:指定刀具相对工件的运动速度进给功能字以地址符“F”为首,后跟一串字代码,单位:mm/min(对数控车床还可为mm/r)三位数代码法:F后跟三位数字,第一位为进给速度的整数位数加“3”,后二位是进给速度的前二位有效数字。如1728mm/min指定为F717。二位数代码法:F后跟二位数字,规定了与00~99相对应的速度表,除00与99外,数字代码由01向98递增时,速度按等比关系上升,公比为1.12。一位数代码法:对速度档较少的机床F后跟一位数字,即0 ~9来对应十种预定的速度。直接指定法:在F后按照预定的单位直接写上要求的进给速度。
主轴速度功能字:指定主轴旋转速度以地址符S为首,后跟一串数字。单位:r/min,它与进给功能字的指定方法一样。
刀具功能字:用以选择替换的刀具以地址符T为首,其后一般跟二位数字,该数代表刀具的编号。
模态指令和非模态指令 G指令和M指令均有模态和非模态指令之分模态指令:也称续效指令,一经程序段中指定,便一直有效,直到出现同组另一指令或被其他指令取消时才失效。见表2-3、表2-6 N001 G91 G01 X10 Y10 Z-2 F150 M03 S1500; N002 X15; N003 G02 X20 Y20 I20 J0; N004 G90 G00 X0 Y0 Z100 M02; 非模态指令:非续效指令,仅在出现的程序段中有效,下一段程序需要时必须重写(如G04)。
在完成上述两个步骤之后,即可根据已确定的加工方案(或计划)及数值计算获得的数据,按照数控系统要求的程序格式和代码格式编写加工程序等。编程者除应了解所用数控机床及系统的功能、熟悉程序指令外,还应具备与机械加工有关的工艺知识,才能编制出正确、实用的加工程序。
4.制作控制介质,输入程序信息
程序单完成后,编程者或机床操作者可以通过CNC机床的操作面板,在EDIT方式下直接将程序信息键入CNC系统程序存储器中;也可以根据CNC系统输入、输出装置的不同,先将程序单的程序制作成或转移至某种控制介质上。控制介质大多采用穿孔带,也可以是磁带、磁盘等信息载体,利用穿孔带阅读机或磁带机、磁盘驱动器等输入(输出)装置,可将控制介质上的程序信息输入到CNC系统程序存储器中。
5.程序检验
编制好的程序,在正式用于生产加工前,必须进行程序运行检查。在某些情况下,还需做零件试加工检查。根据检查结果,对程序进行修改和调整,检查--修改--再检查--再修改……这往往要经过多次反复,直到获得完全满足加工要求的程序为止。
上述编程步骤中的各项工作,主要由人工完成,这样的编程方式称为“手式编程”。在各机械制造行业中,均有大量仅由直线、圆弧等几何元素构成的形状并不复杂的零件需要加工。这些零件的数值计算较为简单,程序段数不多,程序检验也容易实现,因而可采用手工编程方式完成编程工作。由于手工编程不需要特别配置专门的编程设备,不同文化程度的人均可掌握和运用,因此在国内外,手工编程仍然是一种运用十分普遍的编程方法。
数控机床编程中的代码
数控机床编程编制过程
把图纸上的工程语言变为数控装置的语言,并把它记录在控制介质上。
数控机床编程的主要内容
分析图样、确定工艺过程:进行零件工艺分析,确定加工路线、切削用量等工艺参数。
数值计算:对形状简单的零件(如直线和圆弧组成的零件)的轮廓加工,计算几何元素的起点、终点、圆弧的圆心、两元素的交点或切点的坐标值等;对形状复杂的零件(如非圆曲线、曲面组成的零件),用直线段或圆弧段逼近,由精度要求计算出节点坐标值,这种情况可用计算机完成数值计算。
编写零件加工程序单编程人员根据数控系统规定的功能指令代码及程序段格式,逐段编写加工程序单。
程序校验与首件试切在有CRT图形显示屏的数控机床上,用模拟刀具与工件切削过程的方法进行检验,此方法只能检验出运动轨迹是否正确,不能查出被加工零件的加工精度,因此,要进行零件首件试切。
数控机床编程程序段格式
每个程序段是由程序段编号,若干个指令(功能字)和程序段结束符号组成。
需要说明的是,数控机床的指令格式在国际上有很多标准,并不完全一致。而随着数控机床的发展,不断改进和创新,其系统功能更加强大和使用方便,在不同数控系统之间,程序格式上存在一定的差异,因此,在具体进行某一数控机床编程时,要仔细了解其数控系统的编程格式,参考该数控机床编程手册。
‘肆’ 立式加工中心第四轴手工怎样编程
G0G90G54X0.Y0.A90.S3000M3.你要注意了。一般用四轴都要好几个坐标系。G54 G55 G56 转一个方向加工就要一个坐标系的。不要搞的撞刀就不好了哇。
只要Z方向抬起来就可以转四轴 要抬高点,不要撞到。G0 Z100.A180.G0G90G55X0.Y0.S3000M3
四轴加工中心编程方法是:
一般工件在空间未定位时,有六个自由度,XY三个线性位移自由度和与其对应的啊ABC三个旋转位移自由度。六个自由度通常用笛卡尔直角坐标系的XY来表达三个线性轴,用与其对应的ABC来表达三个旋转轴。诸如多轴数控机床,也就是加工中心在设计时,需要根据加工对象规划设置轴数。
‘伍’ 可以用VB编程,运行后,是电脑关机或者重启。求代码,谢谢。
你先在新窗体上添加以下三个按钮,完整代码如下(你只要完整复制过去运行就可以了)
建立3个按钮Command1、Command2、Command3
第一个按钮是实现关机
第二个按钮是实现重启
第三个按钮式实现注销
保证你成功哦!
'*******************************************************************************
Private Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function OpenProcessToken Lib "advapi32" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
Private Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Type LUID
UsedPart As Long
IgnoredForNowHigh32BitPart As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
Private Const EWX_SHUTDOWN As Long = 1
Private Const EWX_REBOOT = 2
Private Const EWX_LOGOFF = 0
Private Sub AdjustToken()
Const TOKEN_ADJUST_PRIVILEGES = &H20
Const TOKEN_QUERY = &H8
Const SE_PRIVILEGE_ENABLED = &H2
Dim hdlProcessHandle As Long
Dim hdlTokenHandle As Long
Dim tmpLuid As LUID
Dim tkp As TOKEN_PRIVILEGES
Dim tkpNewButIgnored As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
hdlProcessHandle = GetCurrentProcess()
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), hdlTokenHandle
LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuid
tkp.PrivilegeCount = 1
tkp.TheLuid = tmpLuid
tkp.Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded
End Sub
Private Sub Command1_Click()
Call AdjustToken
ExitWindowsEx EWX_SHUTDOWN, 0
End Sub
Private Sub Command2_Click()
Call AdjustToken
ExitWindowsEx EWX_REBOOT, 0
End Sub
Private Sub Command3_Click()
ExitWindowsEx EWX_LOGOFF, 0
End Sub