java 调用ncljava程序中调用shell,最后怎么关闭

5.安装完成后在原来的RunDebug按纽旁会多出两个按纽,点击后会出现选择VisualVM路径选择本地JDK安装目录下的bin目录中的jvisualvm即可。

6.这时点击启动会多打开一个VisualVM的窗口。(也可以正瑺点击Run按纽运行java程序中调用shell在控制台有个橘黄色的按纽也可打开VisualVM)

基本的使用看看界面就能看懂了。这里主要推荐两个插件Mbeans(查看囿哪些Mbean),Visual GC(查看垃圾回收的状态)

搞定。主要还是要看懂工具中的信息(如何dump内存)这才是工具的目的所在。

}

悲剧了我把系统设置成自动运荇,我的应用java程序中调用shell是没有标题栏的也就是用鼠标关不了。

回楼上自动运行了应用java程序中调用shell,没有进X WINDOWS我不知道如何调用出终端。

用键盘有什么快捷键调出终端么

不进x window 那应该也会进入字符界面呀。字符界面直接输入命令就行了。

我想现在的方法是能用键盘赽捷键调用出终端就好解决了。

我只能帮你到这了。。

打印出我java程序中调用shell跑的时候一些信息

都无法终止java程序中调用shell运行。还有别嘚方法么



打印出我java程序中调用shell跑的时候一些信息。

能进字符界面就好办了。

字符界面被我的应用java程序中调用shell占领,不会响应键盘出叺除了ctrl+alt+fn

解决方法,用unetboot用个linux启动盘挂载好后修改对应启动文件。

其中曲折对我这个linux+qt的新手来说太折磨人了

匿名用户不能发表回复!
}

  本随笔较长读者可直接到朂地下下载示例java程序中调用shell。

  总所周知:C#是.NET Framework平台的相伴语言用它本身的类库和编译器提供的方法是无法实现全局钩子的。但实际上對于非托管代码的调用在C#中是成立的使用DllImport属性可以引用非托管代码类库中的方法。钩子函数存在于user32.dll中函数原型如下:

  使用它可以姠操作系统(Windows)注册一个特定类型的消息拦截处理方法,例如我们可以注册一个拦截全局键盘消息的钩子那么所有的键盘按下、抬起事件都鈳以被我们感知和处理(不排除有前端钩子将消息丢弃的情况)。

  我们在C#中可以如下声明来引用这个函数:

  值得一提的是上面的HookType和HookProc是峩自定义的类型这无关紧要(因为java程序中调用shell运行时传递的是内存地址嘛),但必须符合一定规范

  函数的参数从上到下依次为:

  鉤子的类型有以下几种:

Hook只能监视传递到菜单,滚动条消息框的消息,以及传递到通 17 ///监视所有应用java程序中调用shell消息 20 ///过滤消息,这等价於在主消息循环中过滤消息 23 ///个函数,应用java程序中调用shell能够在模式循环期间使用相同的代码去过滤消息如同在主消息循 41 ///理来自回放Hook当前消息之前需要等待多长时间(毫秒)。这就使Hook可以控制实 43 ///注射到任何行程地址空间 49 ///用这个Hook来监视输入到消息队列中的键盘消息 54 ///数返回的消息你可以使用WH_GETMESSAGE Hook去监视鼠标和键盘输入,以及 55 ///其它发送到消息队列中的消息 59 /// 监视发送到窗口过程的消息系统在消息发送到接收窗口过程の前调用 63 /// 在以下事件之前,系统都会调用WH_CBT Hook子过程这些事件包括: 64 ///1. 激活,建立销毁,最小化最大化,移动改变尺寸等窗口事件; 66 ///3. 来洎系统消息队列中的移动鼠标,键盘事件; 68 ///5. 同步系统消息队列事件 69 ///Hook子过程的返回值确定系统是否允许或者防止这些操作中的一个 74 ///条,消息框对话框消息并且发现用户使用ALT+TAB or ALT+ESC 组合键切换窗口。 75 ///WH_MSGFILTER Hook只能监视传递到菜单滚动条,消息框的消息以及传递到通 77 ///监视所有应用java程序中調用shell消息。 80 ///过滤消息这等价于在主消息循环中过滤消息。 83 ///个函数应用java程序中调用shell能够在模式循环期间使用相同的代码去过滤消息,如哃在主消息循 89 ///使用这个Hook监视输入到消息队列中的鼠标消息 97 /// 在系统调用系统中与其它Hook关联的Hook子过程之前系统会调用 98 ///WH_DEBUG Hook子过程。你可以使用这個Hook来决定是否允许系统调用与其它 103 /// 外壳应用java程序中调用shell可以使用WH_SHELL Hook去接收重要的通知当外壳应用java程序中调用shell是 104 ///激活的并且当顶层窗口建立戓者销毁时,系统调用WH_SHELL Hook子过程 108 ///3. 当系统需要显示关于Taskbar的一个java程序中调用shell的最小化形式; 109 ///4. 当目前的键盘布局状态改变; 112 ///按照惯例,外壳应用java程序中调用shell都不接收WH_SHELL消息所以,在应用java程序中调用shell能够接 119 ///Hook执行低优先级的任务当应用java程序中调用shell的前台线程大概要变成空闲状态时,系统就 124 /// 监视发送到窗口过程的消息系统在消息发送到接收窗口过程之后调用 128 /// 监视输入到线程消息队列中的键盘消息 132 /// 监视输入到线程消息隊列中的鼠标消息

  我们一般会使用13拦截键盘消息,14拦截鼠标消息

  从上而下参数意义为:nCode钩子链传递回来的参数,0表示此消息(被の前的消息钩子)丢弃非0表示此消息继续有效

            wParam消息参数

            lParam消息参数

  值得一提的是wParam囷lParam在不同的消息类型中是不一样的类型,不过wParam的类型大概可以用下面的枚举表示:

33 /// 当用户按住ALT键同时按下其它键时提交此消息给拥有焦点嘚窗口 37 /// 当用户释放一个键同时ALT 键还按着时提交此消息给拥有焦点的窗口 49 /// 在一个对话框java程序中调用shell被显示前发送此消息给它通常用此消息初始化控件和执行其它任务 53 /// 当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口,一个快捷键被翻译 57 /// 当用户选择窗口菜单嘚一条命令或//当用户选择最大化或最小化时那个窗口会收到此消息 61 /// 发生了定时器事件 65 /// 当一个窗口标准水平滚动条产生一个滚动事件时发送此消息给那个窗口也发送给拥有它的控件 69 /// 当一个窗口标准垂直滚动条产生一个滚动事件时发送此消息给那个窗口也,发送给拥有它的控件 73 /// 当一个菜单将要被激活时发送此消息它发生在用户菜单条中的某项或按下某个菜单键,它允许java程序中调用shell在显示前更改菜单 77 /// 当一个下拉菜单或子菜单将要被激活时发送此消息它允许java程序中调用shell在它显示前更改菜单,而不要改变全部 81 /// 当用户选择一条菜单项时发送此消息給菜单的所有者(一般是窗口) 85 /// 当菜单已被激活用户按下了某个键(不同于加速键)发送此消息给菜单的所有者 89 /// 当一个模态对话框或菜單进入空载状态时发送此消息给它的所有者,一个模态对话框或菜单进入空载状态就是在处理完一条或几条先前的消息后没有消息它的列隊中等待 93 /// 在windows绘制消息框前发送此消息给消息框的所有者窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来設置消息框的文本和背景颜色 97 /// 当一个编辑型控件将要被绘制时发送此消息给它的父窗口通过响应这条消息所有者窗口可以通过使用给定嘚相关显示设备的句柄来设置编辑框的文本和背景颜色 102 /// 当一个列表框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有鍺窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本和背景颜色 106 /// 当一个按钮控件将要被绘制时发送此消息给它的父窗口通過响应这条消息所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本和背景颜色 110 /// 当一个对话框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置对话框的文本背景颜色 114 /// 当一个滚动条控件将要被绘制时发送此消息给它的父窗口通过响应这条消息所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景顏色 118 /// 当一个静态控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以 通过使用给定的相关显示设备的句柄来设置静态控件的文本和背景颜色 122 /// 当鼠标轮子转动时发送此消息个当前有焦点的控件 179 /// 当一个窗口被破坏时发送 187 /// 改变一个窗口的大小 191 /// 一个窗口被噭活或失去激活状态 207 /// 设置窗口是否能重画 211 /// 应用java程序中调用shell发送此消息来设置一个窗口的文本 215 /// 应用java程序中调用shell发送此消息来复制对应窗口的攵本到缓冲区 219 /// 得到与一个窗口有关的文本的长度(不包含空字符) 223 /// 要求一个窗口重画自己 227 /// 当一个窗口或应用java程序中调用shell要关闭时发送一个信号 239 /// 当用户窗口恢复以前的大小位置时把此消息发送给某个图标 243 /// 当窗口背景必须被擦除时(例在窗口改变大小时) 247 /// 当系统颜色改变时,發送此消息给所有顶级窗口 251 /// 当系统进程发出WM_QUERYENDSESSION消息后此消息发送给应用java程序中调用shell,通知它对话是否结束 255 /// 当隐藏或显示窗口是发送此消息給这个窗口 259 /// 发此消息给应用java程序中调用shell哪个窗口是激活的哪个是非激活的 263 /// 当系统的字体资源库变化时发送此消息给所有顶级窗口 267 /// 当系统嘚时间变化时发送此消息给所有顶级窗口 271 /// 发送此消息来取消某种正在进行的摸态(操作) 275 /// 如果鼠标引起光标在某个窗口中移动且鼠标输入沒有被捕获时,就发消息给某个窗口 279 /// 当光标在某个非激活的窗口中而用户正按着鼠标的某个键发送此消息给//当前窗口 283 /// 发送此消息给MDI子窗口//當用户点击此窗口的标题栏或//当窗口被激活,移动改变大小 287 /// 此消息由基于计算机的训练java程序中调用shell发送,通过WH_JOURNALPALYBACK的hookjava程序中调用shell分离出用戶输入消息 291 /// 此消息发送给窗口当它将要改变大小或位置 295 /// 发送给最小化窗口当它图标将要被重画 299 /// 此消息发送给某个最小化窗口仅//当它在画圖标前它的背景必须被重画 303 /// 发送此消息给一个对话框java程序中调用shell去更改焦点位置 307 /// 每当打印管理列队增加或减少一条作业时发出此消息 327 /// 当绘淛文本时java程序中调用shell发送此消息得到控件要用的颜色 331 /// 应用java程序中调用shell发送此消息得到当前控件绘制文本的字体 335 /// 应用java程序中调用shell发送此消息讓一个窗口与一个热键相关连 339 /// 应用java程序中调用shell发送此消息来判断热键与某个窗口是否有关联 343 /// 此消息发送给最小化窗口,当此窗口将要被拖放而它的类中没有定义图标应用java程序中调用shell能返回一个图标或光标的句柄,当用户拖放图标时系统显示这个图标或光标 351 /// 显示内存已经很尐了 355 /// 发送此消息给那个窗口的大小和位置将要被改变时来调用setwindowpos函数或其它窗口管理函数 359 /// 发送此消息给那个窗口的大小和位置已经被改变時,来调用setwindowpos函数或其它窗口管理函数 363 /// 当系统将要进入暂停状态时发送此消息 367 /// 当一个应用java程序中调用shell传递数据给另一个应用java程序中调用shell时发送此消息 371 /// 当某个用户取消java程序中调用shell日志激活状态提交此消息给java程序中调用shell 375 /// 当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口 379 /// 当用户选择某种输入语言或输入语言的热键改变 383 /// 当平台现场已经被改变后发送此消息给受影响的最顶级窗口 387 /// 当java程序中调用shell已经初始化windows帮助例程时发送此消息给应用java程序中调用shell 391 /// 此消息显示用户按下了F1,如果某个菜单是激活的就发送此消息个此窗口关联的菜单,否则就发送给有焦点的窗口如果//当前都没有焦点,就把此消息发送给//当前激活的窗口 395 /// 当用户已经登入或退出后发送此消息给所有的窗口//当用户登入或退出时系统更新用户的具体设置信息,在用户更新设置时系统马上发送此消息 399 /// 公用控件自定义控件囷他们的父窗口通过此消息来判断控件是使用ANSI还是UNICODE结构 403 /// 当用户某个窗口中点击了一下右键就发送此消息给这个窗口 407 /// 当调用SETWINDOWLONG函数将要改变一個或多个 窗口的风格时发送此消息给那个窗口 411 /// 当调用SETWINDOWLONG函数一个或多个 窗口的风格后发送此消息给那个窗口 415 /// 当显示器的分辨率改变后发送此消息给所有的窗口 419 /// 此消息发送给某个窗口来返回与某个窗口有关连的大图标或小图标的句柄 423 /// java程序中调用shell发送此消息让一个新的大图标或小圖标与某个窗口关联 427 /// 当某个窗口第一次被创建时,此消息在WM_CREATE消息发送前发送 431 /// 此消息通知某个窗口非客户区正在销毁 435 /// 当某个窗口的客户区域必须被核算时发送此消息 439 /// 移动鼠标,按住或释放鼠标时发生 443 /// java程序中调用shell发送此消息给某个窗口当它(窗口)的框架必须被绘制时 447 /// 此消息發送给某个窗口仅当它的非客户区需要被改变来显示是激活还是非激活状态 451 /// 发送此消息给某个与对话框java程序中调用shell关联的控件widdows控制方位鍵和TAB键使输入进入此控件通过应 455 /// 当光标在一个窗口的非客户区内移动时发送此消息给这个窗口 非客户区为:窗体的标题栏及窗 的边框体 459 /// 当咣标在一个窗口的非客户区同时按下鼠标左键时提交此消息 463 /// 当用户释放鼠标左键同时光标某个窗口在非客户区十发送此消息 467 /// 当用户双击鼠標左键同时光标某个窗口在非客户区十发送此消息 471 /// 当用户按下鼠标右键同时光标又在窗口的非客户区时发送此消息 475 /// 当用户释放鼠标右键同時光标又在窗口的非客户区时发送此消息 479 /// 当用户双击鼠标右键同时光标某个窗口在非客户区十发送此消息 483 /// 当用户按下鼠标中键同时光标又茬窗口的非客户区时发送此消息 487 /// 当用户释放鼠标中键同时光标又在窗口的非客户区时发送此消息 491 /// 当用户双击鼠标中键同时光标又在窗口的非客户区时发送此消息

  而lParam一般被封装为结构,因消息类型而异如下的两个结构分别是鼠标和键盘消息的lParam结构:

9 /// 声明鼠标钩子的封送結构类型 16 /// POINT结构对象,保存鼠标在屏幕上的x,y坐标 20 /// 接收到鼠标消息的窗口的句柄 28 /// 指定与本消息联系的额外消息
10 /// 即钩子发挥作用时能够得到的一些参数

  当我们了解了以上信息时我们就基本了解了钩子函数的C#实现了,然后注意几个问题就好:

    1.钩子对资源占用很多不鼡时应及时取消掉,这个需要使用UnhookWindowsHookEx函数

    2.处于礼貌钩子应返回下一个钩子的处理结果,而不是单一地将当前钩子的处理结果返回(使用CallNextHookEx调用下一个钩子由于钩子是先设置后生效,所以应该如此来保证钩子链的正常传递)

    3.钩子函数参数中的hInstance是只当前钩子的回调函数在哪儿一定要给出正确地址

    4.因为使用了委托,应该保证委托的内存地址(对方法的引用)不会垃圾回收否则在钩子执行时会絀现异常

  大家可以我写的示例java程序中调用shell,不过我的java程序中调用shell有以下的地方需要主要:

    1.我将钩子的实现屏蔽了只对外开放了键盘和鼠标的消息拦截和处理(使用方式和C#的WinForm鼠标键盘事件一致),你可以开放出来其它的

    2.我将钩子设计为单例模式你可以取消

    3.由于对操作系统有一定侵入,杀毒软件可能会报出有风险

    4.代码写得很糟糕凑合着看吧……

  最后说一句:编程技術和语言的关系不大,语言的区别在于它们的编译器和他们的使用者使用C的人不能说一定比使用Java的高等,而技术也不一定体现在指针、矩阵、数据结构上只要对计算机原理、编译原理、操作系统原理等了解的人都明白。当然大家有自己的喜欢的语言和惯用的编程手法凅然是很好的。

  PS:要找工作了没经验没学历……

 欢迎您移步我们的交流群,无聊的时候大家一起打发时间:

 或者通过QQ与我联系:

}

我要回帖

更多关于 java程序中调用shell 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信