小编Swa*_*and的帖子

即使应用程序关闭后,NotifyIcon仍保留在托盘中,但在鼠标悬停时消失

关于SO的问题有很多疑问.解决方案是设置

notifyIcon.icon = nullDispose在FormClosing事件中调用它.

在我的应用程序中,没有这样的表单,但有通知图标更新事件.在创作时,我隐藏了我的形式并制作了ShowInTaskbar财产false.因此,我不能有"FormClosing"或"FormClosed"事件.

如果此应用程序获取退出事件,则调用Process.GetCurrentProcess().Kill();退出.

notifyIcon.icon = null在杀戮之前添加了Dispose,但仍然将图标保留为任务栏,直到我将鼠标悬停在它上面.

编辑:如果我认为这种行为是由于调用GetCurrentProcess().Kill(),是否有任何优雅的方式退出应用程序,这将清除所有资源并从系统托盘中删除图标.

c# notifyicon

64
推荐指数
5
解决办法
5万
查看次数

使用C#中的Marshal.StructureToPtr将结构传递给C++ API

我在我的代码中使用C++编写的API(用C#编写).API需要一个参数作为指向结构的指针.结构由"Int"和Char Arrays组成:例如

 unsafe public struct ToBePassed 
    { 
        Int32 Num1;
        Int32 Num2; 
        Char[] Data; // or fixed Char Data[255];
    }
Run Code Online (Sandbox Code Playgroud)

我不能直接将结构指针传递给API,因为在这种情况下,我收到错误,因为"指针不能引用Marshaled结构".代码编译成功但是当我执行(调试)代码时会出现此错误.

现在我有两个选择:第一: - 通过参考传递结构:我想问一下当我通过ref传递结构时,需要结构指针的API是否可以接收地址.请注意,API将在"Char [] Data"中返回Data.

第二: - 使用Marshal.StructureToPtr:这会将结构指针转换为IntPtr.怀疑是相同的,API会正确接收吗?

谢谢你的时间!

此致,Swanand

c# struct marshalling

15
推荐指数
1
解决办法
2万
查看次数

如何知道Union使用哪个变量?

如果我宣布一个联盟:

union TestUnion
{
    struct 
    {
      unsigned int Num;
      unsigned char Name[5];
    }TestStruct;
    unsigned char Total[7];
};
Run Code Online (Sandbox Code Playgroud)

现在,我怎么知道是使用了Total [7]还是使用了TestStruct?

我在用C!我正在重新审视工会和结构,我想到了这个问题." sizeof"不能用,因为它们都是相同的大小,即7个字节.(还有另一个问题)

当我只用字符'a'和Tried填充"Total"时sizeof(TestUnionInstance),它返回12(Char的大小是1字节,对吗?).所以我从中分离出结构,发现结构的大小是12个字节而不是5 + 2 = 7个字节....奇怪!! 谁能解释一下?

PS我正在使用Visual Studio 2008.

c unions

15
推荐指数
2
解决办法
5699
查看次数

什么是原生DLL?

当我在阅读StackOverflow上的DLL时,我偶尔会遇到"Native DLLs"这个词.我发现了有关它们的问题,但我无法理解"本机DLL"究竟是什么.

什么是本机DLL?

dll native

13
推荐指数
2
解决办法
1万
查看次数

对于每个代码,"程序无法启动,因为缺少msvcp100.dll"

这个错误导致了我的培训计划.

程序无法启动,因为......

每次我在我的VS2010中创建任何C++应用程序时,它在我的机器上运行正常,但如果我在不同的机器上运行它,它会从这个错误开始.如果我在系统文件夹中复制msvcp100.dll然后它为其他DLL喊叫,则会出现错误.它需要5-6个不同的DLL.

即使我编写一个简单的基于控制台的Addition程序,最烦人的部分也是如此,它给出了这个错误.(我不应该)我会同意如果我设计一些花哨的形式和所有......但对于简单的加法程序????

我错过了设置中的某些内容吗?还是VS2010要责怪?

有点相关的问题:这个但是这个问题似乎有所不同

visual-studio-2010 msvcr100.dll

12
推荐指数
2
解决办法
3万
查看次数

在C++非GUI应用程序中检测USB插入/删除

我想检测通过在后台运行但没有GUI的C++应用程序插入/删除特定(自定义)USB设备.

我已经看到很多问题,他们的解决方案RegisterDeviceNotification也在MSDN上提供代码示例

但是这些应用程序都有一些Window/Form/GUI.我的申请没有.我如何在我的应用程序中使用它?

我的最后一个选择是创建一个看不见的窗口......但还有其他出路吗?

c++ windows usb

12
推荐指数
2
解决办法
2万
查看次数

用函数计算C中的数组长度

我想制作一个计算传递数组大小的FUNCTION.

我将传递一个数组作为输入,它应该返回它的长度.我想要一个功能

int ArraySize(int * Array   /* Or int Array[] */)
{
   /* Calculate Length of Array and Return it */

}

void main()
{
  int MyArray[8]={1,2,3,0,5};
  int length;

  length=ArraySize(MyArray);

  printf("Size of Array: %d",length);

}
Run Code Online (Sandbox Code Playgroud)

长度应该是5,因为它包含5个元素,虽然它的大小是8(即使8会做,但5会很好)

我试过这个:

int ArraySize(int * Array)
{

  return (sizeof(Array)/sizeof(int));

}
Run Code Online (Sandbox Code Playgroud)

这将无效,因为" sizeof(Array)"将重新调整Int指针的大小.这个" sizeof"只有你在同一个功能时才有效.

实际上我从C#开始很多天回到C所以我不记得了(和失踪Array.Length())

问候!

c arrays

11
推荐指数
2
解决办法
7万
查看次数

在C#中执行任何其他操作时表单无响应

我有一个表单(使用VS2010在C#中开发)和一个进度条.这是一种秒表形式,我填写进度条说10secs ....随着时间流逝,进度条相应填充....意味着5secs后,进度条将填充50%等等....

我使用for循环来执行此操作: -

for(int count=0;count<200;count++)
{
   progbar.performstep();
   progbar.update();
   update();
   Thread.Sleep(50);
}
Run Code Online (Sandbox Code Playgroud)

我使用了50毫秒的Thread.Sleep,以便进度条顺利更新.持续1秒,它会逐步递增.

问题是,如果我做任何其他操作,如移动此表单,甚至点击桌面上的另一个图标使这个表单"无响应"....但它执行操作,并在10秒结束时,它重新获得它的状态并显示弹出,表示进度条已满10秒.

感谢您的帮助和抱歉使用这种复杂的语言.

此致,Swanand

更新:我在下面的答案的帮助下解决了这个问题....我要知道的一个常见错误就是忘记了" Applications.DoEvents()"以及" update()"......如果你进入这一行,那么"被绞死"的机会就会减少!

c# winforms

10
推荐指数
2
解决办法
2万
查看次数

&&条件的执行方向

可能重复:
逻辑比较:是否保证从左到右的评估?

我被告知,对于每个C函数参数,最右边的参数将首先执行/处理,然后向左进展.右侧部分将首先执行,然后向左前进.

这适用于像&&和||这样的条件 ??

如果我正在编写C++代码,我首先检查NULL condtion然后在下一步检查我是否执行了我的操作.例如

 if( CommDevice != NULL)
   {
      if(CommDevice->isOpen == TRUE)
         { 
                //Do Something
         }

   }
Run Code Online (Sandbox Code Playgroud)

我可以转换吗 if((CommDevice != NULL) && (CommDevice->isOpen == TRUE) )

"代码从右到左执行"恐惧正在阻止我,因为如果CommDevice是NULL,我试图访问NULL的成员.它会产生异常.

c c++ if-statement

9
推荐指数
1
解决办法
2438
查看次数

关于Windows的通知将在C++中进入睡眠状态/唤醒状态

我正在开发一个App,它有多个线程等待来自DLL和串行端口的不同输入.

我想添加一个功能,在机器进入睡眠之前,我必须卸载某些DLL并且在唤醒时必须重新加载DLL.为此,我需要获得有关睡眠和唤醒的通知.

我发现很多关于在C#中做的文件,但我想用C++做这件事.

我尝试使用此代码项目,但无法捕获任何事件.我删除了与Window Paint和All相关的所有内容,因为我不需要它的GUI并且仅保留main message loop (The While loop in the main)

编辑:-

我用它作为我的主循环: -

 // Start the message loop. 

while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
{ 
    if (bRet == -1)
    {
        // handle the error and possibly exit
    }
    else
    {
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
} 
Run Code Online (Sandbox Code Playgroud)

坦率地说,我从CodeProject复制了这个,并且只从MSDN文章中制作了一个修改即Checked GetMessage(..)!= 0.

我错过了什么吗?

或任何其他解决方案?

我正在使用VS2010并使用C++编程

提前致谢!

c++ winapi

7
推荐指数
1
解决办法
3469
查看次数