• wince只运行一次应用程序


    在winform中阻止同一个程序运行多次有很多方式,如用FindWindow、Mutex和C#直接Process遍历,但在wince中上面的方法都行不通

     FindWindow找不到对应的窗体句柄,CreateMutex创建的信号量总返回87(无论运行几个相同的应用程序),Process更是没有相关方法,通过

    几个小时的摸索,在ce中可以用进程快照实现此功能,下面是我用C++和C#实现的遍历process的功能  

    C++控制台应用程序为

    // Test2.cpp : 定义控制台应用程序的入口点。
    //
    #include "StdAfx.h"
    #include <windows.h>
    #include "tlhelp32.h"
    #include "stdio.h"
    #pragma comment(lib,"Toolhelp.lib")//ce系统类库
    int _tmain(int argc, _TCHAR* argv[])
    {
       PROCESSENTRY32 pe32;
       pe32.dwSize=sizeof(pe32);
       HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
       if(hProcessSnap==INVALID_HANDLE_VALUE)
       {
      printf("CreateToolhelp32Snapshot 调用失败.\n");
      return -1;
       }
       
       BOOL bMore=::Process32First(hProcessSnap,&pe32);
       while(bMore)
       {
      printf("进程名称:%s\n",pe32.szExeFile);
      printf("进程ID:%u\n\n",pe32.th32ProcessID);
      bMore=::Process32Next(hProcessSnap,&pe32);
       }
       ::CloseHandle(hProcessSnap);
       return 0;
    }

    C#

    namespace SmartDeviceProject1
    {
        static class Program
        {
            [DllImport("Toolhelp.dll")]
            public static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processid);
            [DllImport("Coredll.dll")]
            public static extern int CloseHandle(IntPtr handle);
            [DllImport("Toolhelp.dll")]
            public static extern int Process32First(IntPtr handle,ref PROCESSENTRY32 pe);
            [DllImport("Toolhelp.dll")]
            public static extern int Process32Next(IntPtr handle,ref PROCESSENTRY32 pe);
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [MTAThread]
            static void Main()
            {
                IntPtr handle = CreateToolhelp32Snapshot((uint)SnapShotFlags.TH32CS_SNAPPROCESS, 0);
                if ((int)handle != -1) 
                {
                    PROCESSENTRY32 pe32 = new PROCESSENTRY32();
                    pe32.dwSize = (uint)Marshal.SizeOf(typeof(PROCESSENTRY32));
                    int bMore = Process32First(handle, ref pe32);
                    PROCESSENTRY32 pe;
                    while (bMore==1) 
                    {
                        IntPtr temp = Marshal.AllocHGlobal((int)pe32.dwSize);
                        Marshal.StructureToPtr(pe32, temp, true);
                        pe = (PROCESSENTRY32)Marshal.PtrToStructure(temp, typeof(PROCESSENTRY32));
                        Marshal.FreeHGlobal(temp);
                        MessageBox.Show(pe32.szExeFile);
                        bMore = Process32Next(handle, ref pe32);
                    }
                }
                CloseHandle(handle);
             
             Application.Run(new Form1());
               
            }
        }
        [StructLayout(LayoutKind.Sequential)]
        public struct PROCESSENTRY32
        {
            public uint dwSize;
            public uint cntUsage;
            public uint th32ProcessID;
            public IntPtr th32DefaultHeapID;
            public uint th32ModuleID;
            public uint cntThreads;
            public uint th32ParentProcessID;
            public int pcPriClassBase;
            public uint dwFlags;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]//注意,此处为宽字符
            public string szExeFile;
            public uint th32MemoryBase;
            public uint th32AccessKey;
        }
        
        public enum SnapShotFlags:uint
        {
            TH32CS_SNAPHEAPLIST = 0x00000001,
            TH32CS_SNAPPROCESS = 0x00000002,
            TH32CS_SNAPTHREAD = 0x00000004,
            TH32CS_SNAPMODULE = 0x00000008,
            TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE),
            TH32CS_GETALLMODS = 0x80000000
        }

  • 相关阅读:
    解决Uploadify 3.2上传控件加载导致的GET 404 Not Found问题
    Intellij idea的Dependencies波浪线
    Web.xml配置详解之context-param
    The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path(Myeclipse添加Server Library)
    html5 video mp4播放不了问题
    切片优化小拾
    解决video标签的兼容性
    css module.css demo
    Gnet 响应式官网开发总结
    前端小总结
  • 原文地址:https://www.cnblogs.com/fujinliang/p/2684165.html
Copyright © 2020-2023  润新知