jna 使用笔记
最近用到jna想实现获得当前用户选中文本的功能,结果发现这是个不好做的功能,后来想通过发送WM_COPY来通过粘贴板获得也是不行。只好放弃。
jna我没仔细看,只是初略了解了下。
扩展:
user32这样的类,没有完全暴露user32的接口,因此,如果有你想用的api但是jna又没封装的话,只要自己定义接口就行了,例如
Continue reading jna 使用笔记 我的机器很慢…… 所以我只能用myeclipse6,但是它最高只有对tomcat6的支持(那时tomcat7还没出来)。 网上搜了一下,可以直接将tomcat7的地址配置到myeclipse tomcat6中的home directory。然后还要在Tomcat6/launch/create launch config/class path中将tomcat7 bin目录下面的jar包加上。 这样就可以了。 我这主要使用tomcat7的websocket功能,发现7.0.27和7.0.29的websocket api 有不同,所以对于使用maven的情况,要保证引用的websocket api(catalina.jar,tomcat-coyoto.jar)版本与目标tomcat一致。 目前tomcat的maven 引用一下子就把很多包下来了,如果这些包直接发布到目标tomcat中,又会造成冲突报addFilter错误。 maven有provide的引用scope,但是对myeclipse这样直接发布到tomcat又不行,我是将包发布后再删除(catalina.jar,tomcat-coyoto.jar)。 使用maven tomcat 插件也可以,但是我总觉得与实际环境越接近越好。 总之,我还是很讨厌maven…… 另外tomcat7目前对safari的websocket支持不好。参见http://blog.ureshika.com/archives/792.html Continue reading myeclipse6 配置tomcat7 websocket相关 上篇比较了spry与idtabs,这次试试spry与jquery ui的互转,结果是perfect! 参照css彻底研究的12.5 伸缩面板,将其例子拿来· 然后参照jquery ui 文档http://docs.jquery.com/UI/Accordion 发现居然不需要改任何html结构, 只要这样: $(function() { 因为spry和jquery ui accordion都是要求折叠项标题和内容紧邻,所以他们没有结构上的要求区别。 但是有一点,如果使用了jquery-ui的样式,则会覆盖设计好的样式,所以前提是不引用jquery-ui的样式,这样比较的话还是spry方便些了。 so, it is perfect! Continue reading accordion, spry 与 jquery ui 今天分别使用了spry和idTabs .感觉都还可以,如果配合dreamweaver cs3,那spry更方便快速。 spry使用参见css彻底研究12.3。 spry tab本身不大,css也不大。 示例: var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1"); 这就行了,TabbedPanels1是个容器div,包含了tab菜单和tab内容。它是通过容器div里面第一个子节点为tab菜单,第二个子节点为tab内容。菜单与内容必须一一对应。 若要使鼠标hover时就显示tab需要在tab菜单元素上添加onmouseover="TabbedPanels1.showPanel(1)",这样写不是很好。 再来看idTabs, 它的布局和spry类似,我直接使用上面spry的结构和css, 使用示例: 此例中,选择#TabbedPanels1 ul中的a标记(这是idTabs要求的),它只支持a标记作为菜单项,并使用href属性作为跳转目标。 我直接使用spry生成的css, 出现问题,由于idTabs是将selected样式添加到a标签上,而一般a上面的li元素也需要改变选择样式。故代码中使用javascript来处理: $('li',set).removeClass('TabbedPanelsTabSelected'); //将其他项设置为未选中 $(this).parent().addClass('TabbedPanelsTabSelected'); //将a父元素li的样式设置为'TabbedPanelsTabSelected' 这样就行了。 插件使用很简单,主要是漂亮的样式需要设计。 这是效果图: 另外我尝试了jquery-ui的tabs,它需要引用其样式,故不很理想。 Continue reading tab 控件 spry和idtabs 比较 in java on webservice 上次使用 webservice 大概是七年前的事了,那时候还是用c#.net,微软正鼓吹xml和webservice起劲的时候,好像webservice能够真来个软件业的革命。 这期间多年的时间,对于webservice我是能躲则躲啊,因为觉得它雷声大雨点小,印象不好。现在偶尔要捡起来用一下。 还得看看资料先, 这篇文章写的比较适合入门 http://blog.csdn.net/qjyong/article/details/2148558 好,重要的一句是 wsimport -d ./bin -s ./src -p org.jsoso.jws.client.ref http://localhost:8080/hello?wsdl 对于已存在的webservice,生成客户端代理(这是我对.net的印象),然后就可以调用了。 找到继承service得类,可查看他的方法。 至于如何生成webservice,暂未有需求,以后用的时候再补充。 Continue reading webservice 使用 v3 overview https://developers.google.com/analytics/devguides/reporting/core/v3/ php client https://code.google.com/p/google-api-php-client/ 文档 https://developers.google.com/analytics/ v3 api 文档 https://developers.google.com/apis-explorer/#s/analytics/v3/ 可参照此教程来 https://developers.google.com/analytics/resources/tutorials/hello-analytics-api 其实最重要的一步就是oauth2.0验证了,这个是所有google api都需要的。 使用google的api client 库还比较方便。 大体流程是,需要在 https://code.google.com/apis/console/ 注册你的工程,这一步为以后请求api打基础。 创建项目,按照步骤来,在Api Acess选项,创建oauth client2.0 client ID。 Branding Information 界面填的信息是当你的web程序跳转到google认证页面时,google显示给用户看的,这样可以让用户知道是什么程序需要访问Ta的google账户,这个和openid有些像。 Client ID Settings 此界面需要你选择程序类型 Web application Service account Installed application 其中Service account是针对不需要访问google用户信息的程序,也就是不需要用户认证界面。像云存储,就不需要于某个用户关联。 这里使用google analytics还是需要用户信息的,所以应该选择Web application。 在Your site or hostname这一项中需要注意,这个链接是用于用户认证后google返回token的回调页面(http get,code参数带token),所以应该点击more options填上你希望google认证后跳转的页面,这个页面自然要负责将google的token保存在某个地方以便(一段时间内)下次使用。 点击创建clientid这时就为你创建好了用于api调用的oauth信息。 这样关键的oauth步骤就完成了,在其后就是查询api调用了。 https://developers.google.com/analytics/devguides/reporting/core/v3/reference DataGaServiceResource->data_ga->get方法是这样定义的: public function get($ids, $start_date, $end_date, $metrics, $optParams = array()) 我所碰到的问题是,有用户自定义的dimension,如果在dimensions参数中包含了此维,那么只会返回有此维值得结果,相当于sql 中where条件中的and is not null了。故在写此维数据时,如果没有值也应该写个字符串’(not set)’,以免查询时没有此维值得记录被过滤掉了。 Continue reading google analytics Core Reporting API 使用 转自:http://www.cnblogs.com/balaixianren/archive/2011/07/17/2108758.html 对比其他方案,第三种最普遍,参见http://www.enet.com.cn/article/2009/0309/A20090309442560.shtml css中让文本居中的属性很简单就可以实现,那就是设置text-align:center即可。而我这里所说的“元素”实际上是指容器,如果要有一个贴切点的标签,那应该可以用div来表示。 让元素水平居中,相信对于许多网页设计师而言都不会陌生。但是有的时候,自己就在想,为什么要让元素水平居中?是出于什么原因呢?都是一点自己的见解,蛮写下来... 首先,要 让元素水平居中,就必须得了解css设计中固定布局和流式布局两者的概念。它们之间的直观区别就看是否给元素设置了宽度。下面是两段代码,用来简单地说明固定布局和流式布局的区别。 1、固定布局demo: 2、流式布局demo: 通过上面两个例子,可以得出:流式布局不存在元素水平居中的可能,因为它都是满屏显示的。只有固定布局,因为限宽,所以就有了让元素水平居中的可能。 其次,固定布局的实现也不一定要让元素水平居中,之所以这么做,是为了让浏览器的两边能够留出平均的旁白,而不是只有一边是一大片空白,影响美观。 都是些浅显的知识,下面进入主题。 ============================================================================ 让元素水平居中的三种方式,我将分别进行介绍。如下: 1、自动外边距法。 这是目前网页设计人员最熟悉的一种方法,它需要给容器设置宽度,并设置margin:auto样式。下面是一段代码: 通过这段代码,可以发现,这种方式在在目前各种主流浏览器下(包括ie6)都能很好的显示,只有在ie6以下的版本不生效,元素依然向左排列。如果不考虑低版本浏览器的问题,那么它将是最便捷的。 2、文本居中和自动外边距的结合使用。 这种方式可以解决ie6以下版本不支持margin:0 auto的 问题,它的用法就是在body里设置text-align:center样式。具体代码如下: 在这里,text-align:center被作为css hack来使用,因为它本属于文本的样式,用在body里来实现元素居中的样式,做了本不属于自己该做的事... 3、负外边距法。 这种方式的实现方式比前两种复杂。它得结合定位来使用。具体代码如下: <head> 首先,让容器相对文档向右偏移50%,然后,将容器的左外边距设置为负的容器宽度的一半,即可实现元素的水平居中显示。这种方式没有hack,且兼容性很好,能在最广泛的浏览器下表现一致。 以上就是我所知道的三种实现元素水平居中的方法,都比较简单,写下来就当是一次知识的回顾总结吧。 Continue reading 【转】三种方式实现元素水平居中显示 之前还写过jna不错, http://blog.ureshika.com/archives/834.html ,但是这次想实现全局钩子快捷键,默认jna做不到,可能还要自己扩展。它没有完全封装user32 api,使用目前提供的不能判断shift, control 等系统组合键。 没办法只得使用jintellitype http://melloware.com/products/jintellitype/index.html 。 它的使用很简单,示例: 首先要将jintellitype .dll文件放到可加载目录中,也可放在包中,注意包名是com\melloware\jintellitype 注册alt + shift + b/B //第一个参数2是自己使用的标识符 JIntellitype.getInstance().registerHotKey(2, JIntellitype.MOD_ALT + JIntellitype.MOD_SHIFT, (int)'B'); //事件中的参数也是上面得标识符2 JIntellitype.getInstance().addHotKeyListener(new HotKeyListener() {...); 销毁: //这个2就是上面使用的标识符 JIntellitype.getInstance().unregisterHotKey(2); 注意有个问题就是注册函数registerHotKey第三个参数应该是大写字符,小写就不起作用。上面例子中无论用户按alt+shift+B或是alt+shift+b都会触发事件。 Continue reading swing全局钩子快捷键 之前一直用myeclipse,鼠标hover到某个函数上时,它的文档提示会延迟显示,这样挺好的。 现在用eclipse,发现提示太快,本来想看代码,但是一个提示把代码给遮住了,你得小心移过去让提示消失才能看见代码。 eclipse倒是提供了hovers设置,但是只能禁止和开启: Preference-->Java-->Editor-->Hovers 网上找了一下,可以使用注册表来增加延迟: 运行regedit HKEY_CURRENT_USER\Control Panel\Mouse\MouseHoverTime (REG_SZ) 如果没有就添加。 设置为delay值,单位为毫秒。 不过我试了一下,没有效果。重启一下系统后再试,确实可以了。300毫秒是比较合适的delay值。 Continue reading Eclipse hover提示太快的问题 今天六一,宝宝和大家都节日快乐。 使用maven要添加依赖,必须依赖是maven工程。现在我有个非maven工程怎么办,尝试了直接在build path中引用,结果找不到类,找了一下有没有对应插件,像这样的写法在maven3中又不支持: 最后想起老办法,在build path中增加link source指向引用工程的源码文件夹即可。 测试test和run都可以。 顺便提一下本地包的依赖写法: 其中basedir 指代项目根目录,version可随便写,但是必须要。 Continue reading maven 依赖类文件夹 myeclipse6 配置tomcat7 websocket相关
accordion, spry 与 jquery ui
var ops = {
header:'div.AccordionPanelTab', //指定header选择器
event:'mouseover' //指定事件
};
$( "#Accordion1" ).accordion(ops);
}); tab 控件 spry和idtabs 比较
$(function(){
var ops = {
event:'!mouseover',//when mouseover will go to that tab, default is click
start:1, //start tab is 2nd(0 start index)
click: function(id,list,set){
//id is the target id like #tab1
//list is the target tab contents
//set is the tab menu selector
$('li',set).removeClass('TabbedPanelsTabSelected');
$(this).parent().addClass('TabbedPanelsTabSelected');
return true;
}
};
var s = $("#TabbedPanels1 ul");
console.log(s);
s.idTabs(ops);
});
webservice 使用
google analytics Core Reporting API 使用
<?php
$client->setClientId('insert_your_oauth2_client_id');
$client->setClientSecret('insert_your_oauth2_client_secret');
$client->setRedirectUri('insert_your_oauth2_redirect_uri');
$client->setDeveloperKey('insert_your_developer_key');
?>
【转】三种方式实现元素水平居中显示
▲三种方式实现元素水平居中显示
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>position-layout</title>
<style type="text/css">
.wrapper{width:750px;position:relative;margin:0 auto;text-align:left;}
.contentArea{width:450px;position:absolute;top:0;left:150px;height:500px;background:#96c;}
.leftPanel{width:150px;position:absolute;top:0;left:0;height:500px;background:#999;}
.rightPanel{width:150px;position:absolute;top:0;left:600px;height:500px;background:#06C;}
</style>
</head>
<body>
<div class="wrapper">
<div class="contentArea"></div>
<div class="leftPanel"></div>
<div class="rightPanel"></div>
</div>
</body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>col3-margin-layout</title>
<style type="text/css">
.contentArea{margin:0 160px;height:500px;background:#96c;}
.leftPanel{width:150px;float:left;height:500px;background:#999;}
.rightPanel{width:150px;float:right;height:500px;background:#06C;}
</style>
</head>
<body>
<div class="wrapper">
<div class="leftPanel"></div>
<div class="rightPanel"></div>
<div class="contentArea"></div>
</div>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>position-layout</title>
<style type="text/css">
.wrapper{width:750px;margin:0 auto;position:relative;}
.contentArea{width:450px;position:absolute;top:0;left:150px;height:500px;background:#96c;}
.leftPanel{width:150px;position:absolute;top:0;left:0;height:500px;background:#999;}
.rightPanel{width:150px;position:absolute;top:0;left:600px;height:500px;background:#06C;}
</style>
</head>
<body>
<div class="wrapper">
<div class="contentArea"></div>
<div class="leftPanel"></div>
<div class="rightPanel"></div>
</div>
</body>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>position-layout</title>
<style type="text/css">
body{text-align:center;}
.wrapper{width:750px;position:relative;margin:0 auto;text-align:left;}
.contentArea{width:450px;position:absolute;top:0;left:150px;height:500px;background:#96c;}
.leftPanel{width:150px;position:absolute;top:0;left:0;height:500px;background:#999;}
.rightPanel{width:150px;position:absolute;top:0;left:600px;height:500px;background:#06C;}
</style>
</head>
<body>
<div class="wrapper">
<div class="contentArea"></div>
<div class="leftPanel"></div>
<div class="rightPanel"></div>
</div>
</body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>negative-margin-element-center</title>
<style type="text/css">
.wrapper{width:750px;position:relative;left:50%;margin-left:-375px;}
.contentArea{width:450px;position:absolute;top:0;left:150px;height:500px;background:#96c;}
.leftPanel{width:150px;position:absolute;top:0;left:0;height:500px;background:#999;}
.rightPanel{width:150px;position:absolute;top:0;left:600px;height:500px;background:#06C;}
</style>
</head>
<body>
<div class="wrapper">
<div class="contentArea"></div>
<div class="leftPanel"></div>
<div class="rightPanel"></div>
</div>
</body>
</html> swing全局钩子快捷键
JIntellitype.getInstance().cleanUp(); //这一句是卸载,会将dll文件删除,所以一般不需要调用。 Eclipse hover提示太快的问题
将列表项中的勾去掉。 maven 依赖类文件夹
<dependency>
<groupId>class-folder</groupId>
<artifactId>class-folder</artifactId>
<scope>system</scope>
<systemPath>E:/project/classes</systemPath>
</dependency>
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xxx.jar</systemPath>
</dependency>