61阅读

应用程序正在运行-微软演示Xbox运行Windows 10应用程序

发布时间:2017-11-18 所属栏目:运行

一 : 微软演示Xbox运行Windows 10应用程序

  【61k新闻频道消息】 微软Windows通用应用程序负责人凯文•加洛,今天在巴塞罗那移动世界大会上演示了微软Xbox One运行Windows 10应用程序。虽然它不是像邮件或照片等应用程序,凯文•加洛展示的App demo,旨在个人电脑,手机和Xbox上通用运行。对开发者来说,微软正在构建Windows 10的可扩展性和适应性的用户界面,使通用应用程序更容易横跨电脑,手机,平板电脑,甚至游戏机来运行。

微软演示Xbox运行Windows 10应用程序

  这家软件巨头将在四月份即将到来的构建开发者大会上详细介绍这项计划,开发商应该能够在今年夏季期开始推出跨微软多多个平台的应用程序。

  凯文•加洛还透露,微软计划在Windows 10上使用托管的Web应用程序,这是一种新的方式,让开发者可以在Windows应用商店当中带来自己的网站,其中集成Cortana语音助手,用户可以访问通知,联系人,日历和摄像头。

  这可能是微软争取开发商的一个简单的投资方式。凯文•加洛讨论了微软的自适应用户界面,这本质上是一种方式,让开发人员能够类似Web开发人员如何设计网站那样,创建自己的应用程序。

二 : VC保证应用程序只有一个实例在运行

HANDLE m_hMutex = ::CreateMutex(NULL,TRUE,m_pszName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
  AfxMessageBox("您已经运行了本软件!");//弹出对话框确认不能运行第二个实例。(www.61k.com)
   return FALSE;
}


让程序只运行一个实例的四种方法


源代码下载:http://d.download.csdn.net/down/907655/magictong


 


综述:让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果有说明已经有一个实例在运行了,则当前程序通知用户怎样怎样,然后程序退出,当然方法有这么多,各自也就有自己的优缺点了。<注意下面的程序都是分块拷贝的>


 


方法一:
我用得做多的方法是创建互斥体Mutex,使用Mutex代码比较简洁,但是此时不能取得已经启动的实例窗口局柄,因此无法激活已经启动的实例窗口,代码如下:
// -------------------------------------------------------------------------
// 函数 : CreateSendingWNDList
// 功能 : 创建互斥量,用于保证只启动一个进程
// 返回值 : int 
//      成功 0
//  失败 -1
//  存在进程实例 1
// 附注 : 
// -------------------------------------------------------------------------
int CreateSendingWNDList(const TCHAR *pstrKSCoreAppName)
{
 //-------防止多次起动---------- 
 HANDLE hMutex = ::CreateMutex(0, true, pstrKSCoreAppName);
 int nRet = 0;
 if (hMutex)
 { 
 if(GetLastError() == ERROR_ALREADY_EXISTS) 
 {
  nRet = 1;
 }
 else
 {
  nRet = 0;
 }
 }
 else
 {
 nRet = -1;
 }


 return nRet;
}


// 在创建窗口前调用下面代码
switch(CreateSendingWNDList(g_strKSCoreAppName))
{
case 0: 
 // 正常启动
 // TODO……


 break; 
case 1: 
 // 已存在进程,退出
 {
 ::MessageBox(NULL, TEXT("已经有一个实例在运行了。"), TEXT("注意"), MB_OK);
 }


case -1:// 无法创建,退出
default: 
 return FALSE;
}


 


方法二:
一般来说,使程序只运行一个实例的最简单的方法当然是使用FindWindow()查找主窗口,如果主窗口已经存在了,当然说明已经有一个实例运行了。代码如下:
// 这种方法有缺陷,窗口名字改变之后就再也找不到了,FindWindow()的参数ClassName和Caption比较难取得。
HWND hWnd = FindWindow(NULL, TEXT("SingleInstanceFW"));
if(IsWindow(hWnd))
{
 ::MessageBox(NULL, TEXT("已经有一个实例在运行了。"), TEXT("注意"), MB_OK);
 ::ShowWindow(hWnd, SW_NORMAL);  // 显示
 ::SetForegroundWindow(hWnd);   // 激活
 return FALSE;
}


 


方法三:


这种方法相比上面两种方法,避免上面两种方法的缺点,通过SetProp()为程序主窗口设置一个特殊的Property,然后在启动时遍历所有的窗口,找出包含着个Property的窗口局柄


。【这个附加的窗口属性在窗口销毁时也应该销毁】这个方法的缺点就是代码比较多一点,如下:


// 声明全局的 属性 名和 属性值
TCHAR g_strKSCoreAppName[] = _T("AFX_KSInstall_CPP__12036F8B_8301_46e2_ADC5_A14A44A85877__");
HANDLE g_hValue = (HANDLE)1022;


// 定义枚举窗口回调函数
BOOL CALLBACK EnumWndProc(HWND hwnd, LPARAM lParam)
{
 //TCHAR str[200] = {0};
 //::GetWindowText(hwnd, str, 200);
 HANDLE h = GetProp(hwnd, g_strKSCoreAppName);
 if(h == g_hValue)
 {
 *(HWND*)lParam = hwnd;
 return FALSE;
 }
 return TRUE;
}


// 主窗口创建前判断
HWND oldHWnd = NULL;
::EnumWindows(EnumWndProc,(LPARAM)&oldHWnd);  //枚举所有运行的窗口
if (oldHWnd != NULL)
{
 ::MessageBox(NULL, TEXT("已经有一个实例在运行了。"), TEXT("注意"), MB_OK);


 ::ShowWindow(oldHWnd, SW_NORMAL);  // 显示
 ::SetForegroundWindow(oldHWnd);   // 激活
 return FALSE;
}


// 主窗口创建后设置,为窗口附加一个属性
::SetProp(m_hWnd, g_strKSCoreAppName, g_hValue);


// 主窗口退出时移除该附加属性
::RemoveProp(m_hWnd, g_strKSCoreAppName);


 


方法四:(lxshanye亲测,推荐使用)


上面的方法二和方法三都有一个弊病,不知道大家发现没,那就是依赖于窗口的存在,没有窗口的程序怎么办了,用方法一是可以的,不过方法一不太适合即时修改状态,譬如我想提供选项给用户,可以即时修改是否允许多实例,像KMP就提供了即时修改是否允许多实例,使用全局变量是一个比较好的解决方案,使用全局共享变量的方法则主要是在VC框架程序中通过编译器来实现的。通过#pragma data_seg预编译指令创建一个新节,在此节中可用volatile关键字定义一个变量,而且必须对其进行初始化。Volatile关键字指定了变量可以为外部进程访问。最后,为了使该变量能够在进程互斥过程中发挥作用,还要将其设置为共享变量,同时允许具有读、写访问权限。这可以通过#pragma comment预编译指令来通知编译器。下面给出使用了全局变量的进程互斥代码清单:

扩展:vc 只运行一个实例 / 港股保证金交易 实例 / vc串口通信实例




#pragma data_seg("Shared") 
int volatile g_lAppInstance = 0; 
#pragma data_seg() 
#pragma comment(linker,"/section:Shared,RWS")


if (0 == g_lAppInstance)
{
 g_lAppInstance = 1;
}
else if (1 == g_lAppInstance)
{
 ::MessageBox(NULL, TEXT("已经有一个实例在运行了。"), TEXT("注意"), MB_OK);
 return FALSE;
}
else
{
 // 直接启动
}


【注意,代码应该放在程序的入口处】


其实上面的方法可以两种进行组合来实现一些比较特殊的需求,具体怎样就自己去想了。

扩展:vc 只运行一个实例 / 港股保证金交易 实例 / vc串口通信实例

三 : 怎样在win8下运行debug程序

这个夏天199271

Win8下运行debug程序

(1)在互联网上下载DOSBOX、DEBUG32.EXE或debug.exe程序,把DOSBOX程序安装 在计算机中。

DEBUG32.EXE或debug.exe程序:

(2)在已知路径的文件夹中存储DEBUG32.EXE或debug.exe程序。

本例中Debug.exe在f:\1下的文件夹内。

(3)双击运行安装好的DOSBOX程序:

出现下面界面:

(4)依次输入以下命令:

1> Mount c f:\1 *********** 这个指令的意思是将1这个文件夹挂载为DOSBOX 的C盘(这样1文件夹就是DOSBOX的C盘) 2> C: *********** 切换到C盘

3> Debug32

这个夏天199271

上面的界面窗口已经打开了debug,其后操作和操作debug相同,退出时输入命令:quit 并点击enter键,就退出debug调试,重新进入DOSBOX程序中。

本文标题:应用程序正在运行-微软演示Xbox运行Windows 10应用程序
本文地址: http://www.61k.com/1061312.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1