50,532
社区成员
发帖
与我相关
我的任务
分享
package com.resoft.scan;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.ole.win32.OLE;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.OleControlSite;
import org.eclipse.swt.ole.win32.OleFrame;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import com.resoft.scan.constant.ScanConstant;
/**
*
* @author wanglei
*
*/
public class ScanDome extends SelectionAdapter {
private OleAutomation oleAutomation ;
public void initUI(){
final Display display = new Display();
Shell shell = new Shell(display,SWT. APPLICATION_MODAL|SWT.CLOSE);
shell.setText("扫描");
// Your code goes here (widget creation, set result, etc).
shell.setSize(700, 600);
Menu menu = new Menu(shell, SWT.BAR);
MenuItem scanItem = new MenuItem(menu,SWT.PUSH);
scanItem.setText("扫描");
scanItem.addSelectionListener(this);
shell.setMenuBar(menu);
OleFrame oleFrame = new OleFrame(shell, SWT.NONE);
oleFrame.setSize(700, 500);
oleFrame.setVisible(true);
OleControlSite clientSite = new OleControlSite(oleFrame, SWT.NONE, ScanConstant.OCX_ID);
clientSite.setSize(700, 500);
clientSite.setRedraw(true);
clientSite.doVerb(OLE.OLEIVERB_SHOW);
clientSite.pack();
oleAutomation = new OleAutomation(clientSite);
this.ShowUI(false);
this.imageScrollactivated();
this.SelectSource(false);
shell.setLayout(new FillLayout());
//打开界面
shell.open();
shell.layout();
//开始扫描
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
System.exit(0);
}
@Override
public void widgetSelected(final SelectionEvent e) {
this.startScan("8729c703d72b4e9a8e871621a57f2676;1111;1111");
}
/**
* 多点几次就出现卡死的情况<br>
* 看日志 扫描的文件已经写入 文件件<br>
* 日志到达 启动扫描仪就卡住了, <br>
* 之后应该是结束扫描,但是一直没有返回值。<br>
*
* 测试要求 安装中软OCX控件,安装虚拟扫描仪<br>
* @param args
*/
public static void main(String[] args){
ScanDome scanDome = new ScanDome();
scanDome.initUI();
}
/**
* 执行 命令
* @param auto
* @param methodName
* @param arg
* @return
*/
private Variant execute(OleAutomation auto, String methodName, Object arg[]) {
int[] ids = auto.getIDsOfNames(new String[] { methodName });
System.out.print("method:" + methodName + " " + "arg:" + arg + " id:" + ids[0]);
Variant rtnv;
Variant[] rgvarg = null;
if (null == arg) {
rtnv = auto.invoke(ids[0]);
} else {
rgvarg = new Variant[arg.length];
for (int i = 0; i < arg.length; i++) {
if (arg[i] instanceof Boolean) {
rgvarg[i] = new Variant((Boolean) arg[i]);
} else if (arg[i] instanceof Integer) {
rgvarg[i] = new Variant((Integer) arg[i]);
} else {
rgvarg[i] = new Variant((String) arg[i]);
}
}
rtnv = auto.invoke(ids[0], rgvarg);
}
System.out.println(" rtnv:" + rtnv);
return rtnv;
}
/**
* @param 开始扫描
*/
public void startScan(String requestId)
{
execute(oleAutomation, ScanConstant.START_SCAN, new String[] { requestId+";111;111;" });
}
/**
* @param 显示扫描仪设置
*/
public void ShowUI(boolean isShowUI)
{
execute(oleAutomation, ScanConstant.SHOW_UI, new Object[] {isShowUI});
}
/**
* @param 选择扫描源
*/
public void SelectSource(boolean isSelectSource)
{
execute(oleAutomation, ScanConstant.SELECT_SOURCE, new Object[] {isSelectSource});
}
/**
* @param 激活控件
* @return
*/
public void imageScrollactivated()
{
execute(oleAutomation, ScanConstant.IMG_SCROLL_ACTIVATED,null);
}
}