当前位置:首页 » 文件传输 » 程序运行怎么访问实例
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

程序运行怎么访问实例

发布时间: 2022-09-06 00:47:57

1. 如何用eclipse运行别人的java实例

首先在eclipse中建立一个java project,然后在你建的这个project上右键建个package,然后在这个package上右键建个类,注意类名和你要运行的书上的代码的类名一直(或者自己随便定义一个类名然后把书上的代码粘过来,然后根据错误提示更改类名)。再没有错误提示之后右键选择run as就可以看到输出了

2. 如何用jhdl.jar运行实例程序

首先需要先加载JVM,然后根据jar中的函数签名寻找到相应的函数,然后运行相应的函数
一段样例代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166

#include <iostream>
#include <jni.h>
#include <windows.h>
#include <cstring>
#include <direct.h>
using namespace std;
#define DIRLEN 10000

char* GetJrepath(int BIT);
int CallJAR(int BIT,char*buf,char*classPath,char*functionName);
int main(int argc, char *argv[])
{
char * buff = new char[DIRLEN];
getcwd(buff,DIRLEN);
strcat(buff,"\\lib\\support.jar");
if (argc<3)
{
cout<<"输入参数错误";
return 0;
}
int BIT = 32;
if(!strcmp(argv[2],"64"))
BIT = 64 ;
//-30 没有安装jre环境 -31 创建jvm失败 -32 缺少相关的库
if (!strcmp(argv[1],"0"))
{
//-20 配置文件错误 -21 JSON异常
return CallJAR(BIT,buff,"com/run/Author","StartAuthor");
}
else if(!strcmp(argv[1],"1"))
{
return CallJAR(BIT,buff,"com/run/UpdateStatus","UpdateStatus1");
}
else if(!strcmp(argv[1],"2"))
{
return CallJAR(BIT,buff,"com/run/SendMsg_webchinese","SendSMS");
}
else
{
return CallJAR(BIT,buff,"com/run/UpdateStatus","UpdateANDSMS");
}

}
char* GetJrepath(int BIT)
{
#define MYBUFF 123
HKEY hKey;
long lRet;
char* dir = new char[MYBUFF];
DWORD dwBufLen = MYBUFF;
char* s = new char[MYBUFF];
if(BIT == 64)
strcpy(s,"SOFTWARE\\Wow6432Node\\JavaSoft\\Java Runtime Environment\\");
else
strcpy(s,"SOFTWARE\\JavaSoft\\Java Runtime Environment\\");
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT((TCHAR*)s),
0,
KEY_QUERY_VALUE,
&hKey);
if(lRet!=ERROR_SUCCESS)
return NULL;
lRet = RegQueryValueEx(hKey,
TEXT((TCHAR*)"CurrentVersion"),
NULL,
NULL,
(LPBYTE)dir,
&dwBufLen);
RegCloseKey(hKey);
if(lRet!=ERROR_SUCCESS)
return NULL;
strcat(s,dir);

lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
TEXT((TCHAR*)s),
0,
KEY_QUERY_VALUE,
&hKey);
if(lRet!=ERROR_SUCCESS)
return NULL;
dwBufLen = MYBUFF;
lRet = RegQueryValueEx(hKey,
TEXT((TCHAR*)"RuntimeLib"),
NULL,
NULL,
(LPBYTE)dir,
&dwBufLen);
RegCloseKey(hKey);
if(lRet!=ERROR_SUCCESS)
return NULL;
return dir;
}
int CallJAR(int BIT,char*buf,char*classPath,char*functionName)
{
typedef jint (WINAPI *PFunCreateJavaVM)(JavaVM **, void **, void *);

int res;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
JavaVM *jvm;
JNIEnv *env;
int len =strlen("-Djava.class.path=.;")+strlen(buf)+20;
char* temp = new char[len];
strcpy(temp,"-Djava.class.path=.;");
strcat(temp,buf);
/*设置初始化参数*/
//disable JIT,这是JNI文档中的解释,具体意义不是很清楚 ,能取哪些值也不清楚。
//从JNI文档里给的示例代码中搬过来的
options[0].optionString = "-Djava.compiler=NONE";
//设置classpath,如果程序用到了第三方的JAR包,也可以在这里面包含进来
options[1].optionString = temp;
//设置显示消息的类型,取值有gc、class和jni,如果一次取多个的话值之间用逗号格开,如-verbose:gc,class
//该参数可以用来观察C++调用JAVA的过程,设置该参数后,程序会在标准输出设备上打印调用的相关信息
options[2].optionString = "-verbose:NONE";

//设置版本号,版本号有JNI_VERSION_1_1,JNI_VERSION_1_2和JNI_VERSION_1_4
//选择一个根你安装的JRE版本最近的版本号即可,不过你的JRE版本一定要等于或者高于指定的版本号
vm_args.version = JNI_VERSION_1_4;
vm_args.nOptions = 3;
vm_args.options = options;
//该参数指定是否忽略非标准的参数,如果填JNI_FLASE,当遇到非标准参数时,JNI_CreateJavaVM会返回JNI_ERR
vm_args.ignoreUnrecognized = JNI_TRUE;
//加载JVM.DLL动态库
HINSTANCE hInstance = ::LoadLibrary(GetJrepath(BIT));
if (hInstance == NULL)
{
return -30;
}
//取得里面的JNI_CreateJavaVM函数指针
PFunCreateJavaVM funCreateJavaVM = (PFunCreateJavaVM)::GetProcAddress(hInstance, "JNI_CreateJavaVM");
//调用JNI_CreateJavaVM创建虚拟机
res = (*funCreateJavaVM)(&jvm, (void**)&env, &vm_args);
if (res < 0)
{
return -31;
}
//查找test.Demo类,返回JAVA类的CLASS对象
jclass cls = env->FindClass(classPath);
//根据类的CLASS对象获取该类的实例
if (cls==0)
{
printf("FindClass failed\n");
(jvm)->DestroyJavaVM();
return -32;
}
jobject obj = env->AllocObject(cls);

//获取类中的方法,最后一个参数是方法的签名,通过javap -s -p -classpath 路径 文件名
jmethodID mid = env->GetMethodID(cls, functionName,"()I");
if (mid==0)
{
printf("getMethodID failed\n");
(jvm)->DestroyJavaVM();
return -32;
}
//构造参数并调用对象的方法

jstring msg = (jstring) env->CallObjectMethod(obj, mid);

//销毁虚拟机并释放动态库
jvm->DestroyJavaVM();
::FreeLibrary(hInstance);
return (int)msg;
}

3. 如何获取应用程序的实例句柄

1. ? 应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用 AfxGetInstancdHandle 获得句柄. Example: HANDLE hInstance=AfxGetInstanceHandle(); 2. 如何通过代码获得应用程序主窗口的指针? 主窗口的 指针保存在CWinThread::m_pMainWnd 中,调用 AfxGetMainWnd 实现。 AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化. 3. 如何在程序中获得其他程序的 图标? 两种方法: (1) SDK 函数 SHGetFileInfo 或使用 ExtractIcon 获得图标资源的 handle, (2) SDK 函数 SHGetFileInfo 获得有关文件的 很多信息,如大小图标,属性,类型等. Example(1): 在程序窗口左上角显示 NotePad 图标. void CSampleView: OnDraw(CDC * pDC) { if( :: SHGetFileInfo(_T("c:\\pwin95\\notepad.exe"),0, &stFileInfo,sizeof(stFileInfo),SHGFI_ICON)) { pDC ->DrawIcon(10,10,stFileInfo.hIcon); } } Example(2): 同样功能,Use ExtractIcon Function void CSampleView:: OnDraw(CDC *pDC) { HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T ("NotePad.exe"),0); if (hIcon &&hIcon!=(HICON)-1) pDC->DrawIcon(10,10,hIcon); } 说明: 获得notepad.exe 的路径正规上来说用GetWindowsDirectory 函数得到,如果是 调用 win95 下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程 序,考虑应该全面点. 4. 如何编程结束应用程序?如何编程控制windows 的重新引导? 这是个很简单又是编程中经常要遇到的问题. 第一问,向窗口发送 WM_CLOSE 消息,调用 CWnd::OnClose 成员函数.允许对用户提示 是否保存修改过的数据. Example: AfxGetMainWindow()->SendMessage(WM_CLOSE); 还可以创建一个自定义的函数 Terminate Window void Terminate Window(LPCSTR pCaption) { CWnd *pWnd=Cwnd::FindWindow(NULL,pCaption); if (pWnd) pWnd ->SendMessage(WM_CLOSE); } 说明: FindWindow 函数不是提倡的做法,因为它无法处理标题栏自动改变,比如我们要 检测 Notepad 是不是已运行而事先不知道Notepad 的标题栏,这时 FindWindow 就无能 为力了,可以通过枚举 windows 任务列表的办法来实现。 在 机械出版社"Windows 95 API 开发人员指南"一书有比较详细的介绍,这里就不再多说乐。 第二问,Use ExitWindowsEx Function 函数控制系统是重新引导,还是重启 windows. 前面已经有人讲过乐,就不再提了。 5. 怎样加栽其他的应用程序? 我记得这好象是出场频度很高的问题。 三个SDK 函数 winexec, shellexecute,createprocess 可以使用。 WinExec 最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说 一下,比如泥用 SW_SHOWMAXMIZED 方式去加栽一个无最大化按钮的 程序,呵呵就是 Neterm,calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。 ShellExecute 较 WinExex 灵活一点,可以指定工作目录,下面的 Example 就是直接打开 c:\temp\1.txt,而不用加栽与 txt 文件关联的应用程序,很多安装程序完成后都会打开 一个窗口,来显示Readme or Faq,偶猜就是这么作的啦. ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED); CreateProcess 最复杂,一共有十个参数,不过大部分都可以用NULL 代替,它可以指定 进程的安全属性,继承信息,类的优先级等等.来看个很简单的 Example: STARTUPINFO stinfo; //启动窗口的信息 PROCESSINFO procinfo; //进程的信息 CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo); 6. 确定应用程序的 路径 前些天好象有人问过这个问题. Use GetMoleFileName 获得应用程序的路径,然后去掉可执行文件名。 Example: TCHAR exeFullPath[MAX_PATH]; // MAX_PATH 在API 中定义了吧,好象是128 GetMoleFileName(NULL,exeFullPath,MAX_PATH) 7. 获得各种目录信息 Windows 目录: Use "GetWindowsDirectory“ Windows 下的system目录: Use "GetSystemDirectory" temp 目录: Use "GetTempPath " 当前目录: Use "GetCurrentDirectory" 请注意前两个函数的第一个参数为 目录变量名,后一个为缓冲区; 后两个相反. 8. 如何自定义消息 也有人问过的,其实不难。 (1) 手工定义消息,可以这么写 #define WM_MY_MESSAGE(WM_USER+100), MS 推荐的至 少是 WM_USER+100; (2)写消息处理函数,用 WPARAM,LPARAM返回LRESULT. LRESULT CMainFrame::OnMyMessage(WPARAM wparam,LPARAM lParam) { //加入你的处理函数 } (3) 在类的 AFX_MSG处进行声明,也就是常说的"宏映射" 9. 如何改变窗口的图标? 向窗口发送 WM_SECTION 消息。 Example: HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON); ASSERT(hIcon); AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon); 10. 如何改变窗口的缺省风格? 重栽 CWnd:: PreCreateWindow 并修改CREATESTRUCT 结构来指定窗口风格和其他创建 信息. Example: Delete "Max" Button and Set Original Window's Position and Size BOOL CMainFrame:: PreCreateWindow (CREATESTRUCT &cs) { cs.style &=~WS_MAXINIZEMOX; cs.x=cs.y=0; cs.cx=GetSystemMetrics(SM_CXSCREEN/2); cs.cy=GetSystemMetrics(SM_CYSCREEN/2); return CMDIFramewnd ::PreCreateWindow(cs); } 11. 如何将窗口居中显示? Easy, Call Function CWnd:: Center Windows Example(1): Center Window( ); //Relative to it's parent // Relative to Screen Example(2): Center Window(CWnd:: GetDesktopWindow( )); //Relative to Application's MainWindow AfxGetMainWnd( ) -> Center Window( ); 12. 如何让窗口和 MDI 窗口一启动就最大化和最小化? 先说窗口。 在 InitStance 函数中设定 m_nCmdShow的 取值. m_nCmdShow=SW_SHOWMAXMIZED ; //最大化 m_nCmdShow=SW_SHOWMINMIZED ; //最小化 m_nCmdShow=SW_SHOWNORMAL ; //正常方式 MDI 窗口: 如果是创建新的应用程序,可以用 MFC AppWizard 的Advanced 按钮并在MDI 子窗口风 格组中检测最大化或最小化; 还可以重载 MDI Window 的PreCreateWindow函数,设置 WS_MAXMIZE or WS_MINMIZE;如果从 CMDIChildWnd 派生,调用 OnInitialUpdate 函数中 的 CWnd::Show Window来指定 MDI Child Window的 风格。 13. 如何使程序保持极小状态? 很有意思的 问题 这么办: 在恢复程序窗体大小时, Windows 会发送WM_QUERY-OPEN 消息,用 ClassWizard 设置成员函数 OnQueryOpen() ,add following code: Bool CMainFrame:: OnQueryOpen( ) { Return false; } 14. 如何限制窗口的大小? 也就是 FixedDialog 形式。 Windows 发送 WM_GETMAXMININFO 消息来跟踪, 响应它, 在 OnGetMAXMININFO 中写代码: 15. 如何使窗口不可见? 很简单,用SW_HIDE 隐藏窗口,可以结合 FindWindow,ShowWindow 控制. 16. 如何使窗口始终在最前方? 两种途径. BringWindowToTop(Handle); SetWindowPos 函数,指定窗口的 最顶风格,用WS_EX_TOPMOST 扩展窗口的 风格 Example: void ToggleTopMost( CWnd *pWnd) { ASSERT_VALID(pWnd); pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)? &wndNoTopMOST: &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE}; } 1. ?应用 程序的 实例句柄保存在 CWinAppIm_hInst ance 中,可以这么调用 AfxGetInstancdHa ndle 获得句柄.Example: HANDLE hInsta nce=AfxGetInstanceHandle( );2. 如何通过代码获得应 用程序主窗口的指针?主窗口 的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏 挠觉坷售践伟淀氖义钾伪吟 折蹬叹驻氧牢阀陵价介哗牌 现尿讹蠢怂珠泛浴珍礁溃轨 挥画雪瑞崇钳犀隐惜戌脆牵 汤炎渭族间擒琵呢 1. 显示和隐藏标题栏 1. ?应用程序的 实例句柄保 存在 CWinAppIm_hInstance 中,可以这么 调用 AfxGetInstancdHandle 获得句柄.Example: HANDLE hInstance=AfxGetInstanc eHandle();2. 如何通过代 码获得应用程序主窗口的指 针?主窗口的 指针保存在 CWinThread::m_p Mai 袋惯苔横附芭俏馏挠觉坷售践伟淀氖 义钾伪吟折蹬叹驻氧牢阀陵 价介哗牌现尿讹蠢怂珠泛浴 珍礁溃轨挥画雪瑞崇钳犀隐 惜戌脆牵汤炎渭族间擒琵呢 方法一:使用API 实现 1. ?应用程序的 实 例句柄保存在 CWinAppIm_hInstance 中, 可以这么调用 AfxGetInstancdHandle 获得句柄.Example : HANDLE hInstance=AfxGe tInstanceHandle();2. 如 何通过代码获得应用程序主窗 口的指针?主窗口的 指针保 存在 CWinThread::m_pMai 袋惯苔横附芭俏馏挠觉坷售 践伟淀氖义钾伪吟折蹬叹驻 氧牢阀陵价介哗牌现尿讹蠢 怂珠泛浴珍礁溃轨挥画雪瑞 崇钳犀隐惜戌脆牵汤炎渭族 间擒琵呢 //隐藏TitleBar LONG lStyle = ::GetWindowLong(this->m_hWnd, GWL_STYLE); ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle & ~WS_CAPTION); ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); 1. ?应用程序的 实例句柄保 存在 CWinAppIm_hInstance 中,可以这么 调用 AfxGetInstancdHandle 获得句柄.Example: HANDLE hInstance=AfxGetInstance Handle();2. 如何通过代码 获得应用程序主窗口的指针 ?主窗口的 指针保存在 CWinThread::m_p Mai 袋惯苔横附芭俏馏挠觉坷售践伟淀氖 义钾伪吟折蹬叹驻氧牢阀陵 价介哗牌现尿讹蠢怂珠泛浴 珍礁溃轨挥画雪瑞崇钳犀隐 惜戌脆牵汤炎渭族间擒琵呢 // 显示TitleBar ::SetWindowLong(this->m_hWnd, GWL_STYLE, lStyle | WS_CAPTION); ::SetWindowPos(this->m_hWnd, NULL, 0, 0, 0, 0,?SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED); 方法二:使用CWnd 成员函数ModifyStyle 实现 // 隐藏TitleBar ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED); // 显示TitleBar ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED); 1. ?应用程序的 实例句柄保存在 CWinAppIm_hI nstance 中,可以这么调用 AfxGetInstanc dHandle 获得句柄.Example: HANDLE hIn stance=AfxGetInstanceHan dle();2. 如何通过代码获 得应用程序主窗口的指针?主 窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭 俏馏挠觉坷售践伟淀氖义钾 伪吟折蹬叹驻氧牢阀陵价介 哗牌现尿讹蠢怂珠泛浴珍礁 溃轨挥画雪瑞崇钳犀隐惜戌 脆牵汤炎渭族间擒琵呢 2 . 怎么用SendMessage()来发送消息来清空它的内容? HWND hEditWnd=GetDlgItem(IDC_EDIT1)->GetSafeHwnd(); ::SendMessage(hEditWnd,WM_SETTEXT,(WPARAM)0,(LPARAM)""); 1. ?应用 程序的 实例句柄保存在 CWinAppIm_hInsta nce 中,可以这么调用 AfxGetInstancdHan dle 获得句柄.Example: HANDLE hInstan ce=AfxGetInstanceHandle( );2. 如何通过代码获得应用 程序主窗口的指针?主窗口 的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏 挠觉坷售践伟淀氖义钾伪吟折蹬叹驻氧牢阀陵价介哗牌现尿 讹蠢怂珠泛浴珍礁溃轨挥画 雪瑞崇钳犀隐惜戌脆牵汤炎 渭族间擒琵呢 3. 弹出文件的属性窗口 SHELLEXECUTEINFO ShExecInfo ={0}; ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ; ShExecInfo.hwnd = NULL; ShExecInfo.lpVerb = "properties"; ShExecInfo.lpFile = "c:\"; //也可以是文件 ShExecInfo.lpParameters = ""; ShExecInfo.lpDirectory = NULL; ShExecInfo.nShow = SW_SHOW; ShExecInfo.hInstApp = NULL; ShellExecuteEx(&ShExecInfo); 1. ?应用程序的 实例句柄 保存在 CWinAppIm_hInstance 中,可以这 么调用 AfxGetInstancdHandle 获得句柄.Example: HAND LE hInstance=AfxGetInsta nceHandle();2. 如何通过 代码获得应用程序主窗口的 指针?主窗口的 指针保存在 CWinThread::m _pMai 袋惯苔横附芭俏馏挠觉坷售践伟淀 氖义钾伪吟折蹬叹驻氧牢阀 陵价介哗牌现尿讹蠢怂珠泛 浴珍礁溃轨挥画 雪瑞崇钳犀隐惜戌脆牵汤炎渭族间擒琵呢 4. 删除一个目录下的所有文件 1. ?应用程 序的 实例句柄保存在 CWinAppIm_hInsta nce 中,可以这么调用 AfxGetInstancdHan dle 获得句柄.Example: HANDLE hInstanc e=AfxGetInstanceHandle() ;2. 如何通过代码获得应用 程序主窗口的指针?主窗口 的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏 挠觉坷售践伟淀氖义钾伪吟 折蹬叹驻氧牢阀陵价介哗牌 现尿讹蠢怂珠泛浴珍礁溃轨挥 画雪瑞崇钳犀隐惜戌脆牵汤 炎渭族间擒琵呢 BOOL DeleteDirectory(LPCTSTR DirName) { CFileFind tempFind; //声明一个CFileFind 类变量,以用来搜索 char tempFileFind[200]; //用于定义搜索格式 sprintf(tempFileFind,"%s\\*.*",DirName); //匹配格式为*.*,即该目录下的所有文件 BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind); //查找第一个文件 while(IsFinded) { IsFinded=(BOOL)tempFind.FindNextFile(); //递归搜索其他的文件 if(!tempFind.IsDots()) //如果不是"."目录 { char foundFileName[200]; strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200)); if(tempFind.IsDirectory()) //如果是目录,则递归地调用 { //DeleteDirectory char tempDir[200]; sprintf(tempDir,"%s\\%s",DirName,foundFileName); DeleteDirectory(tempDir); } else { //如果是文件则直接删除之 char tempFileName[200]; sprintf(tempFileName,"%s\\%s",DirName,foundFileName); DeleteFile(tempFileName); } } } tempFind.Close(); if(!RemoveDirectory(DirName)) //删除目录 { AfxMessageBox("删除目录失败!",MB_OK); return FALSE; } return TRUE; } 1. ?应用 程序的 实例句柄保存在 CWinAppIm_hInst ance 中,可以这么调用 AfxGetInstancdHa ndle 获得句柄.Example: HANDLE hInsta nce=AfxGetInstanceHandle( );2. 如何通过代码获得应 用程序主窗口的指针?主窗口 的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏 挠觉坷售践伟淀氖义钾伪吟 折蹬叹驻氧牢阀陵价介哗牌 现尿讹蠢怂珠泛浴珍礁溃轨 挥画雪瑞崇钳犀隐惜戌脆牵 汤炎渭族间擒琵呢 5.lib 和dll 文件的区别和联系 1. ?应用程序 的 实例句柄保存在 CWinAppIm_hInstance 中,可以这么调用 AfxGetInstancdHandle 获得句柄.Ex ample: HANDLE hInstance= AfxGetInstanceHandle();2 . 如何通过代码获得应用程 序主窗口的指针?主窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏挠觉 坷售践伟淀氖义钾伪吟折蹬 叹驻氧牢阀陵价介哗牌现尿 讹蠢怂珠泛浴珍礁溃轨挥画 雪瑞崇钳犀隐惜戌脆牵汤炎 渭族间擒琵呢 .dll 是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll 还有其他的文件格式如.ocx 等,所有的.dll 文件都是可执行。 1. ?应用程序的 实例句柄保存在 CWinAppIm_ hInstance 中,可以这么调用 AfxGetInsta ncdHandle 获得句柄.Example: HANDLE h Instance=AfxGetInstanceH andle();2. 如何通过代码 获得应用程序主窗口的指针? 主窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附 芭俏馏挠觉坷售践伟淀氖义 钾伪吟折蹬叹驻氧牢阀陵价 介哗牌现尿讹蠢怂珠泛浴珍 礁溃轨挥画雪瑞崇钳犀隐惜 戌脆牵汤炎渭族间擒琵呢 .lib 是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib 文件在那里。一般来说,与动态连接文件相对比,lib 文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib 文件,就必须: 1 包含一个对应的头文件告知编译器lib 文件里面的具体内容 2 设置lib 文件允许编译器去查找已经编译好的二进制代码 1. ?应用程序 的 实例句柄保存在 CWinAppIm_hInstanc e 中,可以这么调用 AfxGetInstancdHandle 获得句柄.E xample: HANDLE hInstance =AfxGetInstanceHandle();2 . 如何通过代码获得应用程 序主窗口的指针?主窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏挠 觉坷售践伟淀氖义钾伪吟折 蹬叹驻氧牢阀陵价介哗牌现 尿讹蠢怂珠泛浴珍礁溃轨挥 画雪瑞崇钳犀隐惜戌脆牵汤 炎渭族间擒琵呢 如果你想从你的代码分离一个dll 文件出来代替静态连接库,仍然需要一个lib 文件。这个lib 文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll 文件,一般情况下,lib 文件里有相应的dll 文件的名字和一个指明dll 输出函数入口的顺序表。如果不想用lib 文件或者是没有lib 文件,可以用WIN32 API 函数LoadLibrary、GetProcAddress。事实上,我们可以在 Visual C++ IDE 中以二进制形式打开lib 文件,大多情况下会看到ASCII 码格式的C++函数或一些重载操作的函数名字。 1. ?应用程序的 实例句柄保存在 CWinAppIm_hI nstance 中,可以这么调用 AfxGetInstanc dHandle 获得句柄.Example: HANDLE hIn stance=AfxGetInstanceHan dle();2. 如何通过代码获 得应用程序主窗口的指针?主 窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭 俏馏挠觉坷售践伟淀氖义钾 伪吟折蹬叹驻氧牢阀陵价介 哗牌现尿讹蠢怂珠泛浴珍礁 溃轨挥画雪瑞崇钳犀隐惜戌 脆牵汤炎渭族间擒琵呢 一般我们最主要的关于lib 文件的麻烦就是出现unresolved symble 这类错误,这就是lib 文件连接错误或者没有包含.c、.cpp 文件到工程里,关键是如果在C++工程里用了C 语言写的 lib 文件,就必需要这样包含: extern "C" { #include "myheader.h" } 这是因为C 语言写的lib 文件没有C++所必须的名字破坏,C 函数不能被重载,因此连接器会出错。 1. ?应用程序的 实例 句柄保存在 CWinAppIm_hInstance 中,可 以这么调用 AfxGetInstancdHandle 获得句柄.Example: H ANDLE hInstance=AfxGetIn stanceHandle();2. 如何通 过代码获得应用程序主窗口 的指针?主窗口的 指针保存在 CWinThread ::m_pMai 袋惯苔横附芭俏馏挠觉坷售践 伟淀氖义钾伪吟折蹬叹驻氧 牢阀陵价介哗牌现尿讹蠢怂 珠泛浴珍礁溃轨挥画雪瑞崇 钳犀隐惜戌脆牵汤炎渭族间擒 琵呢 1 WinExec 最简单,两个参数,前一个指定路径,后一个指定显示方式.后一个参数值得说 一下,比如泥用 SW_SHOWMAXMIZED 方式去加栽一个无最大化按钮的 程序,呵呵就是 Neterm,calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。 2 ShellExecute 较 WinExex 灵活一点,可以指定工作目录,下面的 Example 就是直接打开 c:\temp\1.txt,而不用加栽与 txt 文件关联的应用程序,很多安装程序完成后都会打开 一个窗口,来显示Readme or Faq,偶猜就是这么作的啦. ShellExecute(NULL,NULL,_T("1.txt"),NULL,_T("c:\\temp"),SW_SHOWMAXMIZED); 3 CreateProcess 最复杂,一共有十个参数,不过大部分都可以用NULL 代替,它可以指定 进程的安全属性,继承信息,类的优先级等等.来看个很简单的 Example: STARTUPINFO stinfo; //启动窗口的信息 PROCESSINFO procinfo; //进程的信息 CreateProcess(NULL,_T("notepad.exe"),NULL,NULL.FALSE, NORMAL_PRIORITY_ CLASS,NULL,NULL, &stinfo,&procinfo); 1. ?应用程序的 实例句柄保 存在 CWinAppIm_hInstance 中,可以这么调用 AfxGetIns tancdHandle 获得句柄.Example: HANDLE hInstance=AfxGetInstance Handle();2. 如何 通过代码获得应用程序主窗口的指针?主 窗口的 指针保存在 CWinThread::m_pMai 袋惯苔横附芭 俏馏挠觉坷售践伟淀氖义钾 伪吟折蹬叹驻氧牢阀陵价介 哗牌现尿讹蠢怂珠泛浴珍礁 溃轨挥画雪瑞崇钳犀隐惜戌 脆牵汤炎渭族间擒琵呢 在启动程序的时候ShellExecute 函数使用的比较多,下面详细的解释了它的有关参数! ShellExecute 函数打开或打印一个指定的文件。文件可以是可执行文件也可以是一个文档。 HINSTANCE ShellExecute( HWND hwnd, // 主窗口句柄 LPCTSTR lpOperation, // 字符串指针,指定要执行的操作 LPCTSTR lpFile, // 字符串指针,指定文件名或目录名 LPCTSTR lpParameters, // 字符串指针,指定传给可执行文件的参数 LPCTSTR lpDirectory, // 字符串指针,指定缺省目录 INT nShowCmd // 文件显示模式 ); 参数 hwnd 指定一个主窗体。 lpOperation 一个非空的字符串指针,指定操作方式。有以下操作方式可用 "open" 该函数打开由lpFile 指定的文件,文件可以是一个可执行文件,也可以是文档文件,也可以是一个要打开的目录。 "print" 该函数打印由lpFile 指定的文件。文件应该是一个文档文件。如果是一个可执行文件则运行这个文件就象指定用"opne"操作方式一样。 "explore" 函数打开浏览由lpFile 指定的目录窗口。 如果该参数为NULL,则相当于使用"open"操作方式。 lpFile 一个非空字符串指定要打开或打印的文件,或者是要打开浏览的目录名。该函数可以打开一个可执行文件或一个文档文件,也可以打印一个文件。 lpParameters 如果lpFile 指定一个可执行文件,则lpParameters 是一个指向非空字符串的指针,代表要传给这个应用程序的参数。 如果lpFile 指定一个文档文件,则其应该为空。 lpDirectory 非空字符串指定缺省目录 nShowCmd 如果lpFile 指定一个可执行文件,nShowCmd 指定应用程序运行时如何显示。可以是下列的值: 1. ?应用程序的 实例句柄保存在 CWinAppIm_hInstance 中 ,可以这么调用 AfxGetInstancdHandle 获得句柄.Examp le: HANDLE hInstance=AfxG etInstanceHandle();2. 如 何通过代码获得应用程序主 窗口的指针?主窗口的 指针 保存在 CWinThread::m_pMai 袋惯苔横附芭俏馏挠觉坷 售践伟淀氖义钾伪吟折蹬叹 驻氧牢阀陵价介哗牌现尿讹 蠢怂珠泛浴珍礁溃轨挥画雪 瑞崇钳犀隐惜戌脆牵汤炎渭 族间擒琵呢 值 意义 SW_HIDE 隐藏窗体,激活另一个窗口。 SW_MAXIMIZE 最大化显示 SW_MINIMIZE 最小化显示 SW_RESTORE 正常状态显示 SW_SHOW 激活并以其当前位置尺寸显示 SW_SHOWDEFAULT 以线程创建时传进的参数进行显示 SW_SHOWMAXIMIZED 激活并最大化显示 SW_SHOWMINIMIZED 激活但以最小化方式显示 SW_SHOWMINNOACTIVE 最小化显示,原来焦点窗体不变active. SW_SHOWNA 以其当前状态显示 SW_SHOWNOACTIVATE SW_SHOWNORMAL 以正常方式显示。 如果lpFile 指定的是文档文件,则nShowCmd 应该为0。 1. ?

4. 应用程序只运行一个实例怎么简单设置,比如火狐不借助扩展实现单实例运行,怎么设置

您好,感谢您对火狐的支持

因为火狐浏览器本身没有限定进程数的功能,因此目前暂时也没有办法锁定系统中只有一个火狐浏览器实例存在,请知晓!
您可以在火狐官方网站下载火狐浏览器,在火狐社区了解更多内容。希望我的回答对您有所帮助,如有疑问,欢迎继续在本平台咨询。

5. 如何使用 Visual C#来自动执行 Office 程序的运行实例

本文分步骤介绍如何从 Visual C# .NET 自动化客户端调用 Office 宏。

通过使用 Microsoft Office 自动化,您可以打开或创建一个新的包含 Visual Basic for Applications (VBA) 宏的文档并在运行时执行该宏。

下面的自动化客户端示例根据您在窗体上的选择操纵 Office 自动化服务器(Access、Excel、PowerPoint 或 Word)。当客户端启动自动化服务器后,将打开一个文档并接着调用两个宏。第一个宏是 DoKbTest,它没有参数。第二个宏是 DoKbTestWithParameter,有一个“String”类型的参数。

创建包含宏的 Office 文档

创建一个名为 C:\Doc1.doc 的 Word 文档。为此,请按照下列步骤操作:
在 Word 中,创建一个新文档。
按 Alt+F11 打开 Visual Basic 编辑器。
在“插入”菜单上,单击“模块”。
将下面的宏代码粘贴到新模块中:
'Display a message box that displays the application name.
Public Sub DoKbTest()
MsgBox "Hello from " & Application.Name
End Sub

'Display a message box with the string passed from the
'Automation client.
Public Sub DoKbTestWithParameter( sMsg As String )
MsgBox sMsg
End Sub

关闭 Visual Basic 编辑器,保存该 Word 文档,然后退出 Word。
使用与创建 Word 文档类似的步骤,创建一个名为 C:\Book1.xls 的 Excel 工作簿。
使用与创建 Word 文档类似的步骤,创建一个名为 C:\Pres1.ppt 的 PowerPoint 演示文稿。
创建一个名为 C:\Db1.mdb 的新 Access 数据库。为此,请按照下列步骤操作:
在“插入”菜单上,单击“模块”。
将宏代码粘贴到该新模块中。
保存该模块,然后退出 Access。
创建 Visual C# .NET 自动化客户端

启动 Microsoft Visual Studio .NET。在“文件”菜单上,单击“新建”,然后单击“项目”。在“项目类型”下,单击“Visual C# 项目”,然后单击“模板”下的“Windows 应用程序”。默认情况下会创建 Form1。
添加对 Access、Excel、PowerPoint 和 Word 对象库的引用。为此,请按照下列步骤操作:
在“项目”菜单上,单击“添加引用”。
在“COM”选项卡上,找到“Microsoft Word 10.0 对象库或 Microsoft Word 11.0 对象库”,然后单击“选择”。注意:如果您使用的是 Office XP 且尚未执行此操作,Microsoft 建议您下载并安装 Microsoft Office XP 主互操作程序集 (PIA)。有关 Office XP PIA 的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
328912 Microsoft Office XP 主互操作程序集 (PIA) 可供下载
为 Access、Excel 和 PowerPoint 对象库重复上一步。
在“添加引用”对话框中,单击“确定”以接受您的选择。如果系统提示您为选定的库生成包装,请单击“是”。
在“视图”菜单上,单击“工具箱”。向 Form1 添加一个“Combo Box”控件和一个“Button”控件。
双击“Button1”为按钮的“Click”事件处理程序生成定义。
将下面的代码粘贴到“button1_Click”处理程序中:
private void button1_Click(object sender, System.EventArgs e)
{
// Object for missing (or optional) arguments.
object oMissing = System.Reflection.Missing.Value;

//Switch based on the user selection.
switch (comboBox1.SelectedIndex)
{
case 0:
// Create an instance of Microsoft Access, make it visible,
// and open Db1.mdb.
Access.ApplicationClass oAccess = new Access.ApplicationClass();
oAccess.Visible = true;
oAccess.OpenCurrentDatabase("c:\\db1.mdb", false, "");

// Run the macros.
RunMacro(oAccess, new Object[]{"DoKbTest"});
RunMacro(oAccess, new Object[]{"DoKbTestWithParameter",
"Hello from C# Client."});

// Quit Access and clean up.
oAccess.DoCmd.Quit(Access.AcQuitOption.acQuitSaveNone);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oAccess);
oAccess = null;

break;

case 1:
// Create an instance of Microsoft Excel, make it visible,
// and open Book1.xls.
Excel.ApplicationClass oExcel = new Excel.ApplicationClass();
oExcel.Visible = true;
Excel.Workbooks oBooks = oExcel.Workbooks;
Excel._Workbook oBook = null;
oBook = oBooks.Open("c:\\book1.xls", oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);

// Run the macros.
RunMacro(oExcel, new Object[]{"DoKbTest"});
RunMacro(oExcel, new Object[]{"DoKbTestWithParameter",
"Hello from C# Client."});

// Quit Excel and clean up.
oBook.Close(false, oMissing, oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBook);
oBook = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject (oBooks);
oBooks = null;
oExcel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (oExcel);
oExcel = null;

break;

case 2:

// Create an instance of PowerPoint, make it visible,
// and open Pres1.ppt.
PowerPoint.ApplicationClass oPP = new PowerPoint.ApplicationClass();
oPP.Visible = MsoTriState.msoTrue;
PowerPoint.Presentations oPresSet = oPP.Presentations;
PowerPoint._Presentation oPres = oPresSet.Open("c:\\pres1.ppt",
MsoTriState.msoFalse, MsoTriState.msoFalse,
MsoTriState.msoTrue);

// Run the macros.
RunMacro(oPP, new Object[]{"'pres1.ppt'!DoKbTest"});
RunMacro(oPP, new Object[]{"'pres1.ppt'!DoKbTestWithParameter",
"Hello from C# Client."});

// Quit PowerPoint and clean up.
oPres.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPres);
oPres = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPresSet);
oPresSet = null;
oPP.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (oPP);
oPP = null;

break;

case 3:

// Create an instance of Word, make it visible,
// and open Doc1.doc.
Word.ApplicationClass oWord = new Word.ApplicationClass();
oWord.Visible = true;
Word.Documents oDocs = oWord.Documents;
object oFile = "c:\\doc1.doc";

// If the Microsoft Word 10.0 Object Library is referenced
// use the following code.
Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing);

// If the Microsoft Word 11.0 Object Library is referenced comment
// the previous line of code and uncomment the following code.
//Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing,
//ref oMissing, ref oMissing, ref oMissing, ref oMissing,
//ref oMissing, ref oMissing, ref oMissing, ref oMissing,
//ref oMissing, ref oMissing, ref oMissing, ref oMissing,
//ref oMissing, ref oMissing);

// Run the macros.
RunMacro(oWord, new Object[]{"DoKbTest"});
RunMacro(oWord, new Object[]{"DoKbTestWithParameter",
"Hello from C# Client."});

// Quit Word and clean up.
oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oDoc);
oDoc = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject (oDocs);
oDocs = null;
oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
System.Runtime.InteropServices.Marshal.ReleaseComObject (oWord);
oWord = null;

break;

}

GC.Collect(); //Garbage collection.
}

在“button1_Click”处理程序之后添加下面的函数:
private void RunMacro(object oApp, object[] oRunArgs)
{
oApp.GetType().InvokeMember("Run",
System.Reflection.BindingFlags.Default |
System.Reflection.BindingFlags.InvokeMethod,
null, oApp, oRunArgs);
}

在“视图”菜单上,单击“设计器”,然后双击“Form1”,以生成该窗体的“Load”事件的定义。
将下面的代码粘贴到“Form1_Load”处理程序中:
private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
comboBox1.Items.AddRange(new object[]
{"Access", "Excel", "PowerPoint", "Word"});
comboBox1.SelectedIndex = 0;
}

滚动到代码窗口的顶部,然后将下面的代码行添加到“using”指令列表的末尾:
using System.Reflection;
using Access = Microsoft.Office.Interop.Access;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Office.Core;

运行并测试自动化客户端

按 F5,以运行该应用程序。
从“ComboBox1”中选择一个 Office 应用程序,然后单击“Button1”。随即将启动您所选的 Office 应用程序,并运行 DoKBTest 和 DoKBTestWithParameter 宏。
疑难解答

当您在 Visual C# .NET 项目中引用 Access 10.0 对象库时,可能会收到一条错误消息,说明未能将该库转换为 .NET 程序集。

有关如何解决此错误以成功引用 Access 10.0 对象库的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
317157 PRB:在使用 Visual Studio .NET 引用 Access 10.0 类型库时出错

6. java怎么实现单实例运行

Java实现单例的5种方式
1. 什么是单例模式
单例模式指的是在应用整个生命周期内只能存在一个实例。单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。
2. 单例模式和静态类的区别
首先理解一下什么是静态类,静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。Math类就是一个静态类。
知道了什么是静态类后,来说一下他们两者之间的区别:
1)首先单例模式会提供给你一个全局唯一的对象,静态类只是提供给你很多静态方法,这些方法不用创建对象,通过类就可以直接调用;
2)单例模式的灵活性更高,方法可以被override,因为静态类都是静态方法,所以不能被override;
3)如果是一个非常重的对象,单例模式可以懒加载,静态类就无法做到;
那么时候时候应该用静态类,什么时候应该用单例模式呢?首先如果你只是想使用一些工具方法,那么最好用静态类,静态类比单例类更快,因为静态的绑定是在编译期进行的。如果你要维护状态信息,或者访问资源时,应该选用单例模式。还可以这样说,当你需要面向对象的能力时(比如继承、多态)时,选用单例类,当你仅仅是提供一些方法时选用静态类。

7. 如何让应用程序单实例运行

、VC实现
Visual C++ WIN32编程主要强编程工具引用名说VC想没VC做废少说面看看用VC何功能
A. 使用编译器实现(使用MFC框架):
.cpp文件加几行:#pragma data_seg("Shared") int volatile g_lAppInstance =0; #pragma data_seg()

我看面内容:
第句 #pragma data_seg("Shared") 创建称Shared 新节
第二句 int volatile g_lAppInstance =0 g_lAppInstance 放入Shared节注意g_lAppInstance初始化编译器才其放入Shared节否则放入Shared外节(实际Visual C++ 编译器提供allocate 说明符使我数据放任何节)
第三句指示编译器Shared 节结束#pragma comment(linker,"/section:Shared,RWS")
句我使编译链接器知道我Shared节具读写共享属性我实现互斥运行关键我应用程序间实例间共享g_lAppInstance 变量
InitInstance() 函数加入:if(++g_lAppInstance>1) { AfxMessageBox("程序已经运行!"); return FALSE; }
代码作用程序始g_lAppInstancd 加1 发现其值于1显示Message Box ,并返FALSE(注意:MFCInitInstance返FALSE程序运行)

B.使用命名互斥象:

使用API函数CreateMutex创建命名互斥象实现程序互斥比较通用我IninInstance()函数加入代码:HANDLE hObject = CreateMutex(NULL,FALSE,"LJPXYXC"); if(GetLastError() == ERROR_ALREADY_EXISTS) { CloseHandle(hObject); AfxMessageBox("程序已经运行!"); return FALSE; }
CreateMutext函数创建称LJPXYXC命名互斥象程序第二实例运例调用CreateMutex 返ERROR_ALREADY_EXISTS我根据值实现程序互斥运行

二、VB实现

VB实现程序全局象App.PreInstance实现功能App.PreInstance boolean型值其值True说明程序已实例运行False程序运行
我窗体载入事件编程实现功能,代码:Private sub Form1_load() If App.PreInstance = True then MsgBox 程序已经运行 Unload me End if End sub
三、Delphi,C++Builder 实现
我没发现Delphi C++Builder 编译器实现像VC功能所我调用CreateMutex实现功能

CreateMutext(),GetLastError()两函数详细信息参考MSDN.

8. 怎么运行书上的java程序实例(都是java和class文件)

呵呵!书上说的只是方法,可能你编译环境,applet什么都没有弄好,具体我也不知道怎么说,给我感觉就是你环境没有设置好,你应该先运行下小程序看看!