删除文章

确定要删除这篇文章吗?

取消
确定

统计程序实例的个数

     阅读(623)  2017-04-17 18:04:43

/**********windows核心编程实例17-AppInst**********/
/***展示:应用程序如何知道在任一时刻有多少个自己的实例正在运行***/

#include <windows.h>
#include "resource.h"

int g_uMsgAppInstCountUpdate = WM_APP + 123;

#pragma data_seg("Shared")
volatile LONG g_lApplicationInstances = 0;
#pragma data_seg()

#pragma comment(linker, "/Section:Shared,RWS") // 引号内不能加空格

void DlgCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch (id)
    {
    case IDCANCEL:
        EndDialog(hwnd, id);
        break;

    default:
        break;
    }
}

INT_PTR WINAPI DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if (uMsg == g_uMsgAppInstCountUpdate)
    {
        SetDlgItemInt(hwnd, IDC_COUNT, g_lApplicationInstances, FALSE);
    }

    switch (uMsg)
    {
    case WM_INITDIALOG:
        PostMessage(HWND_BROADCAST, g_uMsgAppInstCountUpdate, 0, 0);
        break;

    case WM_COMMAND:
        DlgCommand(hwnd, LOWORD(wParam), (HWND)lParam, uMsg);
        break;

    default:
        break;
    }

    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PTSTR, int)
{
    g_uMsgAppInstCountUpdate = RegisterWindowMessage(TEXT("MsgAppInstCountUpdate"));
    
    InterlockedExchangeAdd(&g_lApplicationInstances , 1);
    
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);

    InterlockedExchangeAdd(&g_lApplicationInstances, -1);

    PostMessage(HWND_BROADCAST, g_uMsgAppInstCountUpdate, 0, 0);

    return 0;
}

2011-08-10

文章评论

Keep it simple,stupid
文章数
300
总访问量
443050
今日访问
939
最近评论

xuehaoyun : 很不错,来围观一下
tujiaw : 抱歉csdn code服务关闭了,这个代码我也找不到了
于淞 : 你好,这个文章的源码能分享一下吗,songsong9181@163.com,谢谢了 上面的写错了
于淞 : 你好,这个文章的源码能分享一下吗,838106303@163.com,谢谢了 上面的链接不能用了
tujiaw : 多谢多谢
essaypinglun college-paper.org : 很好的博客,赞赞
Folly : 这个实现有点奇怪,Qt为什么没有统一的比对方法。
过多s : alert("hello, world!")
tujiaw : 还不错哦
回到顶部