首页 > 编程 > C > 正文

如何编写跨平台应用程序

2023-06-09 12:08:05
字体:
来源:转载
供稿:网友

本文介绍了编写跨平台应用程序的方法。

我们使用的许多著名的应用程序,比如VC,WINRAR,SVN等等,都既能在WIN下运行,也支持ming令行操作。这是很爽的,习惯在可视化下操作的同志,可以使用GUI界面操作,习惯怀旧或者喜欢ming令行操作的同志,可以使用ming令操作。同时我们也可以根据不同情况灵活运用,如果你要把硬盘上多于一百个的影视文件分别压缩成压缩包,并加入说明文件,使用可视化操作显示是一件费时费力的工作,但使用ming令行写一个简单的批处理循环,就可以轻松完成。这时你会十分感激那些提供操作系统的大佬们,他们在操作系统里集成的一个简单的SHELL的英明的决策使你轻松了多少呀。

这里简单介绍一下如何写一个程序,使我们的程序可以支持跨平台操作,既带ming令行,又可以可视操作。

要写一个简单的跨WIN和DOS的程序是很简单的,要是还想能在LIUNX上运行,那可能会复杂一些。

由于对LIUNX知之不多,这里只对制作WIN和DOS程序做一些简单的介绍。制作DOS和WIN下运行的程序,有两种方法。

第一种方法:

先用标准C或者C++写一个DOS程序,然后使用其他可视化编程工具如VC,VB或者DELPHI编写一个界面,然后使用BUTTON通过调用函数WinExec或者ShellExecute或者CreateProcess来执行写的DOS程序。

这里使用转载来的别人的例子来说明如何调用:

三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。

WinExec 两个参数,前一个指定路径,后一个指定显示方式。

ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。

CreateProcess  一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。

三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:

(一)WinExec

这个函数最简单,只有两个参数,原型如下:

 UINT WinExec(

LPCSTR lpCmdLine,   // ming令路径

UINT uCmdShow      // 显示方式

 );

使用方法如下:

WinExec("Notepad.exe", SW_SHOW);  // 打开记事本

WinExec("D://Program Files//Test//Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打开Test.exe

需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。

这个函数只能打开exe文件。

需要的头文件:windows.h,winbase.h(前者是试验出来,后者是msdn上说明),另外,这两者的先后顺序不能变。

msdn上的说明:http://msdn.microsoft.com/en-us/library/ms687393(VS.85).aspx

(二)ShellExecute

原型如下:

HINSTANCE ShellExecute(

HWND hwnd,           //父窗口句柄

LPCTSTR lpOperation,   //操作, 打开方式 "edit","explore","open","find","print","NULL"

LPCTSTR lpFile,         //文件名,前面可加路径

LPCTSTR lpParameters,   //参数

LPCTSTR lpDirectory,    //默认文件夹

INT nShowCmd          //显示方式

);

使用方法如下:

ShellExecute(NULL,"open","C://Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打开C:/Test.txt 文件

ShellExecute(NULL, "open", http://www.VeVb.com/,  NULL, NULL, SW_SHOWNORMAL); // 打开网页www.VeVb.com

ShellExecute(NULL,"explore", "D://C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:/C++

ShellExecute(NULL,"print","C://Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:/Test.txt

ShellExecute不支持定向输出。

这个函数可以打开任意文件,会调用系统注册的程序来打开对应后缀名的文件。

需要的头文件:windows.h,shellapi.h(前者是我试验出来的,后者是msdn说需要的)。另外这两者的先后顺序不能变。

msdn上说明:http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx

(三)CreateProcess

原型如下:

BOOL CreateProcess(

LPCTSTR lpApplicationName, //执行程序名

LPTSTR lpCommandLine,  // 参数行

//下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性

LPSECURITY_ATTRIBUTES lpProcessAttributes,  // process security attributes

LPSECURITY_ATTRIBUTES lpThreadAttributes,   // thread security attributes

BOOL bInheritHandles,  // 继承标志

DWORD dwCreationFlags, // 创建标志

LPVOID lpEnvironment,  // 环境变量

LPCTSTR lpCurrentDirectory,   // 运行该进程的初始目录

LPSTARTUPINFO lpStartupInfo,  // 用于在创建子进程时设置各种属性

LPPROCESS_INFORMATION lpProcessInformation //在进程创建后接受相关信息

);

使用方法如下:

PROCESS_INFORMATION pi;

STARTUPINFO si;

memset(&si,0,sizeof(si));

si.cb=sizeof(si);

si.wShowWindow=SW_SHOW;

si.dwFlags=STARTF_USESHOWWINDOW;

bool fRet=CreateProcess("D://putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);

这个函数可以打开任意文件,会调用系统注册的程序来打开对应后缀名的文件。

需要的头文件:windows.h,winbase.h(前者是试验出来,后者是msdn上说明),另外,这两者的先后顺序不能变。

msdn上的说明:http://msdn.microsoft.com/en-us/library/ms682425](VS.85).aspx

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表